Exemple #1
0
 public ServerLinkMessageEvent(MessageType messageType, MsgBasePacket messageData, NetServerLinkStatus serverLinkStatus, GameTime gameTime)
 {
     this.MessageType = messageType;
     this.MessageData = messageData;
     this.ServerLinkStatus = serverLinkStatus;
     this.Time = gameTime;
 }
Exemple #2
0
 public ServerLinkStateChangedEvent(NetServerLinkStatus oldValue, NetServerLinkStatus newValue)
 {
     OldValue = oldValue;
     NewValue = newValue;
 }
Exemple #3
0
        private void HandleData(GameTime gameTime, NetIncomingMessage msg)
        {
            MessageType messageType = (MessageType)msg.ReadByte();

            switch (messageType)
            {
                case MessageType.MsgState:
                    {
                        Log.DebugFormat("Got MsgState ({0} bytes)", msg.LengthBytes);

                        // we finished receiving state at this point
                        ServerLinkStatus = NetServerLinkStatus.Connected;

                        break;
                    }

                case MessageType.MsgAddPlayer:
                    {
                        Log.DebugFormat("Got MsgAddPlayer ({0} bytes)", msg.LengthBytes);

                        MsgAddPlayerPacket packet = MsgAddPlayerPacket.Read(msg);

                        FireMessageEvent(gameTime, packet);

                        break;
                    }

                case MessageType.MsgRemovePlayer:
                    {
                        Log.DebugFormat("Got MsgRemovePlayer ({0} bytes)", msg.LengthBytes);

                        MsgRemovePlayerPacket packet = MsgRemovePlayerPacket.Read(msg);

                        FireMessageEvent(gameTime, packet);

                        break;
                    }

                case MessageType.MsgWorld:
                    {
                        Log.DebugFormat("Got MsgWorld ({0} bytes)", msg.LengthBytes);

                        UInt16 mapLength = msg.ReadUInt16();
                        Byte[] rawWorld = new Byte[mapLength];
                        msg.ReadBytes(mapLength, out rawWorld);

                        MemoryStream ms = new MemoryStream(rawWorld);
                        StreamReader sr = new StreamReader(ms);

                        MsgWorldPacket msgWorldEventData = new MsgWorldPacket(mapLength, sr);

                        FireMessageEvent(gameTime, msgWorldEventData);

                        break;
                    }

                case MessageType.MsgPlayerServerUpdate:
                    {
                        MsgPlayerServerUpdatePacket packet = MsgPlayerServerUpdatePacket.Read(msg);

                        FireMessageEvent(gameTime, packet);

                        break;
                    }

                default:
                    // if we get anything else we should fail
                    // protocol version should protect us from unknowns
                    break;

            }
        }
Exemple #4
0
        public void Update(GameTime gameTime)
        {
            NetIncomingMessage msg;

            // are there any messages for us to read?
            while ((msg = Client.ReadMessage()) != null)
            {
                switch (msg.MessageType)
                {
                    case NetIncomingMessageType.WarningMessage:
                        Log.Warn(msg.ReadString());
                        break;

                    case NetIncomingMessageType.ErrorMessage:
                        Log.Error(msg.ReadString());
                        break;

                    case NetIncomingMessageType.DebugMessage:
                        Log.Debug(msg.ReadString());
                        break;

                    case NetIncomingMessageType.ConnectionLatencyUpdated:
                        Log.InfoFormat("Connection latency: {0}", msg.ReadSingle());
                        break;

                    case NetIncomingMessageType.StatusChanged:
                        NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte();

                        switch (status)
                        {
                            case NetConnectionStatus.Connected:
                                ServerLinkStatus = NetServerLinkStatus.Accepted;
                                break;

                            case NetConnectionStatus.Disconnected:
                                ServerLinkStatus = NetServerLinkStatus.Disconnected;
                                break;

                            default:
                                break;
                        }

                        string reason = msg.ReadString();
                        Log.DebugFormat("New status: {0} ({1})", status, reason);

                        break;

                    case NetIncomingMessageType.Data:
                        HandleData(gameTime, msg);
                        break;

                    default:
                        Log.DebugFormat("Hit default message handler for {0}", msg.MessageType);
                        break;
                }

                // reduce GC pressure by recycling
                Client.Recycle(msg);
            }

            // let server know we're ready to start receiving state if we've been accepted
            if (ServerLinkStatus == NetServerLinkStatus.Accepted)
            {
                NetOutgoingMessage msgReady = Client.CreateMessage();

                msgReady.Write((Byte)MessageType.MsgState);

                Client.SendMessage(msgReady, NetDeliveryMethod.ReliableOrdered, 0);

                // we now move to getting initial state
                ServerLinkStatus = NetServerLinkStatus.GettingState;
            }
        }
Exemple #5
0
        public void Disconnect(string byeMessage)
        {
            Client.Disconnect(byeMessage);

            // we don't want to change our status to disconnecting if we know we can't get out of it
            if (ServerLinkStatus != NetServerLinkStatus.None
                && ServerLinkStatus != NetServerLinkStatus.Disconnecting
                && ServerLinkStatus != NetServerLinkStatus.Disconnected)
                ServerLinkStatus = NetServerLinkStatus.Disconnecting;
        }
Exemple #6
0
        public NetConnection Connect(String host, UInt16? port, String callsign, String tag, TeamType team)
        {
            NetOutgoingMessage hailMessage = Client.CreateMessage();

            hailMessage.Write((Byte)MessageType.MsgEnter);
            hailMessage.Write(ProtocolInformation.ProtocolVersion);
            hailMessage.Write((Byte)team);
            hailMessage.Write(callsign);
            hailMessage.Write((tag != null ? tag : ""));

            // we are now initiating the connect, so change status
            ServerLinkStatus = NetServerLinkStatus.Connecting;

            if (!port.HasValue)
                port = 5150;

            return Client.Connect(host, port.Value, hailMessage);
        }