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); } } }
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()); } }