コード例 #1
0
        public void Test_Success()
        {
            //Arrange
            var fromUser = new User("from", "fromEmail");
            var toUser = new User("to", "toEmail");

            SaveEntities(fromUser, toUser);

            CommitTransactionAndOpenNew();

            var expectedConnection = new Connection(fromUser, toUser);
            var expectedResponse = new BaseResponse();
            var request = new ConnectRequest() {FromUserId = fromUser.Id, ToUserId = toUser.Id};

            //Act

            var sut = new ConnectRequestHandler(() => Session);
            BaseResponse actualResponse = sut.HandleRequest(request);

            //Assert

            actualResponse.ShouldEqual(expectedResponse);

            //Check that the connection was saved in the DB
            CommitTransactionAndOpenNew();

            Connection actualConnection = Session
                .QueryOver<Connection>()
                .SingleOrDefault()
                ;

            actualConnection.ShouldEqual(expectedConnection);
        }
コード例 #2
0
        public void Test_AlreadyConnected()
        {
            //Arrange
            var fromUser           = DefaultTestData.ServiceStackUser1;
            var toUser             = DefaultTestData.ServiceStackUser2;
            var existingConnection = new Connection(fromUser, toUser);

            SaveEntities(fromUser, toUser, existingConnection);

            CommitTransactionAndOpenNew();

            var expectedResponse = new BaseResponse(ConnectRequestHandler.AlreadyConnected);
            var request          = new ConnectRequest()
            {
                FromUserId = fromUser.Id, ToUserId = toUser.Id
            };

            //Act

            var          sut            = new ConnectRequestHandler(() => Session);
            BaseResponse actualResponse = sut.HandleRequest(request);

            //Assert

            actualResponse.ShouldEqual(expectedResponse);

            //Check that the connection wasn't saved in the DB
            int numberOfConnections = Session
                                      .QueryOver <Connection>()
                                      .RowCount()
            ;

            Assert.That(numberOfConnections, Is.EqualTo(1));
        }
コード例 #3
0
        public void Test_AlreadyConnected()
        {
            //Arrange
            var fromUser = new User("from", "fromEmail");
            var toUser = new User("to", "toEmail");
            var existingConnection = new Connection(fromUser, toUser);

            SaveEntities(fromUser, toUser, existingConnection);

            CommitTransactionAndOpenNew();

            var expectedResponse = new BaseResponse(ConnectRequestHandler.AlreadyConnected);
            var request = new ConnectRequest() { FromUserId = fromUser.Id, ToUserId = toUser.Id };

            //Act

            var sut = new ConnectRequestHandler(() => Session);
            BaseResponse actualResponse = sut.HandleRequest(request);

            //Assert

            actualResponse.ShouldEqual(expectedResponse);

            //Check that the connection wasn't saved in the DB
            int numberOfConnections = Session
                .QueryOver<Connection>()
                .RowCount()
                ;

            Assert.That(numberOfConnections, Is.EqualTo(1));
        }
コード例 #4
0
 internal void RemoveConnectRequestHandler(Reference rf, ConnectRequestHandler handler)
 {
     if (rf.IsConnectionCached)
     {
         lock (_handlers)
         {
             if (_handlers.TryGetValue(rf, out ConnectRequestHandler? h) && h == handler)
             {
                 _handlers.Remove(rf);
             }
         }
     }
 }
コード例 #5
0
        public void Test_SuccessWithExistingOtherConnection()
        {
            //Arrange
            var fromUser           = DefaultTestData.ServiceStackUser1;
            var toUser             = DefaultTestData.ServiceStackUser2;
            var otherUser          = DefaultTestData.ServiceStackUser3;
            var existingConnection = new Connection(otherUser, toUser);

            SaveEntities(fromUser, toUser, otherUser, existingConnection);

            CommitTransactionAndOpenNew();

            var expectedConnection = new Connection(fromUser, toUser);
            var request            = new ConnectRequest()
            {
                FromUserId = fromUser.Id, ToUserId = toUser.Id
            };
            var expectedResponse = new BaseResponse();

            //Act

            var          sut            = new ConnectRequestHandler(() => Session);
            BaseResponse actualResponse = sut.HandleRequest(request);

            //Assert

            actualResponse.ShouldEqual(expectedResponse);

            //Check that the connection was saved in the DB
            CommitTransactionAndOpenNew();

            Connection connectionAlias = null;
            User       user1Alias      = null;
            User       user2Alias      = null;

            Connection actualConnection = Session
                                          .QueryOver <Connection>(() => connectionAlias)
                                          .JoinAlias(() => connectionAlias.User1, () => user1Alias)
                                          .JoinAlias(() => connectionAlias.User2, () => user2Alias)
                                          .Where(() => (user1Alias.Id == request.FromUserId && user2Alias.Id == request.ToUserId) ||
                                                 (user1Alias.Id == request.ToUserId && user2Alias.Id == request.FromUserId))
                                          .SingleOrDefault()
            ;

            actualConnection.ShouldEqual(expectedConnection);
        }
