Пример #1
0
        public RemoteResult SendToWriter(ServerId server, NetCommand command)
        {
            Logger.Logger.Instance.TraceFormat("SendSync command {0} to {1}", command.GetType(), server);
            var connection = FindServer(server) as SingleConnectionToWriter;

            if (connection == null)
            {
                ConnectToWriter(server);
                connection = FindServer(server) as SingleConnectionToWriter;
            }

            if (connection == null)
            {
                Logger.Logger.Instance.DebugFormat("WriterNetModule: process server not found  server = {0}", server);
                return(new ServerNotFoundResult());
            }

            var ret = connection.SendSync(command);

            if (ret is FailNetResult)
            {
                Logger.Logger.Instance.DebugFormat("WriterNetModule: process fail result  server = {0}", server);
                RemoveConnection(server);
            }

            return(ret);
        }
Пример #2
0
        public RemoteResult SendToWriter(ServerId server, NetCommand command)
        {
            Logger.Logger.Instance.TraceFormat("SendSync command {0} to {1}", command.GetType(), server);
            var connection = FindServer(server) as SingleConnectionToWriter;

            if (connection == null)
            {
                ConnectToWriter(server);
                connection = FindServer(server) as SingleConnectionToWriter;
            }

            if (connection == null)
            {
                _distributor.ServerNotAvailable(server);
                return(new ServerNotFoundResult());
            }

            var ret = connection.SendSync(command);

            if (ret is FailNetResult)
            {
                RemoveConnection(server);
                _distributor.ServerNotAvailable(server);
            }

            return(ret);
        }
Пример #3
0
 //编码
 protected override byte[] EncodeCmd(NetCommand cmd)
 {
     if (cmd.GetType() == typeof(ByteNetCommand))
     {
         return((cmd as ByteNetCommand).buf);
     }
     else
     {
         var pyaloadStream = new MemoryStream();
         ProtoBuf.Serializer.Serialize(pyaloadStream, cmd);
         return(pyaloadStream.ToArray());
     }
 }
Пример #4
0
        internal void HandleNetCommand(NetCommand netCommand)
        {
            var commandHandler = CommandFactory.GetReflectedInstance(netCommand.GetType());

            if (commandHandler != null)
            {
                commandHandler.HandleCommand(netCommand);
            }
            else
            {
                FFB.Instance.AddReport(RawString.Create($"Missing handler for NetCommand {netCommand.GetType().Name}"));
            }
        }
Пример #5
0
        //TODO посмотреть будет ли работать
        public RemoteResult SendToDistributor(NetCommand command)
        {
            Logger.Logger.Instance.TraceFormat("SendSync command {0}", command.GetType());
            var connection = FindServer <SingleConnectionToDistributor>() as SingleConnectionToDistributor;

            if (connection == null)
            {
                return(new ServerNotFoundResult());
            }

            var ret = connection.SendSync(command);

            return(ret);
        }
Пример #6
0
        public string GetValue(string meta, NetCommand args)
        {
            switch (meta)
            {
            case "route":
            {
                string tpName = args.GetType() == typeof(ByteNetCommand) ? (args as ByteNetCommand).msgname : args.GetType().Name;
                string path   = makeRouteName(tpName);
                string tp     = types[tpName];
                return(path + $"{GetValue(tp, args)}");
            }

            default:
                return(metas[meta]);
            }
        }
Пример #7
0
        private void ProcessInner(NetCommand command)
        {
            if (command is RestoreCommand)
            {
                var comm = command as RestoreCommand;
                Logger.Logger.Instance.Debug(
                    string.Format("First restore server = {0}", _model.Servers.Count(x => !x.Equals(_model.Local))),
                    "restore");

                if (comm.FailedServers != null)
                {
                    var list = _model.Servers.Where(x => comm.FailedServers.Contains(x)).ToList();
                    _asyncDbWork.Restore(_model.LocalMap, list, comm.IsModelUpdated, comm.TableName);
                }
                else
                {
                    var servers = comm.IsModelUpdated
                        ? _model.Servers
                        : _model.Servers.Where(x => !x.Equals(_model.Local));
                    _asyncDbWork.Restore(_model.LocalMap, servers.ToList(), comm.IsModelUpdated, comm.TableName);
                }
            }
            else if (command is RestoreInProcessCommand)
            {
                _asyncDbWork.PeriodMessageIncome(((RestoreInProcessCommand)command).ServerId);
            }
            else if (command is RestoreCompleteCommand)
            {
                _asyncDbWork.LastMessageIncome(((RestoreCompleteCommand)command).ServerId);
            }
            else if (command is RestoreCommandWithData)
            {
                var comm = command as RestoreCommandWithData;
                _asyncDbWork.RestoreIncome(comm.ServerId, comm.IsModelUpdated, comm.Hash, comm.TableName);
            }
            else
            {
                Logger.Logger.Instance.ErrorFormat("Not supported command {0}", command.GetType());
            }
        }
Пример #8
0
 protected override uint Getpid(NetCommand cmd)
 {
     return(cmd.GetType() == typeof(ByteNetCommand) ? (cmd as ByteNetCommand).pid : Registry.MustFind(cmd.GetType()));
 }
Пример #9
0
        private void Process(NetCommand message)
        {
            if (message is ServerNotAvailableCommand)
            {
                ServerNotAvailableInner((message as ServerNotAvailableCommand).Server);
            }

            else if (message is AddDistributorFromDistributorCommand)
            {
                AddDistributor(message as AddDistributorFromDistributorCommand);
            }

            else if (message is RestoreCommand)
            {
                RestoreServerCommand(message as RestoreCommand);
            }
            else
            {
                Logger.Logger.Instance.ErrorFormat("Not supported command type = {0}", message.GetType());
            }
        }
Пример #10
0
 public static string GetLog(ServerId server, NetCommand command)
 {
     return(string.Format("Server = {0}, command = {1}", server, command.GetType()));
 }
Пример #11
0
 public static string GetLog(NetCommand command)
 {
     return(string.Format("command = {0}", command.GetType()));
 }
Пример #12
0
        public RemoteResult ASendToProxy(ServerId server, NetCommand command)
        {
            Logger.Logger.Instance.TraceFormat("ASendSync to proxy command {0} to {1}", command.GetType(), server);
            var connection = FindServer(server) as SingleConnectionToProxy;

            if (connection == null)
            {
                ConnectToProxy(server);
                connection = FindServer(server) as SingleConnectionToProxy;
            }

            if (connection == null)
            {
                return(new ServerNotFoundResult());
            }

            var ret = connection.SendASyncWithResult(command);

            if (ret is FailNetResult)
            {
                Logger.Logger.Instance.DebugFormat("DistributorNetModule: process fail result  server = {0}", server);
                RemoveConnection(server);
            }

            return(ret);
        }