/// <summary> /// 获取 申请新号码的 反馈消息. /// </summary> /// <param name="request"></param> /// <returns></returns> private NewWorkNumberRespond GetNewWorkNumberRespond(NewWorkNumberRequest request) { NewWorkNumberRespond result = new NewWorkNumberRespond() { // 请求号码 ResultWorkNumber = queueManager.GetNewWorkNumber(request.ServiceCode), // 队列首号码. TopWorkNumber = queueManager.GetTopWorkNumber(request.ServiceCode), // 队列长度. QueueLength = queueManager.GetWorkNumberCount(request.ServiceCode), }; return(result); }
public void MessageProcessTest() { // 请求5个号码. for (uint i = 0; i < 5; i++) { QueuingMachineMessage message = new QueuingMachineMessage() { Header = new MessageHeader() { CommandID = MessageHeader.QM_NewWorkNumber_Req, SequenceNo = i, }, Body = new NewWorkNumberRequest() { ServiceCode = "A", }, }; // 处理消息. QueuingMachineMessage resultMessage = processer.DoMessageProcess(message); // 结果消息非空. Assert.IsNotNull(resultMessage); // 核对消息头. // 核对 消息反馈类型. Assert.AreEqual(MessageHeader.QM_NewWorkNumber_Resp, resultMessage.Header.CommandID); // 核对 流水号. Assert.AreEqual(i, resultMessage.Header.SequenceNo); // 核对消息体. Assert.IsInstanceOf <NewWorkNumberRespond>(resultMessage.Body); NewWorkNumberRespond body = resultMessage.Body as NewWorkNumberRespond; // 叫号代码. Assert.AreEqual("A0000" + (i + 1), body.ResultWorkNumber); // 队列首代码. Assert.AreEqual("A00001", body.TopWorkNumber); // 队列长度. Assert.AreEqual(i + 1, body.QueueLength); } // 消费5个号码. for (uint i = 0; i < 5; i++) { QueuingMachineMessage message = new QueuingMachineMessage() { Header = new MessageHeader() { CommandID = MessageHeader.QM_AskWorkNumber_Req, SequenceNo = i, }, Body = new AskWorkNumberRequest() { ServiceCode = "A", }, }; // 处理消息. QueuingMachineMessage resultMessage = processer.DoMessageProcess(message); // 结果消息非空. Assert.IsNotNull(resultMessage); // 核对消息头. // 核对 消息反馈类型. Assert.AreEqual(MessageHeader.QM_AskWorkNumber_Resp, resultMessage.Header.CommandID); // 核对 流水号. Assert.AreEqual(i, resultMessage.Header.SequenceNo); // 核对消息体. Assert.IsInstanceOf <AskWorkNumberRespond>(resultMessage.Body); AskWorkNumberRespond body = resultMessage.Body as AskWorkNumberRespond; // 叫号代码. Assert.AreEqual("A0000" + (i + 1), body.ResultWorkNumber); } }
/// <summary> /// 发送请求消息. /// </summary> /// <param name="code"></param> private void SendMessage(string code) { QueuingMachineMessage message = new QueuingMachineMessage() { Header = new MessageHeader() { CommandID = MessageHeader.QM_NewWorkNumber_Req, SequenceNo = sequenceNo++, }, Body = new NewWorkNumberRequest() { ServiceCode = code, }, }; // 第一个参数:AddressFamily = 指定 Socket 类的实例可以使用的寻址方案。 // Unspecified 未指定地址族。 // InterNetwork IP 版本 4 的地址。 // InterNetworkV6 IP 版本 6 的地址。 // // 第二个参数:SocketType = 指定 Socket 类的实例表示的套接字类型。 // Stream 一个套接字类型,支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。 // 此类型的 Socket 与单个对方主机通信,并且在通信开始之前需要建立远程主机连接。 // 此套接字类型使用传输控制协议 (Tcp),AddressFamily 可以是 InterNetwork,也可以是 InterNetworkV6。 // // 第三个参数:ProtocolType = 指定 Socket 类支持的协议。 // Tcp 传输控制协议 (TCP)。 Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { // 尝试连接主机. mySocket.Connect(ephost); // 发送消息. SocketMessageSender sender = new SocketMessageSender(); sender.Socket = mySocket; sender.SendMessage(message); // 接收消息. SocketMessageReceiver receiver = new SocketMessageReceiver(); receiver.Socket = mySocket; QueuingMachineMessage resultMessage = receiver.ReceiveMessage(); NewWorkNumberRespond body = resultMessage.Body as NewWorkNumberRespond; txtResult.Text = String.Format(@"您的排队号码为{0}, 您前面共有{1}个用户处于等待中!", body.ResultWorkNumber, body.QueueLength - 1 ); } catch (Exception ex) { txtResult.AppendText("连接/发送/接收过程中,发生了错误!"); txtResult.AppendText(ex.Message); txtResult.AppendText(ex.StackTrace); } finally { mySocket.Close(); } }