void SampleAvailableEventHandler(List<byte[]> datas) { if (datas != null &&datas.Count > 0) { UdpPacket packet = new UdpPacket(Me.Id, RoomVM.Id, UdpPacketType.Data); foreach (var d in datas) { packet.Append(d); } AsyncBeginAudioSend(packet.ToBytes()); } }
private void ConnectAudio() { audioClient.Connect(RoomVM.ServiceIp, ApplicationVM.LocalCache.RoomAudioServicePort); UdpPacket packet = new UdpPacket(Me.Id, RoomVM.Id, UdpPacketType.Login); var loginBytes = packet.ToBytes(); try { audioRWLock.EnterWriteLock(); while (true) { try { audioClient.Send(loginBytes, loginBytes.Length); IPEndPoint serverEndPoint = null; var bytes = audioClient.Receive(ref serverEndPoint); UdpPacket p = UdpPacket.FromBytes(bytes); if (p.PacketType == UdpPacketType.LoginSucceed) { break; } } catch { continue; } } } catch { } finally { audioRWLock.ExitWriteLock(); } AsyncBeginAudioReceive(); }
private void DisconnectAudio() { UdpPacket packet = new UdpPacket(Me.Id, RoomVM.Id, UdpPacketType.Logoff); var logoffBytes = packet.ToBytes(); if (audioClient != null) { if (audioClient.Client.Connected) { try { audioRWLock.EnterWriteLock(); while (true) { try { if (audioClient != null) { audioClient.Send(logoffBytes, logoffBytes.Length); IPEndPoint serverEndPoint = null; var bytes = audioClient.Receive(ref serverEndPoint); UdpPacket p = UdpPacket.FromBytes(bytes); if (p.PacketType == UdpPacketType.LogoffSuccedd) { break; } } else break; } catch { continue; } } if(audioClient != null) audioClient.Close(); } catch { } finally { audioClient = null; audioRWLock.ExitWriteLock(); } } } }