Esempio n. 1
0
        static void SendResponse(ResponseParameter a_param)
        {
            Thread t = new Thread((object a_param2) =>
            {
                ResponseParameter param = (ResponseParameter)a_param2;
                bool r = true;

                param.m_msg.m_senderType = param.m_senderType;
                string portname = GetName(param.m_sock);
                string ctxstr = Message.ContextString(param.m_msg);
                Config.OnEventDelegate(portname
                    + param.m_responseType + " to "
                    + param.m_dest.ToString() + ctxstr);

                SocketPoller poller = param.m_worker.m_poller;
                switch (param.m_sock.ProtocolType) {
                    case ProtocolType.Tcp:
                        if (poller.IsRegstered(param.m_sock) == false) {
                            r = poller.ConnectAndSend(param.m_sock,
                                                      param.m_dest,
                                                      param.m_msg);
                        }
                        else {
                            r = poller.Send(param.m_sock,
                                            param.m_msg,
                                            true);
                        }
                        break;

                    case ProtocolType.Udp:
                        r = poller.SendTo(param.m_sock,
                                          param.m_dest,
                                          param.m_msg, false);
                        break;

                    default:
                        Debug.Assert(false);
                        break;
                }

                if (r == false)
                    Config.OnEventDelegate(portname + "Faild " + param.m_responseType + ctxstr);
            });

            t.IsBackground = true;
            t.Start(a_param);
        }
Esempio n. 2
0
        void SecondWorkerRoutine(object a_worker)
        {
            Worker worker = (Worker)a_worker;
            ProtocolType protocol = worker.m_socket.ProtocolType;
            if (protocol == ProtocolType.Tcp) {
                worker.m_poller.Start_Acceptor(worker.m_socket);
            }
            else {
                Debug.Assert(protocol == ProtocolType.Udp);
                worker.m_poller.Start(worker.m_socket);
            }

            while (m_run) {
                Message msg;
                Socket sock;
                IPEndPoint sender;
                bool isTimeout = ! worker.m_poller.WaitForMessage(Config.Server_Poll_Timeout_Ms,
                                                                  out msg,
                                                                  out sock,
                                                                  out sender);
                if (isTimeout)
                    continue;

                ++msg.m_contextSeq;
                msg.m_senderType = Message.SenderType.MainServer_SecondPort;
                msg.m_address = sender.Address.ToString();
                msg.m_port = sender.Port;

                Socket resSock = null;
                switch (protocol) {
                    case ProtocolType.Tcp:
                        resSock = Function.CreateSocket(ProtocolType.Tcp, null, false);
                        break;
                    case ProtocolType.Udp:
                        resSock = m_secondUdp.m_socket;
                        break;
                    default:
                        Debug.Assert(false);
                        break;
                }

                ResponseParameter param = new ResponseParameter(resSock,
                                                                worker,
                                                                sender,
                                                                new Message(msg),
                                                                Message.SenderType.Client_SecondPort,
                                                                "Response");
                SendResponse(param);
            }
        }
 // Called by SendResponse activity.
 public void SetResponseParameter(string operationName, Type type, object value)
 {
     previousResponseParameters[operationName] = new ResponseParameter(type, value);
 }
Esempio n. 4
0
        void FirstWorkerRoutine(object a_worker)
        {
            Worker worker = (Worker)a_worker;
            ProtocolType protocol = worker.m_socket.ProtocolType;
            if (protocol == ProtocolType.Tcp) {
                worker.m_poller.Start_Acceptor(worker.m_socket);
            }
            else {
                Debug.Assert(protocol == ProtocolType.Udp);
                worker.m_poller.Start(worker.m_socket);
            }

            while (m_run) {
                Message msg;
                IPEndPoint sender;
                Socket sock;
                bool isTimeout = ! worker.m_poller.WaitForMessage(Config.Server_Poll_Timeout_Ms,
                                                                  out msg,
                                                                  out sock,
                                                                  out sender);
                if (isTimeout)
                    continue;

                Debug.Assert(protocol == sock.ProtocolType);

                ++msg.m_contextSeq;
                msg.m_address = sender.Address.ToString();
                msg.m_port = sender.Port;

                ResponseParameter p1 = null;
                ResponseParameter p2 = null;
                ResponseParameter p3 = null;

                p1 = new ResponseParameter(sock,
                                           worker,
                                           sender,
                                           new Message(msg),
                                           Message.SenderType.MainServer_FirstPort,
                                           "Response");
                switch (protocol) {
                    case ProtocolType.Tcp:
                        p2 = new ResponseParameter(Function.CreateSocket(ProtocolType.Tcp, null, false),
                                                   worker,
                                                   sender,
                                                   new Message(msg),
                                                   Message.SenderType.MainServer_SecondPort,
                                                   "Response");
                        p3 = new ResponseParameter(Function.CreateSocket(ProtocolType.Tcp, null, false),
                                                   worker,
                                                   m_subServerAddr_tcp,
                                                   new Message(msg),
                                                   Message.SenderType.SubServer,
                                                   "Pass");
                        break;

                    case ProtocolType.Udp:
                        p2 = new ResponseParameter(m_secondUdp.m_socket,
                                                   m_secondUdp,
                                                   sender,
                                                   new Message(msg),
                                                   Message.SenderType.MainServer_SecondPort,
                                                   "Response");
                        p3 = new ResponseParameter(m_subServerUdp.m_socket,
                                                   m_subServerUdp,
                                                   m_subServerAddr_udp,
                                                   new Message(msg),
                                                   Message.SenderType.SubServer,
                                                   "Pass");
                        break;

                    default:
                        Debug.Assert(false);
                        break;
                }

                string ctxstr = " " + Message.ContextString(msg);
                Config.OnEventDelegate(GetName(sock) + "Requested from " + sender.ToString() + ctxstr);

                SendResponse(p1);
                SendResponse(p2);
                SendResponse(p3);
            }
        }
 // Called by SendResponse activity.
 public void SetResponseParameter(string operationName, Type type, object value)
 {
     previousResponseParameters[operationName] = new ResponseParameter(type, value);
 }