/// <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; }