private void UnregisteredConnection_OnRegister(UnregisteredConnection sender, Registration message) { var domain = GetOrAddDomain(message.Domain); UnregisteredConnection connection; UnregisteredConnections.TryRemove(sender.Id, out connection); connection.OnRegister -= UnregisteredConnection_OnRegister; domain.HandleRegistration(connection, message); }
private void HandleNewConnection(TcpClient tcpClient) { Task.Run(() => { var connection = new UnregisteredConnection(tcpClient); Logger.Info($"{connection} connected."); connection.OnRegister += UnregisteredConnection_OnRegister; UnregisteredConnections.GetOrAdd(connection.Id, connection); connection.WaitForRegistration(); }); }
public async Task <bool> HandleRegistrationAsync(UnregisteredConnection unregisteredConnection, Registration message) { Logger.Info($"Handling the registration of connection {unregisteredConnection}"); RegisteredClient registeredClient; if (Clients.ContainsKey(message.UserId)) { if (Clients.TryGetValue(message.UserId, out registeredClient)) { Logger.Debug($"Client identified. {registeredClient}"); } else { Logger.Warn("Error in retrieving client."); return(false); } } else { registeredClient = new RegisteredClient { UserId = message.UserId, Domain = Name, Name = message.Name, Avatar = Clients.Count + 1 }; registeredClient.OnConnected += RegisteredClient_OnConnected; registeredClient.OnDisconnected += RegisteredClient_OnDisconnected; registeredClient.OnGetPeerList += RegisteredClient_OnGetPeerList; registeredClient.OnRelayMessage += RegisteredClient_OnRelayMessage; if (Clients.TryAdd(registeredClient.UserId, registeredClient)) { Logger.Info($"Registered new client. {registeredClient}"); } else { Logger.Warn("Could not register new client."); return(false); } } await registeredClient.SetActiveConnectionAsync(unregisteredConnection, message); return(true); }
public bool HandleRegistration(UnregisteredConnection unregisteredConnection, Registration message) { Logger.Info($"Handling the registration of connection {unregisteredConnection}"); RegisteredClient registeredClient; if (Clients.ContainsKey(message.UserId)) { if (Clients.TryGetValue(message.UserId, out registeredClient)) { Logger.Debug($"Client identified. {registeredClient}"); } else { Logger.Warn("Error in retrieving client."); return false; } } else { registeredClient = new RegisteredClient { UserId = message.UserId, Domain = Name, Name = message.Name, Avatar = Clients.Count + 1 }; registeredClient.OnConnected += RegisteredClient_OnConnected; registeredClient.OnDisconnected += RegisteredClient_OnDisconnected; registeredClient.OnGetPeerList += RegisteredClient_OnGetPeerList; registeredClient.OnRelayMessage += RegisteredClient_OnRelayMessage; if (Clients.TryAdd(registeredClient.UserId, registeredClient)) { Logger.Info($"Registered new client. {registeredClient}"); } else { Logger.Warn("Could not register new client."); return false; } } registeredClient.SetActiveConnection(unregisteredConnection, message); return true; }
public void SetActiveConnection(UnregisteredConnection connection, Registration message) { Logger.Debug("Handling new TCP connection."); ConnectionId = Guid.NewGuid(); ActiveConnection = connection.TcpClient; RegisterClientForPushNotifications(message.PushNotificationChannelURI); OnRegistrationConfirmation(new RegisteredReply { Avatar = Avatar, ReplyFor = message.Id }); ResetQueues(); StartReading(); StartWriting(); IsOnline = true; StartMessageQueueProcessing(); OnConnected?.Invoke(this); }