コード例 #6
0
        // All the reference here are routable references.

        internal IRequestHandler GetRequestHandler(Reference rf)
        {
            if (rf.IsCollocationOptimized)
            {
                ObjectAdapter?adapter = FindObjectAdapter(rf);
                if (adapter != null)
                {
                    return(rf.SetRequestHandler(new CollocatedRequestHandler(rf, adapter)));
                }
            }

            bool connect = false;
            ConnectRequestHandler?handler;

            if (rf.IsConnectionCached)
            {
                lock (_handlers)
                {
                    if (!_handlers.TryGetValue(rf, out handler))
                    {
                        handler = new ConnectRequestHandler(rf);
                        _handlers.Add(rf, handler);
                        connect = true;
                    }
                }
            }
            else
            {
                handler = new ConnectRequestHandler(rf);
                connect = true;
            }

            if (connect)
            {
                rf.GetConnection(handler);
            }
            return(rf.SetRequestHandler(handler.Connect(rf)));
        }
コード例 #7
0
        internal IRequestHandler GetRequestHandler(RoutableReference rf, IObjectPrx proxy)
        {
            if (rf.GetCollocationOptimized())
            {
                ObjectAdapter?adapter = FindObjectAdapter(proxy);
                if (adapter != null)
                {
                    return(proxy.IceSetRequestHandler(new CollocatedRequestHandler(rf, adapter)));
                }
            }

            bool connect = false;
            ConnectRequestHandler handler;

            if (rf.GetCacheConnection())
            {
                lock (_handlers)
                {
                    if (!_handlers.TryGetValue(rf, out handler))
                    {
                        handler = new ConnectRequestHandler(rf, proxy);
                        _handlers.Add(rf, handler);
                        connect = true;
                    }
                }
            }
            else
            {
                handler = new ConnectRequestHandler(rf, proxy);
                connect = true;
            }

            if (connect)
            {
                rf.GetConnection(handler);
            }
            return(proxy.IceSetRequestHandler(handler.Connect(proxy)));
        }
コード例 #8
0
        public void Test_Success()
        {
            //Arrange
            var fromUser = DefaultTestData.ServiceStackUser1;;
            var toUser   = DefaultTestData.ServiceStackUser2;

            SaveEntities(fromUser, toUser);

            CommitTransactionAndOpenNew();

            var expectedConnection = new Connection(fromUser, toUser);
            var expectedResponse   = new BaseResponse();
            var request            = new ConnectRequest()
            {
                FromUserId = fromUser.Id, ToUserId = toUser.Id
            };

            //Act

            var          sut            = new ConnectRequestHandler(() => Session);
            BaseResponse actualResponse = sut.HandleRequest(request);

            //Assert

            actualResponse.ShouldEqual(expectedResponse);

            //Check that the connection was saved in the DB
            CommitTransactionAndOpenNew();

            Connection actualConnection = Session
                                          .QueryOver <Connection>()
                                          .SingleOrDefault()
            ;

            actualConnection.ShouldEqual(expectedConnection);
        }
