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; } } }
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); } }
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); } }
public static void UserConnected(object sender, EndPoint e) { OnUserConnected?.Invoke(null, e); if (!UsersInfo.ContainsKey(e)) { UsersInfo.Add(e, new UserInformation() { Security = ConnectionSecurity.NonSecure }); } }
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; } }
public void Handle(UserConnected message) => OnUserConnected?.Invoke(User.FromDTO(message.User));