public void UpdateUserList(string sUsr, String sIP, string sPortVideo, string sPortAudio, bool bAdd, Socket sck) { try { if (!lstUsers.InvokeRequired) { // remove if exist int i; for (i = 0; i < _listUsr.Count; i++) { User tmp = (User)_listUsr[i]; if (tmp.GetUser() == sUsr) { _listUsr.Remove(tmp); lstUsers.Items.Remove(sUsr); } } if (bAdd) { User usr = new User(sUsr, sIP, sck); usr.SetIepAudio(Convert.ToInt32(sPortAudio)); usr.SetIepVideo(Convert.ToInt32(sPortVideo)); _listUsr.Add(usr); lstUsers.Items.Add(sUsr); } } else { UpdateUserListCallback d = new UpdateUserListCallback(UpdateUserList); Invoke(d, new object[] { sUsr, sIP, sPortVideo, sPortAudio, bAdd, sck }); } } catch (Exception) { } }
public void UpdateUserList(string sUsr, String sIP, string sPortVideo, string sPortAudio, bool bAdd, Socket sck) { try { if (!lstUsers.InvokeRequired) { // remove if exist int i; for (i = 0; i < _listUsr.Count; i++) { User tmp = (User)_listUsr[i]; if (tmp.GetUser() == sUsr) { _listUsr.Remove(tmp); lstUsers.Items.Remove(sUsr); } } if (bAdd){ User usr = new User(sUsr, sIP, sck); usr.SetIepAudio(Convert.ToInt32(sPortAudio)); usr.SetIepVideo(Convert.ToInt32(sPortVideo)); _listUsr.Add(usr); lstUsers.Items.Add(sUsr); } } else { UpdateUserListCallback d = new UpdateUserListCallback(UpdateUserList); Invoke(d, new object[] { sUsr, sIP, sPortVideo, sPortAudio, bAdd, sck }); } } catch (Exception) { } }
/// <summary> /// UDP Server Thread for audio frames /// </summary> private void UDPThreadAudio() { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); sock.ReceiveBufferSize = 10000000; sock.ReceiveTimeout = 900; IPEndPoint iep = new IPEndPoint(IPAddress.Any, _iPortAudio); sock.Bind(iep); EndPoint ep = (EndPoint)iep; int iRead; byte[] data = new byte[10000]; IPEndPoint iepConv; System.Text.Encoding enc; enc = System.Text.Encoding.ASCII; while (!_bStopServer) { try { iRead = sock.ReceiveFrom(data, ref ep); if (iRead > 0) { //Console.WriteLine("Thread Audio:" + iRead.ToString()); /*int iCnt = data[2]; * iCnt <<= 8; * iCnt |= data[1];*/ switch (data[0]) { case CMD_ECHO: sock.SendTo(data, iRead, SocketFlags.None, ep); Program.MainForm.UpdateBytesRX(iRead); break; case CMD_FRM_AUDIO: User usr = Program.MainForm.GetUserFromIPNoPort(ep.ToString()); //Console.WriteLine(usr.GetUser() + " > Audio "); iepConv = usr.GetIEPConvAudio(); if (iepConv != null) { sock.SendTo(data, iRead, SocketFlags.None, iepConv); } break; case CMD_BIND_USER: data[iRead] = 0; string sTmp = enc.GetString(data, 1, iRead - 1); User usrReceiver = Program.MainForm.GetUser(sTmp); User usrCaller = Program.MainForm.GetUserFromIPNoPort(ep.ToString()); if (usrReceiver != null) { usrCaller.SetIepAudio(ep.ToString()); usrCaller.SetIEPConvAudio(usrReceiver.GetIEPAudio()); String sCal = usrCaller.GetIEPVideo().Address + ":" + usrCaller.GetIEPVideo().Port; String sDst = usrReceiver.GetIEPVideo().Address + ":" + usrReceiver.GetIEPVideo().Port; Program.MainForm.AddLog("AUDIO BINDING :" + usrCaller.GetUser() + " " + sCal + "-> " + usrReceiver.GetUser() + " " + sDst, ""); data[1] = ACK; sock.SendTo(data, 2, SocketFlags.None, ep); } else { Program.MainForm.AddLog(usrCaller.GetUser() + " CANNOT AUDIO BIND ", ""); data[1] = NACK; sock.SendTo(data, 2, SocketFlags.None, ep); } break; } } } catch (Exception) { } } sock.Close(); }