示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }