/// <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
            }
        }
Пример #3
0
        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);
        }
Пример #7
0
        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);
        }
Пример #9
0
        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);
            }
        }
Пример #11
0
        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();
            }
        }
Пример #12
0
        /**
         *
         * 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();
        }