private void Listen() { while (ServerRunning) { if (socket.Poll(-1, SelectMode.SelectRead)) { var task = socket.AcceptAsync(); task.ContinueWith((taskResult) => { var clientSocket = taskResult.Result; clients.Add(clientSocket); var tcpClient = new TcpSocket(clientSocket); SocketMapper.Mapper(clientSocket, tcpClient); ConnectionController?.HandleConnection(tcpClient); resetEvent.Set(); }); } else if (socket.Poll(10, SelectMode.SelectError)) { ConnectionController?.HandleError(this); break; } } }
private void Handler() { while (ServerRunning) { if (clients.Count == 0) { resetEvent.Reset(); resetEvent.Wait(-1); } SocketsSelector.Clear(); SocketsErrors.Clear(); SocketsSelector.AddRange(clients); SocketsErrors.AddRange(clients); try { Socket.Select(SocketsSelector, null, SocketsErrors, -1); } catch (Exception ex) { } for (var i = 0; i < SocketsSelector.Count; i++) { var socketSpeaker = SocketsSelector[i]; var bytes = ConnectionController?.HandleMesage(SocketMapper.GetISocket(socketSpeaker)); if (bytes == 0) { SocketMapper.RemoveISocketMapper(socketSpeaker); clients.Remove(socketSpeaker); } } for (var i = 0; i < SocketsErrors.Count; i++) { var socketError = SocketsErrors[i]; ConnectionController?.HandleError(SocketMapper.GetISocket(socketError)); SocketMapper.RemoveISocketMapper(socketError); clients.Remove(socketError); } } while (ClientRunning) { if (socket.Poll(-1, SelectMode.SelectRead)) { ConnectionController?.HandleMesage(null); } } }
public void Close() { socket.Close(); for (var i = 0; i < clients.Count; i++) { SocketMapper.RemoveISocketMapper(clients[i]); } clients.Clear(); ServerRunning = false; ClientRunning = false; }