/// <summary>
 /// 重载消息分发器
 /// </summary>
 /// <param name="message"></param>
 public override void HandleMessage(ProtoBuf.IExtensible message)
 {
     if (this.sfs.Debug)
     {
         this.log.Info(new string[]
         {
             string.Concat(new object[]
             {
                 "Message: ",
                 message.GetType().FullName,
                 " ",
                 message
             })
         });
     }
     if (!this.requestHandlers.ContainsKey(message.GetType().FullName))
     {
         this.log.Warn(new string[]
         {
             "Unknown message name: " + message.GetType().FullName
         });
     }
     else
     {
         RequestProtoBufDelegate requestDelegate = this.requestHandlers[message.GetType().FullName];
         requestDelegate(message);
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 给服务器发送协议时
 /// </summary>
 /// <param name="protocol"></param>
 public ProtocolItem(ProtoBuf.IExtensible protocol)
 {
     if (protocol != null)
     {
         if (ProtocolProxy.instance.IsLoginServer)
         {
             ProtocolId = (int)ProtocolConf.GetLoginServerIdByType(protocol.GetType());
         }
         else
         {
             ProtocolId = (int)ProtocolConf.GetIdByType(protocol.GetType());
         }
         Protocol          = protocol;
         ProtocolItemBytes = ParseItem();
         if (ProtocolConf.NeedShowMask(ProtocolId))
         {
             Logic.UI.Mask.Contorller.MaskController.instance.ShowMask();
         }
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="session"></param>
 /// <param name="message"></param>
 public static void SendMessage(IOSession session, int msgid, ProtoBuf.IExtensible message)
 {
     if (session != null)
     {
         session.WriteAndFlush(msgid, MessageSerialize(message));
     }
     else
     {
         log.Error("session:为空 发送消息 " + message.GetType().FullName);
     }
 }
Ejemplo n.º 4
0
 public void OnDataRead(ByteArray data, int msgNameLen)
 {
     if (data.Length == 0)
     {
         throw new AWError("Unexpected empty packet data: no readable bytes available!");
     }
     // UnityEngine.Debug.Log("AWIOHandler--call OnDataProtoBufRead --" + DefaultObjectDumpFormatter.HexDump(data));
     UnityEngine.Debug.Log("反序列化消息名字长度:  " + msgNameLen);
     UnityEngine.Debug.Log("反序列化消息参数据度:  " + data.Bytes.Length);
     UnityEngine.Debug.Log("反序列化消息内容:   " + DefaultObjectDumpFormatter.HexDump(data));
     ProtoBuf.IExtensible message = this.protoBufserializer.Deserialize(msgNameLen, data.Bytes, 0, data.Bytes.Length);
     UnityEngine.Debug.Log("反序列化消息:  " + message.GetType().FullName.ToString(null) + "   OK!");
     HandleProtoBufPacketData(message);
 }
Ejemplo n.º 5
0
    public static void Dispatch(ProtoBuf.IExtensible msg)
    {
        Type key = msg.GetType();

        if (s_Handlers.ContainsKey(key))
        {
            // We found a specific handler! :)
            s_Handlers[key].Process(msg);
        }
        else
        {
            // We will have to resort to the default handler. :(
            s_DefaultHandler.Process(msg);
        }
    }
Ejemplo n.º 6
0
    public override void SerializeTo(Stream stream, ProtoBuf.IExtensible message)
    {
        var messageType = this[message.GetType()];
        var package     = new Pmd.ForwardNullUserPmd_CS()
        {
            byCmd   = messageType.Cmd,
            byParam = messageType.Param,
            time    = DateTime.Now.ToUnixTime(),
        };

        using (var buf = new MemoryStream())
        {
            ProtoBuf.Serializer.NonGeneric.SerializeWithLengthPrefix(buf, message, ProtoBuf.PrefixStyle.Base128, 0);
            package.data = buf.ToArray();
        }

        ProtoBuf.Serializer.NonGeneric.SerializeWithLengthPrefix(stream, package, ProtoBuf.PrefixStyle.Base128, 0);
    }
Ejemplo n.º 7
0
    static public TableType InitTable(ProtoBuf.IExtensible table)
    {
        TableType dictTable = new TableType();
        Type      t         = table.GetType();

        System.Reflection.PropertyInfo p = t.GetProperty("list");
        IList ol = (IList)p.GetValue(table, null);

        foreach (ProtoBuf.IExtensible obj in ol)
        {
            Type objType = obj.GetType();
            System.Reflection.PropertyInfo objProperty = objType.GetProperty("ID");
            object key  = objProperty.GetValue(obj, null);
            object nkey = changeKey(key);

            dictTable[nkey] = obj;
        }
        return(dictTable);
    }
Ejemplo n.º 8
0
        public static void MessagePump(ProtoBuf.IExtensible message)
        {
            var messageType = message.GetType();

            if (!methodList.ContainsKey(messageType))
            {
                var namePath   = messageType.Name.Split('.');
                var methodName = "RPC_" + namePath[namePath.Length - 1];
                var method     = ProcessorClassType
                                 .GetMethod(methodName
                                            , System.Reflection.BindingFlags.Static |
                                            System.Reflection.BindingFlags.Public |
                                            System.Reflection.BindingFlags.NonPublic
                                            );
                Delegate mehthodDelegate = Delegate.CreateDelegate(typeof(ProtocolWrapper.MessageHandle <>).MakeGenericType(messageType), method);
                methodList[messageType] = mehthodDelegate;
            }
            var methodDelegate = methodList[messageType];

            methodDelegate.DynamicInvoke(message);
        }
        public Pmd.ForwardNullUserPmd_CS Serialize(ProtoBuf.IExtensible message)
        {
            if (message == null)
            {
                return(null);
            }
            var type = this[message.GetType()];

            if (type == NetMessageType.Empty)
            {
                return(null);
            }
            var package = new Pmd.ForwardNullUserPmd_CS()
            {
                byCmd   = type.Cmd,
                byParam = type.Param,
                time    = DateTime.Now.ToUnixTime(),
            };
            var msg = message as ProtoBuf.IMessage;

            package.data = msg.SerializeToBytes();
            return(package);
        }
Ejemplo n.º 10
0
        public bool TryApplyMessage(ProtoBuf.IExtensible message, DemoParser parser)
        {
            CSVCMsg_UserMessage userMessage = message as CSVCMsg_UserMessage;

            if (userMessage == null || !Enum.IsDefined(typeof(ECstrike15UserMessages), userMessage.msg_type))
            {
                return(false);
            }

            ECstrike15UserMessages msg = (ECstrike15UserMessages)userMessage.msg_type;
            Type toParse = Assembly.GetExecutingAssembly().GetType("DemoInfo.Messages.CCSUsrMsg_" + msg.ToString().Substring(6));

            using (var memstream = new MemoryStream(userMessage.msg_data))
            {
                ProtoBuf.IExtensible data = memstream.ReadProtobufMessage(toParse);
                if (data != null)
                {
                    switch (data.GetType().Name)
                    {
                    case "CCSUsrMsg_SayText":
                    {
                        SayTextEventArgs  e      = new SayTextEventArgs();
                        CCSUsrMsg_SayText sayMsg = (CCSUsrMsg_SayText)data;
                        e.Text        = sayMsg.text;
                        e.TextAllChat = sayMsg.textallchat;
                        e.Chat        = sayMsg.chat;
                        parser.RaiseSayText(e);
                        break;
                    }

                    case "CCSUsrMsg_SayText2":
                    {
                        SayText2EventArgs  e      = new SayText2EventArgs();
                        CCSUsrMsg_SayText2 sayMsg = (CCSUsrMsg_SayText2)data;
                        e.TextAllChat = sayMsg.textallchat;
                        e.Chat        = sayMsg.chat;

                        // get the player who wrote the message
                        foreach (KeyValuePair <int, Player> keyValuePair in parser.Players)
                        {
                            if (keyValuePair.Value.Name == sayMsg.@params[0])
                            {
                                e.Sender = parser.Players[keyValuePair.Key];
                                break;
                            }
                        }

                        // @params is a 4 length array but only 2 are used [0] = nickname [1] = message text
                        e.Text = sayMsg.@params[0] + " : " + sayMsg.@params[1];
                        parser.RaiseSayText2(e);
                        break;
                    }

                    case "CCSUsrMsg_ServerRankUpdate":
                    {
                        ServerRankUpdateEventArgs e = new ServerRankUpdateEventArgs
                        {
                            RankStructList = new List <ServerRankUpdateEventArgs.RankStruct>()
                        };

                        CCSUsrMsg_ServerRankUpdate rankMsg = (CCSUsrMsg_ServerRankUpdate)data;

                        foreach (CCSUsrMsg_ServerRankUpdate.RankUpdate rankUpdate in (rankMsg.rank_update))
                        {
                            ServerRankUpdateEventArgs.RankStruct rankStruct = new ServerRankUpdateEventArgs.RankStruct
                            {
                                New        = rankUpdate.rank_new,
                                Old        = rankUpdate.rank_old,
                                NumWins    = rankUpdate.num_wins,
                                RankChange = rankUpdate.rank_change,
                                SteamId    = rankUpdate.account_id + VALVE_MAGIC_NUMBER
                            };
                            e.RankStructList.Add(rankStruct);
                        }

                        parser.RaiseServerRankUpdate(e);

                        break;
                    }

                    default:
                        // TODO: maybe, like, implement something here one day?
                        //Problem: There is no real useful info here if I see it correcly. Sorry.
                        //var messageType = (Messages.ECstrike15UserMessages)userMessage.msg_type;
                        return(true);
                    }
                }
                return(false);
            }
        }
Ejemplo n.º 11
0
    public void Send(ProtoBuf.IExtensible cmd)
    {
        if (netLink == null)
        {
            return;
        }

        try
        {
            var package = VarlenProtobufCommandSerializer.Instance().Serialize(cmd);
            var ok      = packageSerializer.Write(package, netLink, bFirstMsg);
            if (ok)
            {
                bFirstMsg = false;
                if ((cmd is Pmd.ForwardBwNullUserPmd_CS) == false && LogFilter(cmd))
                {
                    if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
                    {
                        Engine.Utility.Log.LogGroup(GameDefine.LogGroup.Net, "<color=green>[SEND]</color>{0}: {1}\n{2}", VarlenProtobufCommandSerializer.Instance()[cmd.GetType()], cmd.GetType().Name, cmd.Dump());
                    }
                }
            }
            else
            {
                if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
                {
                    Engine.Utility.Log.LogGroup(GameDefine.LogGroup.Net, "<color=red>[SEND ERROR]</color>{0}: {1}\n{2}", VarlenProtobufCommandSerializer.Instance()[cmd.GetType()], cmd.GetType().Name, cmd.Dump());
                }
            }
        }
        catch (Exception ex)
        {
            packageSerializer.OnError(ex);
        }
    }
Ejemplo n.º 12
0
    private void PushCmd(ProtoBuf.IExtensible message)
    {
        if (message == null)
        {
            return;
        }

        //老协议,转换
        var raw = message as Pmd.ForwardBwNullUserPmd_CS;

        if (raw != null)
        {
            Execute(raw);
            return;
        }


        var rawNull = message as Pmd.ForwardNullUserPmd_CS;

        if (rawNull != null)
        {
            Execute(rawNull);
            return;
        }
        if (Protocol.Instance.IsReconnecting)
        {
            if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
            {
                Log.LogGroup("ZDY", "重连第一个message name " + message.GetType().Name);
            }
            if (message.GetType().Namespace.Equals("GameCmd"))
            {
                if (message is GameCmd.stLoginStepSelectUserCmd)
                {
                    isReConnectByLogin = true;
                    GameCmd.stLoginStepSelectUserCmd cmd = message as GameCmd.stLoginStepSelectUserCmd;
                    if (cmd.step == GameCmd.LoginStep.LOGIN_SCENE)
                    {
                        Log.Error("收到消息是LOGIN_SCENE,走重新登录流程");
                        isReConnectByLogin = false;
                        Protocol.Instance.SetReconnect(false, true);
                    }
                }
            }
            else
            {//非登录流程 任意一个消息代表重连成功
                if (!isReConnectByLogin)
                {
                    if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
                    {
                        Log.LogGroup("ZDY", "不走重新登录 重连第一个message name " + message.GetType().Name);
                    }
                    Protocol.Instance.SetReconnect(false, false);
                }
            }
        }

        //receivedQueueProtobuf.Enqueue(message);
        receivedQueueMessage.Enqueue(message);

        if (NetService.LogFilter(message))
        {
            if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
            {
                Engine.Utility.Log.LogGroup(GameDefine.LogGroup.Net, "<color=yellow>[RECV]</color>{0}: {1}\n{2}", VarlenProtobufCommandSerializer.Instance()[message.GetType()], message.GetType().Name, message.Dump());
            }
            // [RECV]的网络接收日志
        }
    }
Ejemplo n.º 13
0
    void DispatchMessage()
    {
        ProtoBuf.IExtensible proto = null;

        //if (receivedQueueProtobuf.TryDequeue(out proto))
        //{
        //    if (dispatcherProtobuf.Dispatch(proto) == false)
        //    {
        //        var tag = VarlenProtobufCommandSerializer.Instance().rawCommandSerializer[proto.GetType()];
        //        Engine.Utility.Log.Trace("<color=red>[RECV]</color>未处理的消息: {0} {1}\n{2}", tag, proto.GetType(), proto.Dump());
        //    }
        //}

        while (receivedQueueMessage.Count > 0)
        {
            proto = receivedQueueMessage.Dequeue();

            /*
             * INetLinkMonitor montitor = NetService.Instance.CurrentMoniter;
             * if (montitor != null)
             * {
             *  var dic = montitor.GetMessageData();
             *  string name = proto.GetType().Name;
             *  if (dic.ContainsKey(name))
             *  {
             *      uint num = dic[name];
             *      dic[name] = num + 1;
             *  }
             *  else
             *  {
             *      montitor.SetMontitorMessage(name, 1);
             *  }
             * }
             */
            if (dispatcherProtobuf.Dispatch(proto) == false)
            {
                if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group)
                {
                    var tag = VarlenProtobufCommandSerializer.Instance().rawCommandSerializer[proto.GetType()];
                    Engine.Utility.Log.Trace("<color=red>[RECV]</color>未处理的消息: {0} {1}\n{2}", tag, proto.GetType(), proto.Dump());
                }
            }
        }
    }
Ejemplo n.º 14
0
        public static void RegisterMessage(int messageid, long threadid, Type handler, ProtoBuf.IExtensible msgInstance)
        {
            log.Debug("注册消息处理器 id: " + messageid + " type: " + handler.Name + " msgInstance:" + msgInstance.GetType().Name);

            MessageHandlers[messageid] = new MessageBean()
            {
                MsgId = messageid, ThreadID = threadid, Handler = handler, MsgInstance = msgInstance
            };
        }