Exemple #1
0
        // 4. Отправить полученные данные всем клиентам в комнате
        private static void SendData(IAsyncResult ar)
        {
            SocketCoderClient socketCoderClient = (SocketCoderClient)ar.AsyncState;

            byte[] masRecData = socketCoderClient.GetRecievedData(ar);

            if (masRecData.Length < 1)
            {
                socketCoderClient.ReadOnlySocket.Close();
                arrayClient.Remove(socketCoderClient);
                return;
            }
            foreach (SocketCoderClient clnt in arrayClient)
            {
                if (socketCoderClient != clnt)
                {
                    try
                    {
                        clnt.ReadOnlySocket.Send(masRecData);
                    }
                    catch
                    {
                        clnt.ReadOnlySocket.Close();
                        arrayClient.Remove(socketCoderClient);
                        return;
                    }
                }
            }
            socketCoderClient.acceptCallback();
        }
Exemple #2
0
        // 3. Создайте Socket для каждого клиента и добавьте его в Socket ArrayList
        private static void AddNewClient(Socket socket)
        {
            nClient = new SocketCoderClient(socket);
            arrayClient.Add(nClient);

            nClient.acceptCallback();
        }
        // Добавление клиента
        private static void AddClient(Socket sockClient)
        {
            Newclient = new SocketCoderClient(sockClient);

            ClientsList.Add(Newclient);

            
            Newclient.SetupRecieveCallback();
        }
        // (3) Create a Socket for Each Client and add his Socket to The ArrayList
        private static void AddClient(Socket sockClient)
        {
            Newclient = new SocketCoderClient(sockClient);

            ClientsList.Add(Newclient);

            // client.Sock.RemoteEndPoint - " has joined the room"
            Newclient.SetupRecieveCallback();
        }
        // (3) Create a Socket for Each Client and add his Socket to The ArrayList
        private static void AddClient(Socket sockClient)
        {
            Newclient = new SocketCoderClient(sockClient);
               // ClientsList.Add(Newclient);

            // client.Sock.RemoteEndPoint - " has joined the room"

               /* Byte[] byteDateLine = System.Text.Encoding.Unicode.GetBytes(" - Welcome to Our Room - ");
            Newclient.ReadOnlySocket.Send(byteDateLine, byteDateLine.Length, 0);*/
            Newclient.SetupRecieveCallback();
        }
        // Создание сокета для каждого клиента и добавление в ClientList
        private static void AddClient(Socket sockClient)
        {
            Newclient = new SocketCoderClient(sockClient);

            

            // логинимся
            Newclient.LetsLogin();
        }
        private static void SendDataFrom(SocketCoderClient client, byte[] aryRet, byte type)
        {
            try
            {
                foreach (SocketCoderClient clientSend in ClientsList)
                {
                    if (client != clientSend)
                        try
                        {

                            char[] sigcs = SIGN.ToCharArray();
                            byte[] sig = new byte[32];
                            for (int i = 0; i < 32; i++)
                            {
                                if (i < sigcs.Length)
                                    sig[i] = Convert.ToByte(sigcs[i]);
                                else
                                    sig[i] = Convert.ToByte('\0');
                            }

                            int len = client._login.Length;
                            if (len > 256)
                                len = 256;
                            char[] c = client._login.ToCharArray();



                            byte[] b = new byte[256];
                            for (int i = 0; i < 256; i++)
                            {
                                if (i < c.Length)
                                    b[i] = Convert.ToByte(c[i]);
                                else
                                    b[i] = Convert.ToByte('\0');
                            }

                            byte[] valtype = new byte[1];
                            valtype[0] = type;// 0 - трансляция видео; 1 - пользователь вошёл; 2 - user вышел;
                            /*
                            List<ArraySegment<byte>> lb = new List<ArraySegment<byte>>();
                            ArraySegment<byte> asb0 = new ArraySegment<byte>(sig);//Сигнатура
                            ArraySegment<byte> asb1 = new ArraySegment<byte>(b);//Логин
                            ArraySegment<byte> asb1_5 = new ArraySegment<byte>(valtype);//Код типа сообшения
                            ArraySegment<byte> asb2 = new ArraySegment<byte>(aryRet);//Данные
                            lb.Add(asb0);
                            lb.Add(asb1);
                            lb.Add(asb1_5);
                            lb.Add(asb2);
                            /**/
                            byte[] BigBuf = new byte[sig.Length + b.Length + valtype.Length + aryRet.Length];
                            Array.Copy(sig, 0, BigBuf, 0, sig.Length);
                            Array.Copy(b, 0, BigBuf, sig.Length, b.Length);
                            Array.Copy(valtype, 0, BigBuf, sig.Length + b.Length, valtype.Length);
                            Array.Copy(aryRet, 0, BigBuf, sig.Length + b.Length + valtype.Length, aryRet.Length);
                            /**/

                            clientSend.ReadOnlySocket.NoDelay = true;
                            clientSend.ReadOnlySocket.Send(BigBuf);
                        }
                        catch
                        {
                            clientSend.ReadOnlySocket.Close();
                            ClientsList.Remove(clientSend);
                            for (int io=0; io<lb1.Items.Count ;io++ )
                            {
                                if ((lb1.Items[io] as MyUser).so == clientSend.ReadOnlySocket)
                                {
                                    lb1.Items.RemoveAt(io);
                                    break;
                                }
                            }
                            SendDataFrom(clientSend, new byte[160512], 2);
                            return;
                        }
                }
            }
            catch
            { }
        }



        private static void SendListDataTo(SocketCoderClient client)
        {
            
                byte[] aryRet = new byte[160512];

                
                    try
                    {

                        aryRet[0] = 0;
                        int point = 1;
                        for(int io=0;io<ClientsList.Count;io++)
                        {

                            if (client != (ClientsList[io] as SocketCoderClient))
                            {
                                aryRet[0]++;

                                string valx = (ClientsList[io] as SocketCoderClient)._login;

                                char[] valxc = valx.ToCharArray();

                                for (int k = 0; k < valxc.Length; k++)
                                {
                                    
                                    aryRet[point++] = Convert.ToByte(valxc[k]);
                                    if (point >= aryRet.Length)
                                    {
                                        io = ClientsList.Count;
                                        break; 
                                    }
                                }
                                if (point < aryRet.Length)
                                aryRet[point++] = 216;// разделительный символ
                            }
                        }
                        char[] sigcs = SIGN.ToCharArray();
                        byte[] sig = new byte[32];
                        for (int i = 0; i < 32; i++)
                        {
                            if (i < sigcs.Length)
                                sig[i] = Convert.ToByte(sigcs[i]);
                            else
                                sig[i] = Convert.ToByte('\0');
                        }

                        int len = client._login.Length;
                        if (len > 256)
                            len = 256;
                        char[] c = client._login.ToCharArray();



                        byte[] b = new byte[256];
                        for (int i = 0; i < 256; i++)
                        {
                            if (i < c.Length)
                                b[i] = Convert.ToByte(c[i]);
                            else
                                b[i] = Convert.ToByte('\0');
                        }

                        byte[] valtype = new byte[1];
                        valtype[0] = 3;// 0 - трансляция видео; 1 - пользователь вошёл; 2 - user вышел;
                        /*
                        List<ArraySegment<byte>> lb = new List<ArraySegment<byte>>();
                        ArraySegment<byte> asb0 = new ArraySegment<byte>(sig);//Сигнатура
                        ArraySegment<byte> asb1 = new ArraySegment<byte>(b);//Логин
                        ArraySegment<byte> asb1_5 = new ArraySegment<byte>(valtype);//Код типа сообшения
                        ArraySegment<byte> asb2 = new ArraySegment<byte>(aryRet);//Данные
                        lb.Add(asb0);
                        lb.Add(asb1);
                        lb.Add(asb1_5);
                        lb.Add(asb2);
                        /**/
                        byte[] BigBuf = new byte[sig.Length + b.Length + valtype.Length + aryRet.Length];
                        Array.Copy(sig, 0, BigBuf, 0, sig.Length);
                        Array.Copy(b, 0, BigBuf, sig.Length, b.Length);
                        Array.Copy(valtype, 0, BigBuf, sig.Length + b.Length, valtype.Length);
                        Array.Copy(aryRet, 0, BigBuf, sig.Length + b.Length + valtype.Length, aryRet.Length);
                        /**/

                        client.ReadOnlySocket.NoDelay = true;
                        client.ReadOnlySocket.Send(BigBuf);
                    }
                    catch
                    {
                        client.ReadOnlySocket.Close();
                        
                        for (int io = 0; io < lb1.Items.Count; io++)
                        {
                            if ((lb1.Items[io] as MyUser).so == client.ReadOnlySocket)
                            {
                                lb1.Items.RemoveAt(io);
                                break;
                            }
                        }
                        /**/
                        ClientsList.Remove(client);
                        
                        return;
                    }
            
        }