语音聊天源码 用tcp与udp网络传输
语音聊天源码 namespace VoiceChat.Model { // Подтверждения public enum Flags { Accept, BeginVideoSend, EndVideoSend } // Состояния модели public enum ModelStates { WaitCall, OutgoingCall, IncomingCall, Talk, Close } public class VoiceChatModel : INotifyPropertyChanged { private const int LINES_COUNT = 2; public AudioSharing audio; public VideoSharing video; public BdtpClient bdtpClient; private Thread waitCall; public bool Connected { get { return bdtpClient.Connected; } } public IPAddress RemoteIP { get { return remoteIP; } set { remoteIP = value; OnPropertyChanged("RemoteIP"); } } private IPAddress remoteIP; public IPAddress LocalIP { get { return bdtpClient.LocalIP; } } // Текущее состояние public ModelStates State { get { return state; } set { state = value; OnPropertyChanged("State"); mediaSounds.ControlSounds(); } } private ModelStates state; public CallTimer callTimer; private MediaSounds mediaSounds; public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string PropertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName)); } public VoiceChatModel() { bdtpClient = new BdtpClient(GetLocalIP(), LINES_COUNT); audio = new AudioSharing(this); video = new VideoSharing(this); mediaSounds = new MediaSounds(this); callTimer = new CallTimer(); InitializeEvents(); BeginWaitCall(); } // Инициализация private void InitializeEvents() { bdtpClient.ReceiptReceived += ReceiveAccept; bdtpClient.ReceiptReceived += ReceiveDisconnect; bdtpClient.ReceiptReceived += video.ReceiveFlags; } private IPAddress GetLocalIP() { IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName()); return addresses.Where(x => x.AddressFamily == AddressFamily.InterNetwork).Last(); } // Обработчики приема подтверждений public static bool IsFlag(Flags flag, byte[] buffer) { return buffer.Length == 1 && buffer[0] == (byte)flag; } private void ReceiveAccept(byte[] buffer) { if (IsFlag(Flags.Accept, buffer)) { State = ModelStates.Talk; } } private void ReceiveDisconnect(byte[] buffer) { if (buffer.Length == 0) { EndCall(); } } // Исходящий вызов public void BeginCall() { State = ModelStates.OutgoingCall; EndWaitCall();
- 1
- 粉丝: 5
- 资源: 25
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助