Exemple #1
0
        public void HandleMessage(string messageFromServer)
        {
            var messages = messageFromServer.Split(new[] { "<<EOFS>>" }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var message in messages)
            {
                if (message.Length < 7)
                {
                    continue;
                }
                XDocument xDoc = null;
                try
                {
                    xDoc = XDocument.Parse(message);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }

                var rootName = xDoc?.Root?.Name.ToString();
                switch (rootName)
                {
                case "stroke":
                    OnStrokeRecieved?.Invoke(XmlConverter.GetStroke(xDoc));
                    break;

                case "message":
                    OnMessageRecieved?.Invoke(XmlConverter.GetMessage(xDoc));
                    break;

                case "new_user":
                    OnUserConnected?.Invoke(XmlConverter.GetUser(xDoc));
                    break;

                case "user_logout":
                    OnUserLogout?.Invoke(XmlConverter.GetUser(xDoc));
                    break;

                case "users_list":
                    OnUsersListReceived?.Invoke(XmlConverter.GetUsers(xDoc));
                    break;

                case "login_response":
                    var user = XmlConverter.GetAuthResult(xDoc);
                    if (string.IsNullOrEmpty(user))
                    {
                        OnLoginFailure?.Invoke();
                    }
                    else
                    {
                        OnLoginComplete?.Invoke(user);
                    }
                    break;

                default:
                    break;
                }
            }
        }
Exemple #2
0
        public async Task StartAsync(Uri hubUri)
        {
            _hubConnection = new HubConnectionBuilder()
                             .WithUrl(hubUri)
                             .Build();

            _hubConnection.On(LobbyMessage.UserEntered, (string userId) =>
            {
                OnUserEnter?.Invoke(userId);
            });

            _hubConnection.On(LobbyMessage.UserConnected, (string userId) =>
            {
                OnUserConnected?.Invoke(userId);
            });

            _hubConnection.On(LobbyMessage.UserAdmitted, (string userId) =>
            {
                OnUserAdmitted?.Invoke(userId);
            });

            _hubConnection.On(LobbyMessage.RefreshGroupsAhead, (string lobbyId) =>
            {
                OnGroupsAheadRefreshed?.Invoke(lobbyId);
            });

            await _hubConnection.StartAsync();
        }
        protected override void HandleMessage(DiscordWebSocketMessage <DiscordMediaOpcode> message)
        {
            if (message.Opcode == DiscordMediaOpcode.SSRCUpdate)
            {
                SSRCUpdate ssrc = message.Data.ToObject <SSRCUpdate>();

                if (!Viewers.Contains(ssrc.UserId))
                {
                    List <ulong> viewers = Viewers.ToList();
                    viewers.Add(ssrc.UserId);
                    Viewers = viewers;
                    OnUserConnected?.Invoke(this, ssrc.UserId);
                }
            }
            else if (message.Opcode == DiscordMediaOpcode.UserDisconnect)
            {
                ulong userId = message.Data.ToObject <JObject>().Value <ulong>("user_id");

                List <ulong> viewers = Viewers.ToList();
                if (viewers.Remove(userId))
                {
                    Viewers = viewers;
                }

                OnUserDisconnected?.Invoke(this, userId);
            }
        }
Exemple #4
0
        public void Connect(string id, Uri address)
        {
            var user = GetByID(id);

            user.Address = address;

            OnUserConnected?.Invoke(user);
        }
 /// <summary>
 /// Al conectarse un nuevo canal
 /// </summary>
 /// <param name="sender">Emisor</param>
 /// <param name="e">Canal</param>
 private void Manager_OnChannelConnected(object sender, IChannel e)
 {
     lock (m_users) {
         User user = new User(e);
         m_users.Add(user);
         OnUserConnected?.Invoke(this, user);
     }
 }
Exemple #6
0
        public static void UserConnected(object sender, EndPoint e)
        {
            OnUserConnected?.Invoke(null, e);

            if (!UsersInfo.ContainsKey(e))
            {
                UsersInfo.Add(e, new UserInformation()
                {
                    Security = ConnectionSecurity.NonSecure
                });
            }
        }
Exemple #7
0
        protected override void HandleMessage(DiscordWebSocketMessage <DiscordMediaOpcode> message)
        {
            switch (message.Opcode)
            {
            case DiscordMediaOpcode.Speaking:
                var state = message.Data.ToObject <DiscordSpeakingState>();

                if (state.UserId.HasValue)
                {
                    _ssrcToUserDictionary[state.SSRC] = state.UserId.Value;
                }
                else
                {
                    state.UserId = _ssrcToUserDictionary[state.SSRC];
                }

                break;

            case DiscordMediaOpcode.SSRCUpdate:     // this is fired whenever a user connects to the channel or updates their ssrc
                SSRCUpdate update = message.Data.ToObject <SSRCUpdate>();

                bool newUser = !_ssrcToUserDictionary.Values.Contains(update.UserId);

                _ssrcToUserDictionary[update.Audio] = update.UserId;

                if (newUser && OnUserConnected != null)
                {
                    Task.Run(() => OnUserConnected.Invoke(this, update.UserId));
                }
                break;

            case DiscordMediaOpcode.UserDisconnect:
                ulong userId = message.Data.ToObject <JObject>().Value <ulong>("user_id");

                if (_ssrcToUserDictionary.TryGetKey(userId, out uint ssrc))
                {
                    _ssrcToUserDictionary.Remove(ssrc);
                }

                if (_receivers.TryGetValue(userId, out IncomingVoiceStream receiver))
                {
                    receiver.Close();
                    _receivers.Remove(receiver.UserId);
                }

                if (OnUserDisconnected != null)
                {
                    Task.Run(() => OnUserDisconnected.Invoke(this, userId));
                }
                break;
            }
        }
Exemple #8
0
 public void Handle(UserConnected message) =>
 OnUserConnected?.Invoke(User.FromDTO(message.User));