private void HandleNetwork() { while (true) { if (ShuttingDown) { return; } for (int i = 0; i < Clients.Count; i++) { //TODO: Kick client due to keep alive timeouts. while (Clients[i].Client.NetworkManager.DataAvailable) { try { /* S <- P <- C * Proxying data from client to server. */ var rawPacket = (byte[])null; // raw encrypted packet var decryptedPacket = (byte[])null; var packet = Clients[i].Client.NetworkManager.ReadPacket(out rawPacket, out decryptedPacket); // receive data from client if (packet != null) { HandlePacket(Clients[i], packet); if (rawPacket != null) { Clients[i].Server.NetworkManager.CoCStream.Write(rawPacket, 0, rawPacket.Length); // sends data back to server PacketDumper.LogPacket(packet, PacketDirection.Server, decryptedPacket); PacketLog.LogData(packet, PacketDirection.Server); } } } catch (Exception ex) { ExceptionLog.LogData(ex); Clients.RemoveAt(i); goto ResetLoop; } } if (Clients[i].Server == null) { continue; } while (Clients[i].Server.NetworkManager.DataAvailable) { try { /* S -> P -> C * Proxying data from server to client. */ var rawPacket = (byte[])null; var decryptedPacket = (byte[])null; var packet = Clients[i].Server.NetworkManager.ReadPacket(out rawPacket, out decryptedPacket); // receive data from server if (packet != null) { HandlePacket(Clients[i], packet); if (rawPacket != null) { Clients[i].Client.NetworkManager.CoCStream.Write(rawPacket, 0, rawPacket.Length); // sends data back to client PacketDumper.LogPacket(packet, PacketDirection.Client, decryptedPacket); PacketLog.LogData(packet, PacketDirection.Client); } } } catch (Exception ex) { ExceptionLog.LogData(ex); Clients.RemoveAt(i); goto ResetLoop; } } continue; ResetLoop: break; } Thread.Sleep(1); } }
private void HandleNetwork() { while (true) { if (ShuttingDown) { return; } for (int i = 0; i < Clients.Count; i++) { //TODO: Kick client due to keep alive timeouts. while (Clients[i].Client.NetworkManager.DataAvailable) { try { /* S <- P <- C * Proxying data from client to server. */ var rawPacket = (byte[])null; // raw encrypted packet var decryptedPacket = (byte[])null; var packet = Clients[i].Client.NetworkManager.ReadPacket(out rawPacket, out decryptedPacket); // receive data from client if (packet != null) { HandlePacket(Clients[i], packet); } if (rawPacket != null && packet != null) { Clients[i].Server.NetworkManager.CoCStream.Write(rawPacket, 0, rawPacket.Length); // sends data back to server PacketLogger.LogPacket(packet, PacketDirection.Server); PacketDumper.LogPacket(packet, PacketDirection.Server, decryptedPacket); } } catch (InvalidPacketException ex) { Console.WriteLine("[InvalidPacketException]: Client => {0}", ex.Message); // break; } catch (Exception ex) { Console.WriteLine("[{0}]: Client => {1}", ex.GetType().Name, ex.Message); Clients.RemoveAt(i); break; } } if (Clients[i].Server == null) { continue; } while (Clients[i].Server.NetworkManager.DataAvailable) { try { /* S -> P -> C * Proxying data from server to client. */ var rawPacket = (byte[])null; var decryptedPacket = (byte[])null; var packet = Clients[i].Server.NetworkManager.ReadPacket(out rawPacket, out decryptedPacket); // receive data from server if (packet != null) { HandlePacket(Clients[i], packet); } if (rawPacket != null && packet != null) { // could log packets in a sperate thread Clients[i].Client.NetworkManager.CoCStream.Write(rawPacket, 0, rawPacket.Length); // sends data back to client PacketLogger.LogPacket(packet, PacketDirection.Client); PacketDumper.LogPacket(packet, PacketDirection.Client, decryptedPacket); } } catch (InvalidPacketException ex) { Console.WriteLine("[InvalidPacketException]: Client => {0}", ex.Message); // break; } catch (Exception ex) { Console.WriteLine("[{0}]: Client => {1}", ex.GetType().Name, ex.Message); Clients.RemoveAt(i); break; } } } Thread.Sleep(1); } }