private async void OnJoinVoiceMessage (MessageEventArgs<JoinVoiceMessage> e) { var person = await GetPersonAsync (e.Connection); if (person == null) { await e.Connection.DisconnectAsync(); return; } Group group; lock (SyncRoot) { if (!Groups.TryGetGroup (e.Message.GroupId, out group) || !group.Participants.Contains (person.Identity)) return; } IConnection connection; lock (SyncRoot) { connection = GetConnection (group.OwnerId); } if (connection == null) return; var join = new JoinVoiceMessage { GroupId = e.Message.GroupId, Target = e.Message.Target }; try { var response = await connection.SendFor<JoinVoiceResponseMessage> (join, responseTimeout: 30000); await e.Connection.SendResponseAsync (e.Message, response); } catch (OperationCanceledException) { } }
public async Task<Target> RequestGroupVoiceAsync (Group group) { if (group == null) throw new ArgumentNullException ("group"); var joinVoice = new JoinVoiceMessage { Target = ServerTarget, GroupId = group.Id }; var response = await Connection.SendFor<JoinVoiceResponseMessage> (joinVoice, 30000).ConfigureAwait (false); return response.Target; }