// 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(); }
// 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; } }