Пример #1
0
        /// <summary>
        /// A single callback s uised for all socket operations. This method forwards execution on to the correct handler
        /// based on the type of completed operation
        /// </summary>
        void SocketEventArg_Completed(object sender, SocketAsyncEventArgs e)
        {
            switch (e.LastOperation)
            {
            case SocketAsyncOperation.Connect:
                Logger.Debug("Receive SocketAsyncOperation.Connect");
                ProcessConnect(e, false);
                break;

            case SocketAsyncOperation.Receive:
                if (AbstractMessageInitializer.getDefaultLogger() != null)
                {
                    AbstractMessageInitializer.getDefaultLogger()("Receive SocketAsyncOperation.Receive:" + e.BytesTransferred);
                }
                else
                {
                    Logger.Debug("Receive SocketAsyncOperation.Receive  {0}", e.BytesTransferred);
                }
                ProcessReceive(e, false);
                break;

            case SocketAsyncOperation.Send:
                //Logger.Debug("Receive SocketAsyncOperation.Send");
                ProcessSend(e, false);
                break;

            default:
                if (handlerPipeline.InHeader != null)
                {
                    handlerPipeline.InHeader.OnDisconnected(this, e.SocketError);
                }
                Logger.Error("Invalid operation completed");
                throw new Exception("Invalid operation completed");
            }
        }
        public override void OnReceived(IConnection connection, NetworkBuffer buffer, int offset, int size)
        {
            int  protocolId = buffer.ReadInt32();
            int  bodySize   = size - 4;
            Type msgType    = messageInitializer.getMessageType(protocolId);

            if (msgType == null)
            {
                UnityEngine.Debug.Log(":::此消息C#无处理,进入ulua检测处理,消息号:" + protocolId + "-消息长度:" + size);
                LuaFramework.Util.CallMethod("Network", "OnSocket", protocolId, new ByteBuffer(buffer.GetBuffer()));
                return;
            }
            if (msgType == null)
            {
                this.ReceviedFail(buffer, protocolId, bodySize);
                return;
            }
            Message msg = (Message)Activator.CreateInstance(msgType);

            if (msg == null)
            {
                this.ReceviedFail(buffer, protocolId, bodySize);
                return;
            }
            msg.DecodeBody(buffer, buffer.ReadOffset, bodySize);
            IMessageHandler messageHandler = messageInitializer.GetMessageHandler(protocolId);

            if (AbstractMessageInitializer.getDefaultLogger() != null)
            {
                AbstractMessageInitializer.getDefaultLogger()("message recv:" + msgType.FullName + ", messageId:" + protocolId);
            }

            if (messageHandler != null)
            {
                messageHandler.handleMessage(connection, msg);
            }
            else
            {
                if (!msgDelegateProcessor.HandleMessage(msg, connection))
                {
                    //ReceviedFail(buffer, protocolId, bodySize);
                    return;
                    //messageHandler = messageInitializer.GetDefaultMessageHandler();
                    //if (messageHandler != null)
                    //    messageHandler.handleMessage(connection, msg);
                }
            }
        }
 private void ReceviedFail(NetworkBuffer buffer, int protocolId, int bodySize)
 {
     AbstractMessageInitializer.getDefaultLogger()("消息解析失败,messageID:" + protocolId);
     buffer.SkipBytes(bodySize);
 }
 public MessageInProcessor(AbstractMessageInitializer messageInitializer, MessageDelegateProcessor msgDelegateProcessor)
 {
     this.messageInitializer   = messageInitializer;
     this.msgDelegateProcessor = msgDelegateProcessor;
 }