예제 #1
0
        private void OnJoinVoiceMessage(JoinVoiceMessage msg)
        {
            MainForm main = new MainForm();

            main.Connect(msg.Target.Hostname, msg.Target.Port);
            main.Show();
        }
예제 #2
0
        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);
        }
예제 #3
0
        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) {
            }
        }