예제 #1
0
        private async void StartReceives()
        {
            while (true)
            {
                byte[] b = new byte[4096];
                await _ws.ReceiveAsync(new ArraySegment <byte>(b), CancellationToken.None);

                string t      = enc.GetString(b).TrimEnd('\0');
                var    packet = JsonConvert.DeserializeObject <MessageObject>(t);

                if (packet.EventType == "MESSAGE")
                {
                    TextMessageObject message = ConvertToType <TextMessageObject>(packet.Value as JObject);
                    Console.WriteLine($"<{message.ClientId}> {message.Content}");
                }
                else if (packet.EventType == "CONNECT")
                {
                    ConnectObject message = ConvertToType <ConnectObject>(packet.Value as JObject);
                    Console.WriteLine(message.Content);
                    clientId = message.Id;
                }
                else if (packet.EventType == "VOICE_ACCEPT")
                {
                    var message = ConvertToType <VoiceConnectionObject>(packet.Value as JObject);
                    _voiceId = message.Id;
                    Console.WriteLine(_voiceId);

                    _udp.Connect(udpEndpoint);
                    _audioIn.StartRecording();
                    _audioOut.Play();

                    _ = Task.Factory.StartNew(async() =>
                    {
                        while (true)
                        {
                            if (tokenSource.IsCancellationRequested)
                            {
                                break;
                            }

                            var bb = await _udp.ReceiveAsync();

                            HandleBytes(bb.Buffer);
                        }
                    }, tokenSource.Token);
                }
            }
        }
예제 #2
0
        private static void ConnectCallback(IAsyncResult ar)
        {
            try {
                // Retrieve the socket from the state object.
                ConnectObject connectObject = (ConnectObject)ar.AsyncState;

                // Complete the connection.
                connectObject.client.EndConnect(ar);
                connectObject.connectObv.OnNext(new ConnectedSocket(connectObject.client));
                connectObject.connectObv.OnCompleted();
                Package.Log("Socket connected to {0}" +
                            connectObject.client.RemoteEndPoint.ToString());
            } catch (Exception e) {
                Console.Write(e.ToString());
            }
        }