コード例 #9
0
        private async void HandleRequest(NodeRequest request, NodeConnection current)
        {
            try
            {
                ICommunicationHandler requestHandler = null;
                switch (request.RequestType)
                {
                case NodeRequestType.CheckToken:
                {
                    requestHandler = new CheckTokenRequestHandler(request, current, appServiceProvider.TokensService, appServiceProvider.LoadUsersService);
                }
                break;

                case NodeRequestType.Connect:
                {
                    requestHandler = new ConnectRequestHandler(
                        request,
                        current,
                        appServiceProvider.ConnectionsService,
                        appServiceProvider.NodesService,
                        appServiceProvider.NodeNoticeService);
                }
                break;

                case NodeRequestType.GetInfoBlocks:
                {
                    requestHandler = new GetInfoBlocksRequestHandler(request, current);
                }
                break;

                case NodeRequestType.GetMessages:
                {
                    requestHandler = new GetMessagesRequestHandler(request, current, appServiceProvider.LoadMessagesService, appServiceProvider.ConversationsService);
                }
                break;

                case NodeRequestType.Proxy:
                {
                    requestHandler = new ProxyUsersCommunicationsNodeRequestHandler(request, current, appServiceProvider);
                }
                break;

                case NodeRequestType.GetUsers:
                case NodeRequestType.GetChats:
                case NodeRequestType.GetChannels:
                case NodeRequestType.GetFiles:
                {
                    requestHandler = new GetObjectsInfoNodeRequestHandler(request, current,
                                                                          appServiceProvider.LoadChatsService,
                                                                          appServiceProvider.LoadUsersService,
                                                                          appServiceProvider.LoadChannelsService,
                                                                          appServiceProvider.PrivacyService,
                                                                          appServiceProvider.FilesService);
                }
                break;

                case NodeRequestType.Search:
                {
                    requestHandler = new SearchNodeRequestHandler(request,
                                                                  current,
                                                                  appServiceProvider.LoadChatsService,
                                                                  appServiceProvider.LoadUsersService,
                                                                  appServiceProvider.LoadChannelsService,
                                                                  appServiceProvider.PrivacyService);
                }
                break;

                case NodeRequestType.GetFullChatInformation:
                {
                    requestHandler = new GetFullChatInformationNodeRequestHandler(request, current, appServiceProvider.LoadChatsService);
                }
                break;

                case NodeRequestType.GetChatUsersInformation:
                {
                    requestHandler = new GetChatUsersInformationNodeRequestHandler(request, current, appServiceProvider.LoadChatsService);
                }
                break;

                case NodeRequestType.GetPublicKey:
                {
                    requestHandler = new GetPublicKeyNodeRequestHandler(request, current, appServiceProvider.KeysService);
                }
                break;

                case NodeRequestType.GetPolls:
                {
                    requestHandler = new GetPollInformationNodeRequestHandler(request, current, appServiceProvider.PollsService);
                }
                break;

                case NodeRequestType.BatchPhonesSearch:
                {
                    requestHandler = new BatchPhonesSearchNodeRequestHandler(request, current, appServiceProvider.LoadUsersService, appServiceProvider.PrivacyService);
                }
                break;

                case NodeRequestType.GetConversationsUsers:
                {
                    requestHandler = new GetConversationsUsersNodeRequestHandler(request, current, appServiceProvider.LoadChannelsService, appServiceProvider.LoadChatsService);
                }
                break;
                }
                if (requestHandler.IsObjectValid())
                {
                    await requestHandler.HandleAsync().ConfigureAwait(false);
                }
                else
                {
                    ResultNodeResponse response = new ResultNodeResponse(request.RequestId, ErrorCode.InvalidRequestData);
                    SendResponse(response, current);
                }
            }
            catch (Exception ex)
            {
                Logger.WriteLog(ex);
            }
        }
コード例 #10
0
        public void Test_SuccessWithExistingOtherConnection()
        {
            //Arrange
            var fromUser = new User("from", "fromEmail");
            var toUser = new User("to", "toEmail");
            var otherUser = new User("other", "otherEmail");
            var existingConnection = new Connection(otherUser, toUser);

            SaveEntities(fromUser, toUser, otherUser, existingConnection);

            CommitTransactionAndOpenNew();

            var expectedConnection = new Connection(fromUser, toUser);
            var request = new ConnectRequest() { FromUserId = fromUser.Id, ToUserId = toUser.Id };
            var expectedResponse = new BaseResponse();

            //Act

            var sut = new ConnectRequestHandler(() => Session);
            BaseResponse actualResponse = sut.HandleRequest(request);

            //Assert

            actualResponse.ShouldEqual(expectedResponse);

            //Check that the connection was saved in the DB
            CommitTransactionAndOpenNew();

            Connection connectionAlias = null;
            User user1Alias = null;
            User user2Alias = null;

            Connection actualConnection = Session
                .QueryOver<Connection>(() => connectionAlias)
                .JoinAlias(() => connectionAlias.User1, () => user1Alias)
                .JoinAlias(() => connectionAlias.User2, () => user2Alias)
                .Where(() => (user1Alias.Id == request.FromUserId && user2Alias.Id == request.ToUserId) ||
                             (user1Alias.Id == request.ToUserId && user2Alias.Id == request.FromUserId))
                .SingleOrDefault()
                ;

            actualConnection.ShouldEqual(expectedConnection);
        }