using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; public class Client { //naam en inbox private string name; private Queue inbox; //for netwerk verbinding private TcpClient socket; private int serverport; private string serverAddress; public GameWorld gameWorld; bool serverFound; //Create server public Client(int serverport, string serverAddress, GameWorld gw) { this.serverport = serverport; this.serverAddress = serverAddress; inbox = new Queue(); gameWorld = gw; //System.Net.Sockets.SocketException sock = new SocketException(); } public string Name { get { return name; } } public void kill() { Console.WriteLine("Stopping client"); socket = null; Console.WriteLine("client stopped"); } //Start Client public void run() { Console.WriteLine("Starting client"); socket = new TcpClient(); Console.WriteLine("Connecting with " + serverAddress + ":" + serverport); //Connect with server try { socket.Connect(serverAddress, serverport); serverFound = true; } catch (System.Net.Sockets.SocketException sock) { System.Console.WriteLine("Could not find server"); serverFound = false; GameModeHandler gmHandler = gameWorld.Find("gmHandler") as GameModeHandler; gmHandler.CurrentGameMode = GameModeHandler.GameMode.Menu; } //De loop hieronder is de kern van je Client. Hij wacht elke keer op een bericht en stopt deze dan //in je inbox while (serverFound == true) { //byte array, hierin komt het bericht byte[] bytesFrom = new byte[10025]; //vraag verbinding op NetworkStream stream = socket.GetStream(); //lees data in van verbinding, dit wacht tot er een nieuw bericht in stream.Read(bytesFrom, 0, (int)socket.ReceiveBufferSize); //maak er een string van string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); //haal de restdata aan het einde weg (de string is altijd 10025 bytes lang, je bericht kan korter zijn) dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf('\n')); //Alleen de server weet je naam, dus zolang je geen naam hebt gekregen wacht je daarop if (name == null && dataFromClient.Substring(0, 7) == "client_") { //haal voor en achteraan spaties weg name = dataFromClient.Trim(); //jee ik heb een naam Console.WriteLine("My name is " + name); //Het naambericht hoeft niet in je inbox, deze heb je al vewerkt continue; } //stop het bericht in je inbox inbox.Enqueue(dataFromClient); //en laat het zien Console.WriteLine("Received: " + dataFromClient); } } public Queue Inbox { get { return inbox; } } //Verstuur een bericht public void sendMessage(string message) { //alleen als je verbinding hebt, en als je een naam hebt (anders zit je nog initilisatiefase) if (socket != null && name != null) { byte[] outStream = System.Text.Encoding.ASCII.GetBytes(message + '\n'); NetworkStream stream = socket.GetStream(); stream.Write(outStream, 0, outStream.Length); stream.Flush(); } } public bool ServerFound { get { return serverFound; } } }