//Add new user to client socket list private void newUserConnected(ClientSocket tmpClientSocket) { this._clientSockets.Add(tmpClientSocket.GetID(),tmpClientSocket); this._availableIDs.Remove(tmpClientSocket.GetID()); }
//#############Accept and receive messages private void AcceptCallBack(IAsyncResult ar) { allDone.Set(); try { Socket tmpSocket = _serverSocket.EndAccept(ar); ClientSocket tmpClientSocket = null; bool created = false; lock (_availableIDsBaton) { if (this._availableIDs.Count > 0) { tmpClientSocket = new ClientSocket(NextIDAvailable(), tmpSocket); tmpClientSocket._localBuffer = new Byte[tmpSocket.ReceiveBufferSize]; this.newUserConnected(tmpClientSocket); created = true; } } if (created) { tmpClientSocket._clientSocket.BeginReceive(tmpClientSocket._localBuffer, 0, tmpClientSocket._localBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), tmpClientSocket); } else { disconnectSocket(tmpSocket); } } catch(Exception ex) { Console.WriteLine(ex.Message); } }