private void CreateSocketForClients(Socket sockClient) { //Crete socket package for client _textClient = new TextClientPackage(new SocketAdapter(sockClient)); //add to client list connectedClients.Add(_textClient); //todo: create clientlist for unblocked-blocked clients byte[] info = System.Text.Encoding.Unicode.GetBytes("Connected to server!...\nClients in the Room:"); _textClient.GetSocket.Send(info, info.Length, 0); foreach (var item in connectedClients) { //send connected clients except newbie info to newbie if (item.GetSocket.RemoteEndPoint.ToString() != _textClient.GetSocket.RemoteEndPoint.ToString()) { byte[] endpoint = System.Text.Encoding.Unicode.GetBytes(item.GetSocket.RemoteEndPoint.ToString() + "\n"); _textClient.GetSocket.Send(endpoint, endpoint.Length, 0); } //and send newbie info to all clients except newbie if (item.GetSocket.RemoteEndPoint.ToString() != _textClient.GetSocket.RemoteEndPoint.ToString()) { byte[] connectedclientinfo = System.Text.Encoding.Unicode.GetBytes(_textClient.GetSocket.RemoteEndPoint.ToString() + " Connected to server!"); item.GetSocket.Send(connectedclientinfo, connectedclientinfo.Length, 0); } } _textClient.SetupRecieveCallback(); }
public static void OnRecievedData(IAsyncResult arg) { firstTime = DateTime.Now; var timeres = (firstTime - lastTime).TotalSeconds; TextClientPackage client = (TextClientPackage)arg.AsyncState; if (timeres > 1) { client = (TextClientPackage)arg.AsyncState; string aryRet = client.GetRecievedData(arg); //send to all clients or single var clientip = string.Concat(aryRet.TakeWhile(x => x != '_')); var clientmsg = string.Concat(aryRet.SkipWhile(x => x != '_')).Remove(0, 1); var sendto = connectedClients.Where(x => x.GetSocket.RemoteEndPoint.ToString() == clientip).FirstOrDefault(); var bytedata = System.Text.Encoding.Unicode.GetBytes(client.GetSocket.RemoteEndPoint.ToString() + "says : " + clientmsg); sendto?.GetSocket.Send(bytedata, bytedata.Length, 0); } else { //Warn Client var warninfo = System.Text.Encoding.Unicode.GetBytes("Server: You cant send more than one msg per sec"); client.GetSocket.Send(warninfo, warninfo.Length, 0); //Todo: create blacklist to kick client. close connection client.GetSocket.Close(); } client.SetupRecieveCallback(); lastTime = firstTime; }