Inheritance: IClientChannel, IServerChannel
        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();
     });
 }
 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();
     });
 }
Exemple #4
0
        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);
        }
Exemple #5
0
        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;
        }
Exemple #6
0
        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);
        }
 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);
 }
        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);
        }