예제 #1
0
        private void OnHandleMsgPackests()
        {
            if (netMsgPackests.Count == 0)
            {
                return;
            }
            MsgPackest packest;

            while (netMsgPackests.TryDequeue(out packest))
            {
                Session session = packest.session;

                INetMsgSerializer serializer = configuration.GetMsgSerializer();
                object            msgType    = null;
                object            msgData    = null;
                try
                {
                    msgData = serializer.Deserialize(packest.contents, out msgType);
                }
                catch (Exception e)
                {
                    NetDebug.LogError("消息序列化失败:" + e);
                    return;
                }


                IMessageHandler messageHander = configuration.GetMessageHander();
                if (messageHander != null)
                {
                    try
                    {
                        messageHander.DispatchMessage(session, msgType, msgData);
                    }
                    catch (Exception e)
                    {
                        NetDebug.LogError("DispatchMessage error:" + e);
                    }
                }
            }
        }
예제 #2
0
        protected bool SendData <T>(Session session, object msgType, T messageData)
        {
            //if (LogInfo)
            //{
            //NetDebug.Log("Send Msg =>::" + typeof(T).Name + "-->" + JsonUtility.ToJson(messageData));
            //}
            if (Transport == null)
            {
                return(false);
            }

            INetMsgSerializer serializer = configuration.GetMsgSerializer();

            if (serializer == null)
            {
                NetDebug.LogError("No INetMsgSerializer!");
                return(false);
            }
            if (msgType == null)
            {
                msgType = serializer.GetMsgType(messageData);
            }
            byte[] datas = null;
            try
            {
                datas = serializer.Serialize(msgType, messageData);
            }
            catch (Exception e)
            {
                NetDebug.LogError("INetMsgSerializer error:" + e);
                return(false);
            }

            sendMsgLoop.Enqueue(new SendMsgTempData(session, datas));
            return(true);
        }
예제 #3
0
 /// <summary>
 ///  默认服务端配置
 /// </summary>
 /// <param name="transport"></param>
 /// <param name="serializer"></param>
 /// <param name="messageHandler"></param>
 /// <returns></returns>
 public static ServerConfiguration NewDefaultConfiguration(INetworkTransport transport, INetMsgSerializer serializer, IMessageHandler messageHandler)
 {
     return((ServerConfiguration) new ServerConfiguration(transport)
            .AddPlugin(new DataTypeMsgProcessPlugin())
            .AddPlugin(new NetHeartBeatPongPlugin())
            .AddPlugin(new NetPongPlugin())
            .AddMsgSerializer(serializer)
            .AddMessageHander(messageHandler)
            .SetByteOrder(ByteOrder.BIG_ENDIAN));
 }
예제 #4
0
 public NetConfiguration AddMsgSerializer(INetMsgSerializer serializer)
 {
     this.serializer = serializer;
     return(this);
 }