using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; public class ClientHandler { private TcpClient client; private string name; //Het server object waarbij deze verbinding hoort private Server server; bool clientConnected; public GameWorld gameWorld; NetworkStream stream; //Constructor public ClientHandler(Server server, TcpClient client, string name, GameWorld gw) { this.server = server; this.client = client; gameWorld = gw; this.name = name; } //De kern van de serverkant van een verbinding. Wacht op een bericht en stop deze in de inbox van de server public void run() { Console.WriteLine("ClientHandler " + name + " started"); byte[] bytesFrom = new byte[10025]; //grootte overgenomen van voorbeeld string dataFromClient; //Deze loop wordt elke keer uitgevoerd als er een bericht binnenkomt while (true) { //vraag verbinding op try { stream = client.GetStream(); clientConnected = true; } catch (InvalidOperationException Invalid) { System.Console.WriteLine("Lost connection with client"); clientConnected = false; GameModeHandler gmHandler = gameWorld.Find("gmHandler") as GameModeHandler; gmHandler.CurrentGameMode = GameModeHandler.GameMode.Menu; } try { //lees data in, dit wacht dus tot er een bericht is. stream.Read(bytesFrom, 0, (int)client.ReceiveBufferSize); clientConnected = true; } catch (IOException IO) { System.Console.WriteLine("Lost connection with client"); clientConnected = false; GameModeHandler gmHandler = gameWorld.Find("gmHandler") as GameModeHandler; gmHandler.CurrentGameMode = GameModeHandler.GameMode.Menu; } //maak er een string van dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); //haal de restdata aan het einde weg dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf('\n')); //"bezorg" het bericht in de inbox van de server, zet de client naam erbij als "afzender" server.receiveMessage(this.Name, dataFromClient); } } //De naam van de client waarmee je verbonden bent public string Name { get { return name; } } //Stuur een bericht naar de client waarmee je verbonden bent public void sendMessage(string message) { byte[] outStream = System.Text.Encoding.ASCII.GetBytes(message + '\n'); try { stream = client.GetStream(); stream.Write(outStream, 0, outStream.Length); clientConnected = true; stream.Flush(); } catch (InvalidOperationException invalid) { System.Console.WriteLine("Lost connection with client"); clientConnected = false; GameModeHandler gmHandler = gameWorld.Find("gmHandler") as GameModeHandler; gmHandler.CurrentGameMode = GameModeHandler.GameMode.Menu; } } public bool ClientConnected { get { return clientConnected; } set { clientConnected = value; } } }