public override void OnMessage() { int defineHeadSize = sizeof(int); do { if (ListByteBuffer.Count < defineHeadSize) { return; } byte[] lenBytes = ListByteBuffer.GetRange(0, defineHeadSize).ToArray(); int packageLen = BitConverter.ToInt32(lenBytes, 0); if (packageLen > ListByteBuffer.Count + defineHeadSize) { return; } byte[] data = ListByteBuffer.GetRange(defineHeadSize, packageLen).ToArray(); this.MessageHandler(data); ListByteBuffer.RemoveRange(0, packageLen + defineHeadSize); } while (ListByteBuffer.Count > defineHeadSize); }
public override void OnMessage() { var defineHeadSize = sizeof(int); if (ListByteBuffer.Count < defineHeadSize) { return; } byte[] lenBytes = ListByteBuffer.GetRange(0, defineHeadSize).ToArray(); int packageLen = BitConverter.ToInt32(lenBytes, 0); if (packageLen < 0 || packageLen > ApplicationConfiguartion.Options.MaxPacketSize || packageLen < 25) //数据不合法 或 小于大概ack固定长度 { this.Log(LogOutLevelType.Error, $"Type:{ConnectionWorkType.ToString()} 长度不合法!"); this.CloseSession(); return; } if (packageLen + defineHeadSize > ListByteBuffer.Count) { return; } this._ackRetainData = ListByteBuffer.GetRange(defineHeadSize, packageLen).ToArray(); ListByteBuffer.RemoveRange(0, packageLen + defineHeadSize); var longSize = sizeof(long); var packageBody = GZipHelper.Decompress(_ackRetainData, longSize, _ackRetainData.Length - longSize); var messageHead = TakeMessageHead(packageBody); if (messageHead == ACK_HEAD) { var ack = PacketSerializeHelper.DeserializePacket <AckPacket>(TakeMessage(packageBody)); this._accessId = ack.AccessId; if (ValidityAccessIdWithKey((ConnectionWorkType)ack.Type, ack.AccessId, ack.AccessKey)) { this.ApportionTypeHandlerEvent?.Invoke(this, (ConnectionWorkType)ack.Type); } else { if ((ConnectionWorkType)ack.Type == ConnectionWorkType.MainApplicationConnection) { var midData = MessageHelper.CopyMessageHeadTo(MessageHead.MID_ACCESS_KEY_WRONG); this.CurrentSession.SendAsync(midData.BuilderHeadPacket()); } this.Log(LogOutLevelType.Debug, $"Type:{((ConnectionWorkType)ack.Type).ToString()} AccessId:{ack.AccessId} 或AccessKey:{ack.AccessKey} 验证失败,登陆不成功!"); this.CloseSession(); } } else { this.CloseSession(); this.Log(LogOutLevelType.Warning, $"未知消息,连接被关闭!"); } }
public override void OnMessage() { int defineHeadSize = sizeof(int); int defineAccessIdSize = sizeof(long); do { if (!_accessId.HasValue && !_packageLength.HasValue) { if (ListByteBuffer.Count < defineHeadSize + defineAccessIdSize) { break; } byte[] headBytes = ListByteBuffer.GetRange(0, defineHeadSize + defineAccessIdSize).ToArray(); this._packageLength = BitConverter.ToInt32(headBytes, 0); this._accessId = BitConverter.ToInt64(headBytes, defineHeadSize); this._transpondOffset = 0; } TcpSessionChannelDispatcher dispatcher; if (_dispatchers.TryGetValue(_accessId.Value, out dispatcher) || true) { var calculateOffsetLength = (_packageLength.Value + defineHeadSize) - _transpondOffset; if (ListByteBuffer.Count <= calculateOffsetLength) { calculateOffsetLength = ListByteBuffer.Count; } var data = ListByteBuffer.GetRange(0, calculateOffsetLength).ToArray(); dispatcher?.SendTo(MessageHelper.CopyMessageHeadTo(MessageHead.MID_MESSAGE_DATA, new MessageDataPacket() { AccessId = dispatcher.DispatcherId, DispatcherId = this.DispatcherId, Data = data })); this._transpondOffset += data.Length; if (_transpondOffset == _packageLength) { this._accessId = null; this._packageLength = null; } ListByteBuffer.RemoveRange(0, calculateOffsetLength); } } while (ListByteBuffer.Count > defineHeadSize + defineAccessIdSize); }
public override void OnMessage() { var defineHeadSize = sizeof(int); if (ListByteBuffer.Count < defineHeadSize) { return; } byte[] lenBytes = ListByteBuffer.GetRange(0, defineHeadSize).ToArray(); int packageLen = BitConverter.ToInt32(lenBytes, 0); if (packageLen < 0 || packageLen > ApplicationConfiguartion.MaxPacketSize || packageLen < 25) //数据不合法 或 小于大概ack固定长度 { this.CloseSession(); return; } if (packageLen > ListByteBuffer.Count - defineHeadSize) { return; } this._ackRetainPacketData = ListByteBuffer.GetRange(0, defineHeadSize + packageLen).ToArray(); ListByteBuffer.RemoveRange(0, packageLen + defineHeadSize); this._accessId = BitConverter.ToInt64(_ackRetainPacketData, defineHeadSize); var longSize = sizeof(long); var packageBody = GZipHelper.Decompress(_ackRetainPacketData, defineHeadSize + longSize, _ackRetainPacketData.Length - defineHeadSize - longSize); var messageHead = TakeMessageHead(packageBody); if (messageHead == ACK_HEAD) { var ack = PacketSerializeHelper.DeserializePacket <AckPacket>(TakeMessage(packageBody)); if (ValidityAccessIdWithKey(ack.Type, ack.AccessId, ack.AccessKey)) { this.ApportionTypeHandlerEvent?.Invoke(this, ack.Type); } else { this.CloseSession(); } } else { this.CloseSession(); } }