public void Update() { NetIncomingMessage message; while ((message = _netServer.ReadMessage()) != null) { switch (message.MessageType) { case NetIncomingMessageType.Data: PacketType packetType = (PacketType)message.ReadInt16(); if (_packetHandlers.ContainsKey(packetType)) { var eventArgs = new PacketReceivedEventArgs(message, message.SenderConnection); foreach (var handler in _packetHandlers[packetType]) handler.Invoke(eventArgs); } break; case NetIncomingMessageType.ConnectionApproval: message.SenderConnection.Approve(); break; case NetIncomingMessageType.StatusChanged: if (message.SenderConnection.Status == NetConnectionStatus.Connected) { Console.WriteLine("Established connection with {0}.", message.SenderConnection.ToString()); if (this.Connection_Received != null) this.Connection_Received.Invoke(this, new ConnectionEventArgs(message.SenderConnection)); } else if (message.SenderConnection.Status == NetConnectionStatus.Disconnected) { Console.WriteLine("Lost connection with {0}.", message.SenderConnection.ToString()); if (this.Connection_Lost != null) this.Connection_Lost.Invoke(this, new ConnectionEventArgs(message.SenderConnection)); } break; case NetIncomingMessageType.DiscoveryRequest: NetOutgoingMessage response = _netServer.CreateMessage(); _netServer.SendDiscoveryResponse(response, message.SenderEndPoint); break; case NetIncomingMessageType.DebugMessage: Console.WriteLine(message.ReadString()); break; case NetIncomingMessageType.WarningMessage: Console.WriteLine(message.ReadString()); break; case NetIncomingMessageType.ErrorMessage: Console.WriteLine(message.ReadString()); break; } } }
private void HandlePlayerRegister(PacketReceivedEventArgs args) { var username = args.Message.ReadString(); var password = args.Message.ReadString(); var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); player.Name = username; player.Password = password; var registrationOkay = this.RegisterPlayer(player); Packet packet = new Packet(PacketType.RegistrationPacket); packet.Message.Write(registrationOkay); if (registrationOkay) { packet.Message.Write("Your account has been registered, logging in now..."); packet.Message.Write(args.Connection.RemoteUniqueIdentifier); player.Connection.SendMessage(packet.Message, NetDeliveryMethod.ReliableOrdered, (int)ChannelTypes.WORLD); player.EnterGame(); } else { packet.Message.Write("Your account has failed to register..."); } }
private void HandlePlayerMovement(PacketReceivedEventArgs args) { Vector vector = args.Message.ReadVector(); byte direction = args.Message.ReadByte(); var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); player.MoveTo(vector, direction); }
private void HandlePlayerLogin(PacketReceivedEventArgs args) { string username = args.Message.ReadString(); string password = args.Message.ReadString(); var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); player.Name = username; player.Password = password; bool loginOkay = this.LoginPlayer(args.Connection.RemoteUniqueIdentifier); Packet packet = new Packet(PacketType.LoginPacket); packet.Message.Write(loginOkay); if (loginOkay) { packet.Message.Write("Login sucess!"); packet.Message.Write(args.Connection.RemoteUniqueIdentifier); player.Connection.SendMessage(packet.Message, NetDeliveryMethod.ReliableOrdered, (int)ChannelTypes.WORLD); player.EnterGame(); } else { // Login failure. } }
private void HandlePickupItem(PacketReceivedEventArgs args) { Vector vector = args.Message.ReadVector(); var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); player.TryPickupItem(vector); }
private void HandleMapCheck(PacketReceivedEventArgs args) { var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); var response = args.Message.ReadBoolean(); if (response == false) { Packet packet = new Packet(PacketType.MapDataPacket); packet.Message.Write(player.Map.GetMapData()); player.Connection.SendMessage(packet.Message, NetDeliveryMethod.ReliableOrdered, (int)ChannelTypes.WORLD); return; } // The player is now in the map. // Set their inMap variable to true. // This is to make sure they're able to actually see the map before any map updates occur. player.InMap = true; player.SendPlayerData(); // Send all of the players... foreach (var mapPlayer in player.Map.GetPlayers()) { if (mapPlayer == player) continue; Packet packet = new Packet(PacketType.PlayerDataPacket); packet.Message.Write(mapPlayer.GetPlayerData()); player.Connection.SendMessage(packet.Message, NetDeliveryMethod.ReliableOrdered, (int)ChannelTypes.WORLD); } // Send all of the items currently spawned in the map. foreach (var mapItem in player.Map.GetMapItems()) { Packet packet = new Packet(PacketType.SpawnMapItemPacket); packet.Message.Write(mapItem.Item.Name); packet.Message.Write(mapItem.Item.TextureNumber); packet.Message.Write(mapItem.Position); packet.Message.Write(mapItem.SpawnDuration); player.Connection.SendMessage(packet.Message, NetDeliveryMethod.ReliableOrdered, (int)ChannelTypes.WORLD); } }
private void HandleDropItem(PacketReceivedEventArgs args) { var slotNum = args.Message.ReadInt32(); var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); player.DropItem(slotNum); }
private void HandleChatMessage(PacketReceivedEventArgs args) { var player = this.GetPlayer(args.Connection.RemoteUniqueIdentifier); var chatMessage = player.Name + " says: " + args.Message.ReadString(); Packet packet = new Packet(PacketType.ChatMessagePacket); packet.Message.Write(chatMessage); player.Map.SendPacket(packet, NetDeliveryMethod.Unreliable, ChannelTypes.CHAT); }