Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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;
        }