1. Document
2. Code
2.1 NuGet Install
2.1 Sender Code
View Code
<Grid>
<Button Content="Click01" Command="{Binding ButtonCommand}" Height="40" Width="60"/>
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
</Grid>
ViewModel Code
using System.Threading;
using CFX;
using CFX.Transport;
using System;
using System.Security.Principal;
namespace CfxDemo.ViewModels
{
class MainWindowViewModel : BindableBase
{
public DelegateCommand ButtonCommand { get; set; }
public MainWindowViewModel()
{
ButtonCommand = new DelegateCommand(Start);
}
public void Start()
{
OpenRequest();
Console.ReadLine();
for(int i = 0;i<5;i++){
SendRequest();
Thread.Sleep(2000);
}
}
static string sendCFXHandle = "a.b.001";
static string receiveCFXHandle = "a.b.002";
static string sendRequestUri = string.Format("amqp://127.0.0.1:1235");
static string receivRequestUri = string.Format("amqp://127.0.0.1:1234");
#region send request
static AmqpCFXEndpoint endpointSendRequest;
static void OpenRequest()
{
if (endpointSendRequest != null)
{
endpointSendRequest.Close();
endpointSendRequest = null;
}
endpointSendRequest = new AmqpCFXEndpoint();
if (!endpointSendRequest.IsOpen)
{
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointSendRequest.IsOpen.ToString());
endpointSendRequest.Open(sendCFXHandle); //这一步会绑定endpointSendRequest里的CFXHandle,即sendCFXHandle的值
Console.WriteLine("Request.Source is : {0}",endpointSendRequest.CFXHandle);
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointSendRequest.IsOpen.ToString());
}
// Set a timeout of 20 seconds. If the target endpoint does not
// respond in this time, the request will time out.
AmqpCFXEndpoint.RequestTimeout = TimeSpan.FromSeconds(20);
}
static void SendRequest()
{
// Build a GetEndpointInfomation Request
CFXEnvelope request = CFXEnvelope.FromCFXMessage(new GetEndpointInformationRequest()
{
CFXHandle = receiveCFXHandle
});
request.Source = endpointSendRequest.CFXHandle;
request.Target = receiveCFXHandle;
try
{
CFXEnvelope response = endpointSendRequest.ExecuteRequest(receivRequestUri, request);
Console.WriteLine($"response:\n{response.ToJson(true)}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion send request
#region receive request
static AmqpCFXEndpoint endpointReceiveRequest;
static void OpenReceive()
{
if (endpointReceiveRequest != null)
{
endpointReceiveRequest.Close();
endpointReceiveRequest = null;
}
endpointReceiveRequest = new AmqpCFXEndpoint();
endpointReceiveRequest.OnRequestReceived -= Endpoint_OnRequestReceived;
endpointReceiveRequest.OnRequestReceived += Endpoint_OnRequestReceived;
if (!endpointReceiveRequest.IsOpen)
{
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointReceiveRequest.IsOpen.ToString());
endpointReceiveRequest.Open(receiveCFXHandle, new Uri(receivRequestUri));
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointReceiveRequest.IsOpen.ToString());
}
}
static CFXEnvelope Endpoint_OnRequestReceived(CFXEnvelope request)
{
Console.WriteLine($"Endpoint_OnRequestReceived: { request.ToString()}");
// Process request. Return Result.
if (request.MessageBody is WhoIsThereRequest)
{
CFXEnvelope result = CFXEnvelope.FromCFXMessage(new WhoIsThereResponse()
{ CFXHandle = receiveCFXHandle, RequestNetworkUri = receivRequestUri, RequestTargetAddress = "" });
result.Source = receiveCFXHandle;
result.Target = request.Source;
result.TimeStamp = DateTime.Now;
return result;
}
if (request.MessageBody is GetEndpointInformationRequest)
{
CFXEnvelope result = CFXEnvelope.FromCFXMessage(new WhoIsThereResponse()
{ CFXHandle = receiveCFXHandle, RequestNetworkUri = receivRequestUri, RequestTargetAddress = "...." });
result.Source = receiveCFXHandle;
result.Target = request.Source;
result.TimeStamp = DateTime.Now;
return result;
}
return null;
}
#endregion receive request
}
}
2.2 ReceiverCode
View Code
<Grid>
<Button Content="Click02" Command="{Binding ButtonCommand}" Height="40" Width="60"/>
<ContentControl prism:RegionManager.RegionName="ContentRegion" />
</Grid>
using CFX;
using CFX.Transport;
using System;
namespace CfxDemo2
{
class MainWindowViewModel: BindableBase
{
public DelegateCommand ButtonCommand { get; set; }
public MainWindowViewModel()
{
ButtonCommand = new DelegateCommand(Start);
}
public void Start()
{
Console.WriteLine("ReceivEndPoint is waiting Request......");
OpenReceive();
Console.WriteLine("Press Enter Key to end the App");
Console.ReadKey();
}
static string sendCFXHandle = "a.b.001";
static string receiveCFXHandle = "a.b.002";
static string sendRequestUri = string.Format("amqp://127.0.0.1:1235");
static string receivRequestUri = string.Format("amqp://127.0.0.1:1234");
#region send request
static AmqpCFXEndpoint endpointSendRequest;
static void OpenRequest()
{
if (endpointSendRequest != null)
{
endpointSendRequest.Close();
endpointSendRequest = null;
}
endpointSendRequest = new AmqpCFXEndpoint();
if (!endpointSendRequest.IsOpen)
{
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointSendRequest.IsOpen.ToString());
endpointSendRequest.Open(receiveCFXHandle, new Uri(receivRequestUri));
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointSendRequest.IsOpen.ToString());
}
// Set a timeout of 20 seconds. If the target endpoint does not
// respond in this time, the request will time out.
AmqpCFXEndpoint.RequestTimeout = TimeSpan.FromSeconds(20);
}
static void SendRequest()
{
// Build a GetEndpointInfomation Request
CFXEnvelope request = CFXEnvelope.FromCFXMessage(new GetEndpointInformationRequest()
{
CFXHandle = receiveCFXHandle
});
request.Source = endpointSendRequest.CFXHandle;
request.Target = receiveCFXHandle;
try
{
CFXEnvelope response = endpointSendRequest.ExecuteRequest(receivRequestUri, request);
Console.WriteLine($"response:\n{response.ToJson(true)}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion send request
#region receive request
static AmqpCFXEndpoint endpointReceiveRequest;
static void OpenReceive()
{
if (endpointReceiveRequest != null)
{
endpointReceiveRequest.Close();
endpointReceiveRequest = null;
}
endpointReceiveRequest = new AmqpCFXEndpoint();
endpointReceiveRequest.OnRequestReceived -= Endpoint_OnRequestReceived;
endpointReceiveRequest.OnRequestReceived += Endpoint_OnRequestReceived;
if (!endpointReceiveRequest.IsOpen)
{
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointReceiveRequest.IsOpen.ToString());
endpointReceiveRequest.Open(receiveCFXHandle, new Uri(receivRequestUri));
//endpointReceiveRequest.Open(receiveCFXHandle);
Console.WriteLine("endpointSendRequest.IsOpen:" + endpointReceiveRequest.IsOpen.ToString());
}
}
static CFXEnvelope Endpoint_OnRequestReceived(CFXEnvelope request)
{
Console.WriteLine($"Endpoint_OnRequestReceived: { request.ToString()}");
Console.WriteLine($"request:\n{request.ToJson(true)}");
// Process request. Return Result.
if (request.MessageBody is WhoIsThereRequest)
{
CFXEnvelope result = CFXEnvelope.FromCFXMessage(new WhoIsThereResponse()
{ CFXHandle = receiveCFXHandle, RequestNetworkUri = receivRequestUri, RequestTargetAddress = "" });
result.Source = receiveCFXHandle;
result.Target = request.Source;
result.TimeStamp = DateTime.Now;
return result;
}
if (request.MessageBody is GetEndpointInformationRequest)
{
CFXEnvelope result = CFXEnvelope.FromCFXMessage(new WhoIsThereResponse()
{ CFXHandle = receiveCFXHandle, RequestNetworkUri = receivRequestUri, RequestTargetAddress = "..." });
result.Source = receiveCFXHandle;
result.Target = request.Source;
result.TimeStamp = DateTime.Now;
return result;
}
return null;
}
#endregion receive request
}
}