public void DoReceived(MemoryStream stream) { var buffer = stream.GetBuffer(); int messageType = LittleEndian ? BitConverter.ToInt32(stream.GetBuffer(), 0) : (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; stream.Seek(4, SeekOrigin.Begin); if (_logger.IsDebugEnabled) { _logger.DebugFormat("received message message type {0}", messageType); } if (_serializer == null) { throw new Exception("serializer not set"); } object rc = _serializer.Deserialize(stream, messageType); if (MessageReceived != null) { ProcessMsg(new RecvMessage() { Channel = this, msg = rc, Type = messageType }); } else { _logger.WarnFormat("drop message because not event handler, type {0}", messageType); } }
private void HandleMessageReceived(NetworkMessage networkMessage) { // Note: We enqueue this command even as server, because we want clients to broadcast all their events // This may change. // For now, don't handle collisions with commands either. // We will have to handle versioning but we need to decide what to do with master / clients. SerializableNetworkCommand serializableCommand = _messageSerializer.Deserialize <SerializableNetworkCommand>(networkMessage); _commandQueue.Enqueue(serializableCommand.command.commandType, serializableCommand.command.dataType, serializableCommand.command.data, CommandSource.Network); }