public void RemoveClient(GNIClientInformation client) { OnClientDisconnected(client); try { client.tcpClient.Close(); } catch (Exception) { } clients.Remove(client); }
//--------------Listening------------ //Listens for incoming connections private void Listen(object o) { if (!stopListening) { TcpListener listener = new TcpListener(System.Net.IPAddress.Any, port); listener.Start(); while (!stopListening) { //Add any incoming cients to the list if (listener.Pending()) { bool succesful = false; try { while (clientLock) { Thread.Sleep(50); } clientLock = true; TcpClient tcpClient = listener.AcceptTcpClient(); GNIClientInformation client = new GNIClientInformation(currentID, tcpClient); clients.Add(client); succesful = true; ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { OnClientConnected(client); })); clientLock = false; } catch (Exception) { clientLock = false; } if (succesful) { currentID++; } } Thread.Sleep(listenInterval); } listener.Stop(); } }
public override void OnClientDisconnected(GNIClientInformation client) { SMessage(client.name + " has left."); }
public override void OnClientConnected(GNIClientInformation client) { SMessage(client.name + " has joined. " + clients.Count + " people online."); }
public virtual void OnClientDisconnected(GNIClientInformation client) { }
//--------------Listening------------ //Listens for incoming connections private void Listen(object o) { if (!stopListening) { TcpListener listener = new TcpListener(System.Net.IPAddress.Any, port); listener.Start(); while (!stopListening) { //Add any incoming cients to the list if (listener.Pending()) { bool succesful = false; try { while (clientLock) { Thread.Sleep(50); } clientLock = true; TcpClient tcpClient = listener.AcceptTcpClient(); GNIClientInformation client = new GNIClientInformation(currentID, tcpClient); clients.Add(client); succesful = true; ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { OnClientConnected(client); })); clientLock = false; } catch (Exception) { clientLock = false; } if (succesful) { currentID++; } } Thread.Sleep(listenInterval); } listener.Stop(); } }
public void SendSignal(GNIClientInformation recipient, GNIData data) { SendSignal(recipient.tcpClient, data); }
public void RemoveClient(GNIClientInformation client) { OnClientDisconnected(client); try { client.tcpClient.Close(); } catch (Exception) { } clients.Remove(client); }
public virtual void OnClientDisconnected(GNIClientInformation client) { }
public void SendSignal(GNIClientInformation recipient, GNIData data) { SendSignal(recipient.tcpClient, data); }
//------------Update----------- public override void Update() { while (clientLock) { Thread.Sleep(50); } //clientLock = true; try { //For every client for (int i = 0; i < clients.Count; i++) { GNIClientInformation client = clients[i]; //Check if connection still exists if (client.tcpClient == null) { RemoveClient(client); } //And is still connected if (!client.tcpClient.Connected) { RemoveClient(client); } //If it's not currently loading any data... if (client.dataBeingTransferred.started == false) { //Start loading if data length is available if (client.tcpClient.Available > 3) { byte[] buffer = new byte[4]; client.tcpClient.GetStream().Read(buffer, 0, 4); int dataLength = BitConverter.ToInt32(buffer, 0); client.dataBeingTransferred = new GNIPendingData(dataLength); } } //Now, if it's already started loading data... if (client.dataBeingTransferred.started) { int bytesToRead = client.tcpClient.Available; if (bytesToRead > 0) { if (bytesToRead > client.dataBeingTransferred.datalength - client.dataBeingTransferred.dataread) { bytesToRead = client.dataBeingTransferred.datalength - client.dataBeingTransferred.dataread; } byte[] buffer = new byte[bytesToRead]; client.tcpClient.GetStream().Read(buffer, 0, bytesToRead); client.dataBeingTransferred.AddData(buffer); if (client.dataBeingTransferred.datalength == client.dataBeingTransferred.dataread) { HandleSignal(client.dataBeingTransferred.data, clients[i].clientID); client.dataBeingTransferred = new GNIPendingData(false); } } } clients[i] = client; } } catch (Exception ex) { } //clientLock = false; }
public override void OnClientConnected(GNIClientInformation client) { Console.WriteLine("Client connected: " + client.clientID); }