Ejemplo n.º 1
0
        public override IDataContainer ProcessMessage(int SCBID, EndPoint RemoteIPEndPoint, NTCPMessage.MessageFlag Flag, ushort CableId, uint Channel, uint Event, SoapMessage objMsg)
        {
            if (null == objMsg)
            {
                return(DataContainer.CreateNullDataContainer());
            }

            IDataContainer result = null;

            try
            {
                //如果不是集群,那么主节点处理消息
                PeekerClusterNode slaveNode = null;
                var cmdHead = objMsg.Head;
                if (false == GlobalContext.IsConfigClusteringMode ||//是否开启集群模式
                    cmdHead.Equals(CommandConstants.CMD_RegisterSlavePort) ||//注册从节点端口
                    MasterRemoteServer.GetOneSlavePort(out slaveNode) == false ||//是否注册从节点端口)//注册从节点端口
                    slaveNode.Port == GlobalContext.MasterSocketPort   //分配到了主节点工作
                    )
                {
                    result = base.ProcessMessage(SCBID, RemoteIPEndPoint, Flag, CableId, Channel, Event, objMsg);
                }
                else
                {
                    //转发到从节点
                    result = this.TransferMsgToSlave(slaveNode, objMsg);
                }

                if (null != slaveNode)
                {
                    slaveNode.ConnectedCount -= 1;//设置连接 减量
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            return(result);
        }
        public override IDataContainer ProcessMessage(int SCBID, EndPoint RemoteIPEndPoint, NTCPMessage.MessageFlag Flag, ushort CableId, uint Channel, uint Event, SoapMessage obj)
        {
            if (null == obj)
            {
                return(DataContainer.CreateNullDataContainer());
            }

            IDataContainer result = null;

            try
            {
                //对消息命令内容进行分支处理
                string actionName = obj.Head;
                switch (actionName)
                {
                case CommandConstants.CMD_Platforms: result = this.GetAllSupportPlatforms(); break;

                case CommandConstants.CMD_FetchPage:

                    //从body 中获取参数 ,并传递到指定的Action todo  :指定命令发到指定的平台action解析
                    var args_webpage = JsonConvert.DeserializeObject <BaseFetchWebPageArgument>(obj.Body);
                    result = this.FetchPlatformSearchWebPage(args_webpage);
                    break;

                case CommandConstants.CMD_FetchquanExistsList:

                    //从body 中获取参数
                    var args_yuohuiquan = JsonConvert.DeserializeObject <YouhuiquanFetchWebPageArgument>(obj.Body);
                    result = this.FetchYouhuiquanExistsList(args_yuohuiquan);

                    break;

                case CommandConstants.CMD_FetchquanDetails:

                    //从body 中获取参数
                    var args_yuohuiquanDetails = JsonConvert.DeserializeObject <YouhuiquanFetchWebPageArgument>(obj.Body);
                    result = this.FetchYouhuiquanDetails(args_yuohuiquanDetails);

                    break;

                case CommandConstants.CMD_RegisterSlavePort:

                    var args_registerPort = JsonConvert.DeserializeObject <RegisterPortArgument>(obj.Body);
                    result = this.RegisterSlavePort(args_registerPort.SlaveIdentity);
                    break;
                //case CommandConstants.CMD_ScanSoapServerSupportCluster:

                //    var args_serverCluter = JsonConvert.DeserializeObject<ScanServerInfoArgument>(obj.Body);
                //    result = this.ScanServerInfo(args_serverCluter);
                //    break;
                default:
                    result = DataContainer.CreateNullDataContainer();
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            return(result);
        }