/// <summary>
        /// 获取  叫号请求的 反馈消息.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        private AskWorkNumberRespond GetAskWorkNumberRespond(AskWorkNumberRequest request)
        {
            AskWorkNumberRespond result = new AskWorkNumberRespond();

            // 取得队列长度.
            int queueCount = queueManager.GetWorkNumberCount(request.ServiceCode);

            if (queueCount == 0)
            {
                // 不存在消息.
                result.ResultStatus     = AskWorkNumberRespond.ResultIsWithoutAnyWorkNumber;
                result.ResultWorkNumber = String.Empty;
            }
            else
            {
                // 存在消息.
                result.ResultStatus     = AskWorkNumberRespond.ResultIsHadWorkNumber;
                result.ResultWorkNumber = queueManager.GetAskWorkNumber(request.ServiceCode);
            }


            return(result);
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 发送请求消息.
        /// </summary>
        /// <param name="code"></param>
        private int SendMessage()
        {
            QueuingMachineMessage message = new QueuingMachineMessage()
            {
                Header = new MessageHeader()
                {
                    CommandID  = MessageHeader.QM_AskWorkNumber_Req,
                    SequenceNo = sequenceNo++,
                },
                Body = new AskWorkNumberRequest()
                {
                    ServiceCode = ServiceCode,
                },
            };



            // 第一个参数: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();

                AskWorkNumberRespond body = resultMessage.Body as AskWorkNumberRespond;


                if (body.ResultStatus == 0)
                {
                    ShowProcessMessage(String.Empty, "休息中......");

                    this.maxWorkingTimes = 0;
                    this.workingTimes    = 0;
                }
                else
                {
                    ShowProcessMessage(body.ResultWorkNumber, "服务中......");

                    // 随机服务时间.
                    this.maxWorkingTimes = random.Next(5, 15);
                    this.workingTimes    = 0;
                }


                return(body.ResultStatus);
            }
            catch (Exception ex)
            {
                ShowProcessMessage(String.Empty, "连接/发送/接收过程中,发生了错误!" + ex.Message);

                return(0);
            }
            finally
            {
                mySocket.Close();
            }
        }