/// <summary> /// 连接到对方设备端 /// </summary> /// <param name="endPoint"></param> /// <param name="inputDeviceNumber"></param> /// <param name="codec"></param> private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { waveIn = new WaveIn(); waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += waveIn_DataAvailable; waveIn.StartRecording(); udpSender = new UdpClient(); udpListener = new UdpClient(); // To allow us to talk to ourselves for test purposes: // http://stackoverflow.com/questions/687868/sending-and-receiving-udp-packets-between-two-programs-on-the-same-computer udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(endPoint); udpSender.Connect(endPoint); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); connected = true; var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
private void ListenerThreadEncrypted(object state) { ListenerThreadState listenerThreadState = (ListenerThreadState)state; IPEndPoint endPoint = listenerThreadState.EndPoint; //string key = "dnnnnnnnnnnnnnn1dnnnnnnnnnnnnnn1";//klucz ustalony przez DH jako string lub byte [] try { while (isListening) { Thread.Sleep(10); if (udpListener.Available > 0) { byte[] b = this.udpListener.Receive(ref endPoint); var decrypted = new cscprotocol.CscAes(callingService.DHKey).DecryptBytes(b, 800); byte[] decoded = listenerThreadState.Codec.Decode(decrypted, 0, decrypted.Length);//!! odbieranie dzwieku //Trace.WriteLine("Received: "+Encoding.ASCII.GetString(decrypted)); waveProvider.AddSamples(decoded, 0, decoded.Length); } } isListening = false; udpListener.Close(); } catch (Exception) { isListening = false; HideIncomingCallWindow(); //Disconnected } }
private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { waveIn = new WaveIn(); waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += waveIn_DataAvailable; waveIn.StartRecording(); udpSender = new UdpClient(); udpListener = new UdpClient(); // To allow us to talk to ourselves for test purposes: // http://stackoverflow.com/questions/687868/sending-and-receiving-udp-packets-between-two-programs-on-the-same-computer udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(endPoint); udpSender.Connect(endPoint); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); connected = true; var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
private void ListenerThread(object state) { ListenerThreadState listenerThreadState = (ListenerThreadState)state; IPEndPoint endPoint = listenerThreadState.EndPoint; try { while (isListening) { Thread.Sleep(10); if (udpListener.Available > 0) { byte[] b = this.udpListener.Receive(ref endPoint); byte[] decoded = listenerThreadState.Codec.Decode(b, 0, b.Length); waveProvider.AddSamples(decoded, 0, decoded.Length); } } isListening = false; udpListener.Close(); } catch (Exception) { isListening = false; HideIncomingCallWindow(); //Disconnected } }
private void StartListening(IPEndPoint localEndPoint) { udpListener = new UdpClient(); udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(localEndPoint); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); ListenerThreadState state = new ListenerThreadState() { Codec = codec, EndPoint = localEndPoint }; isListening = true; if (callingService.EncryptedCallSender || callingService.EncryptedCallReceiver) { ThreadPool.QueueUserWorkItem(this.ListenerThreadEncrypted, state); } else { ThreadPool.QueueUserWorkItem(this.ListenerThread, state); } }
private ReturnCode Stop() { ReturnCode result = DDS.ReturnCode.Ok; V_RESULT uResult; switch (State) { case ListenerThreadState.RUNNING: uResult = User.Listener.Trigger(rlReq_UserPeer); result = uResultToReturnCode(uResult); if (result == DDS.ReturnCode.Ok) { State = ListenerThreadState.STOPPING; } break; case ListenerThreadState.STARTING: State = ListenerThreadState.STOPPING; break; default: break; } while (result == DDS.ReturnCode.Ok && State == ListenerThreadState.STOPPING) { Monitor.Wait(this); } if (ListenerThread != null && State == ListenerThreadState.STOPPED) { ListenerThread.Join(); ListenerThread = null; } if (result != DDS.ReturnCode.Ok) { ReportStack.Report(result, "Could not stop listener dispatcher."); } Monitor.PulseAll(this); return(result); }
static void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { udpListener = new UdpClient(); // if running both from the same computer: (otherwise comment these next two out) udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(endPoint); waveOut = new DirectSoundOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
private ReturnCode Start() { ReturnCode result = DDS.ReturnCode.Ok; switch (State) { case ListenerThreadState.STOPPED: if (StackSize == 0) { ListenerThread = new Thread(this.Run); } else { ListenerThread = new Thread(this.Run, StackSize); } ListenerThread.Priority = SchedulingPriority(SchedulingPolicy); State = ListenerThreadState.STARTING; ListenerThread.Start(); break; case ListenerThreadState.STOPPING: State = ListenerThreadState.RUNNING; break; default: break; } while (result == DDS.ReturnCode.Ok && State == ListenerThreadState.STOPPING) { Monitor.Wait(this); } if (result != DDS.ReturnCode.Ok) { ReportStack.Report(result, "Could not start listener dispatcher."); } Monitor.PulseAll(this); return(result); }
private void ListenerThread(object state) { ListenerThreadState listenerThreadState = (ListenerThreadState)state; IPEndPoint endPoint = listenerThreadState.EndPoint; try { while (connected) { byte[] b = this.udpListener.Receive(ref endPoint); byte[] decoded = listenerThreadState.Codec.Decode(b, 0, b.Length); waveProvider.AddSamples(decoded, 0, decoded.Length); } } catch (SocketException) { // usually not a problem - just means we have disconnected } }
internal void Run() { ReturnCode result = DDS.ReturnCode.Ok; V_RESULT uResult; Monitor.Enter(this); try { if (State == ListenerThreadState.STARTING) { State = ListenerThreadState.RUNNING; Monitor.PulseAll(this); while (result == DDS.ReturnCode.Ok && State == ListenerThreadState.RUNNING) { Monitor.Exit(this); uResult = User.Listener.Wait( rlReq_UserPeer, EventHandler, IntPtr.Zero, Duration.Infinite.OsDuration); /* Result can't be timeout due to Duration being * infinite. */ result = uResultToReturnCode(uResult); if (result == DDS.ReturnCode.Ok) { ProcessEvents(); } Monitor.Enter(this); } } } finally { State = ListenerThreadState.STOPPED; Monitor.PulseAll(this); Monitor.Exit(this); } }
private void ListenerAudioThread(object state) { ListenerThreadState listenerThreadState = (ListenerThreadState)state; IPEndPoint endPoint = listenerThreadState.EndPoint; try { while (connected) { buffer = udpAudioListener.Receive(ref endPoint); decoded = listenerThreadState.Codec.Decode(buffer, 0, buffer.Length); waveProvider.AddSamples(decoded, 0, decoded.Length); //Console.WriteLine("audio receive size {0}", decoded.Length); } } catch (SocketException ex) { Console.WriteLine("Disconnect audio from server"); udpAudioListener.Close(); } }
/** * * Client's * **/ public void ConnectServer(string ip, int port) { //codec = new Gsm610ChatCodec(); // echo codec = new G722ChatCodec(); // echo //codec = new AcmALawChatCodec(); // bad //codec = new ALawChatCodec(); // bad - G711 //codec = new AcmMuLawChatCodec(); // bad //codec = new MicrosoftAdpcmChatCodec(); // mute //codec = new MuLawChatCodec(); // bad //codec = new TrueSpeechChatCodec(); // error //codec = new UncompressedPcmChatCodec(); // echo try { // Webcam Receive TcpWebcamClient = new TcpClient(); TcpWebcamClient.Connect(ip, port + 1); Console.WriteLine("Connect TCP for Webcam at {0}:{1}", ip, port + 1); // Audio Receive IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port); udpAudioListener = new UdpClient(); udpAudioListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpAudioListener.Client.Bind(endPoint); Console.WriteLine("Connect UDP for Audio at {0}:{1}", endPoint.Address, endPoint.Port); connected = true; // listening & play webcam ThreadPool.QueueUserWorkItem(this.ListenerWebcamThread); // listening & play audio waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); ListenerThreadState threadState = new ListenerThreadState() { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(this.ListenerAudioThread, threadState); } catch (Exception ex) { Console.WriteLine("Cannot connect to server. Server closed!"); btn_close.Enabled = false; btn_connect.Enabled = true; return; } Thread mainThread = new Thread(() => { string state = string.Empty; string msg = string.Empty; //Biến lưu chủ đề trả từ server về string received = string.Empty; //Biến lưu kết quả đúng sai try { // connect client = new TcpClient(); client.Connect(IPAddress.Parse(ip), port); this.Invoke(new Action(() => { txt_status.Text = string.Format("Connected to {0}:{1}", ip, port); })); isDisconnect = false; // read, write to server using stream, over use bytes[] Stream streamer = client.GetStream(); reader = new StreamReader(streamer); writer = new StreamWriter(streamer); writer.AutoFlush = true; // get user ID, state game writer.WriteLine("init"); id = reader.ReadLine(); state = reader.ReadLine(); Console.WriteLine("My received id: {0}, game play? {1}", id, state); this.Invoke(new Action(() => { txt_Id.Text = id; lbCountDown.Location = new Point(542, 393); })); string text = String.Format("Bạn là User_{0}", id); MessageBox.Show(text, "Thông Báo!"); // get current question if (state.Contains("True")) { Console.WriteLine("Join. Game was play"); writer.WriteLine("question"); string numberQuestion = reader.ReadLine(); this.Invoke(new Action(() => { groupBox_webcam.Text = string.Format("Streaner - Câu hỏi: số {0}", int.Parse(numberQuestion)); })); received = reader.ReadLine(); parseQuestion(received); this.Invoke(new Action(() => { // markup UI answer_A.Enabled = true; answer_B.Enabled = true; answer_C.Enabled = true; answer_A.BackColor = Color.Honeydew; answer_B.BackColor = Color.Honeydew; answer_C.BackColor = Color.Honeydew; txt_question.Location = new Point(31, 334); answer_A.Location = new Point(165, 384); answer_B.Location = new Point(165, 420); answer_C.Location = new Point(165, 456); })); } while (true) { // check disConnect button was clicked if (isDisconnect) { break; } // listening msg from Server msg = reader.ReadLine(); switch (msg) { case "img": Console.WriteLine("get img"); break; case "play": MessageBox.Show("Game play . . ."); break; case "new question": // id string numberQuestion = reader.ReadLine(); this.Invoke(new Action(() => { groupBox_webcam.Text = string.Format("Streamer - Câu hỏi: số {0}", Convert.ToInt32(numberQuestion) + 1); })); //question received = reader.ReadLine(); parseQuestion(received); this.Invoke(new Action(() => { // Markup UI answer_A.Enabled = true; answer_B.Enabled = true; answer_C.Enabled = true; answer_A.BackColor = Color.Honeydew; answer_B.BackColor = Color.Honeydew; answer_C.BackColor = Color.Honeydew; txt_question.Location = new Point(31, 334); answer_A.Location = new Point(165, 384); answer_B.Location = new Point(165, 420); answer_C.Location = new Point(165, 456); })); break; case "correct": received = reader.ReadLine(); Console.WriteLine(received); score++; break; case "incorrect": received = reader.ReadLine(); Console.WriteLine(received); break; case "show answer": if (received == "A") { answer_A.BackColor = Color.Green; if (answer == "A") { this.Invoke(new Action(() => { txt_score.Text = score.ToString(); })); } } else if (received == "B") { answer_B.BackColor = Color.Green; if (answer == "B") { this.Invoke(new Action(() => { txt_score.Text = score.ToString(); })); } } else if (received == "C") { answer_C.BackColor = Color.Green; if (answer == "C") { this.Invoke(new Action(() => { txt_score.Text = score.ToString(); })); } } else { Console.WriteLine("Dont A, B, C"); } answer = ""; break; case "show winner": received = reader.ReadLine(); string cost = reader.ReadLine(); Console.WriteLine(received); string s = received + "\n" + cost; MessageBox.Show(s); score = 0; break; default: break; } } streamer.Close(); } catch (Exception ex) { Console.WriteLine("Disconnected from server"); this.Invoke(new Action(() => { btn_close.Enabled = false; btn_connect.Enabled = true; txt_question.Location = new Point(-31, -334); answer_A.Location = new Point(-165, -384); answer_B.Location = new Point(-165, -420); answer_C.Location = new Point(-165, -456); lbCountDown.Location = new Point(-542, -393); pictureBoxStreamer.Image = Image.FromFile("404.jpg"); })); client.Close(); } }); mainThread.Start(); }