public ServerLinkMessageEvent(MessageType messageType, MsgBasePacket messageData, NetServerLinkStatus serverLinkStatus, GameTime gameTime) { this.MessageType = messageType; this.MessageData = messageData; this.ServerLinkStatus = serverLinkStatus; this.Time = gameTime; }
public ServerLinkStateChangedEvent(NetServerLinkStatus oldValue, NetServerLinkStatus newValue) { OldValue = oldValue; NewValue = newValue; }
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; } }
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; } }
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; }
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); }