private void UpdateENet() { if (Host == null) { return; } ENet.Event netEvent; if (!Running && !Disconnecting) { Disconnecting = true; ENetNetwork.Send(PacketType.ClientDisconnect, PacketFlags.Reliable); return; } if (Host.CheckEvents(out netEvent) <= 0) { if (Host.Service(15, out netEvent) <= 0) { return; } } switch (netEvent.Type) { case ENet.EventType.None: break; case ENet.EventType.Connect: //Debug.Log("Client connected to server"); Connected = true; break; case ENet.EventType.Disconnect: Debug.Log("Client disconnected from server"); Connected = false; GameRoom.clients.Remove(myID); if (!IsQuitting) { Destroy(gameObject); CleanUp(); SceneManager.LoadScene("Main Menu"); Disconnecting = false; } break; case ENet.EventType.Timeout: Debug.Log("Client connection timeout"); if (GameRoom.clients != null) { GameRoom.clients.Remove(myID); } string activeScene = SceneManager.GetActiveScene().name; if (activeScene == "Main") { SceneManager.LoadScene("Main Menu"); Destroy(gameObject); CleanUp(); } if (activeScene == "Account Management") { UIAccountManagement.ConnectingENet = false; UIAccountManagement.UpdateText("Failed to connect to ENet server"); } break; case ENet.EventType.Receive: //Debug.Log("Packet received from server - Channel ID: " + netEvent.ChannelID + ", Data length: " + netEvent.Packet.Length); HandlePacket(ref netEvent); netEvent.Packet.Dispose(); break; } }
private void HandlePacket(ref ENet.Event netEvent) { try { var readBuffer = new byte[1024]; var readStream = new MemoryStream(readBuffer); var reader = new BinaryReader(readStream); readStream.Position = 0; netEvent.Packet.CopyTo(readBuffer); var packetID = (PacketType)reader.ReadByte(); if (packetID == PacketType.ServerCreateAccountDenied) { Debug.Log("Account denied"); var reason = reader.ReadString(); Debug.Log("Reason: " + reason); UIAccountManagement.UpdateText($"Account Denied: {reason}"); } if (packetID == PacketType.ServerCreateAccountAccepted) { Debug.Log("Account created"); UIAccountManagement.UpdateText($"Account Created"); } if (packetID == PacketType.ServerLoginAccepted) { Debug.Log("Login accepted"); UIAccountManagement.UpdateText($"Logging in..."); StartCoroutine(ASyncLoadGame()); } if (packetID == PacketType.ServerLoginDenied) { Debug.Log("Login denied"); var reason = reader.ReadString(); Debug.Log("Reason: " + reason); UIAccountManagement.UpdateText($"Login Denied: {reason}"); } if (packetID == PacketType.ServerPositionUpdate) { //Debug.Log("Received Server Position Update"); var players = reader.ReadInt32(); for (int i = 0; i < players; i++) { var id = reader.ReadUInt32(); var x = reader.ReadSingle(); var y = reader.ReadSingle(); //Debug.Log($"ID: {id}, X: {x}, Y: {y}"); if (clients.ContainsKey(id)) { Debug.Log("Updated position of oClient"); if (clients[id] == null) { clients.Remove(id); } else { clients[id].transform.position = new Vector2(x, y); } } else { Debug.Log("Added new oClient"); GameObject oClient = Instantiate(oClientPrefab, new Vector3(x, 0, y), Quaternion.identity); clients.Add(id, oClient); } } } } catch (ArgumentOutOfRangeException) { Console.WriteLine($"Received packet but buffer was too long. {netEvent.Packet.Length}"); } }