Beispiel #1
0
        //---methods

        public ScsService(int tcpPort, int scsClientMaxCount = 8192)
        {
            _scsClientMaxCount = scsClientMaxCount;

            // Список по сути особен ну нужен, но используется
            // чтобы отделять клиентов, котоыре еще не прошли регистраци от тех кто уже прошел,
            // чтобы не пропускать не нужные событи вверх к основному приложению.
            _authenticatedUsers = new Dictionary <IScsServerClient, User>();

            //Синхронная очередь клиентских msg для тех кто еще не прошел аутентификацию
            _msgReadersForAutentification = new MsgReadersCollection();
            _msgReadersForAutentification.RegisterMsgReader <AuthenticationMessage>(AuthenticationMsgReader);
            _msgQueueForAutentification = new ConcurrentMsgQueue(_msgReadersForAutentification, _authenticatedUsers);
            _msgQueueForAutentification.ClientEventReaded += MsgQueue_ClientEventReaded;

            //Синхронная очередь клиентских msg
            _msgReaders = new MsgReadersCollection();
            _msgQueue   = new ConcurrentMsgQueue(_msgReaders, _authenticatedUsers);
            _msgQueue.ClientEventReaded += MsgQueue_ClientEventReaded;

            // Проходящите подключение клиенты
            _authenticationStates = new Dictionary <IScsServerClient, UserAuthenticationState>();

            // Scs server(tcp слой)
            _server = ScsServerFactory.CreateServer(new ScsTcpEndPoint(tcpPort));
            _server.ClientConnected    += Server_ClientConnected;
            _server.ClientDisconnected += Server_ClientDisconnected;
        }
Beispiel #2
0
        //---methods

        public ScsClient(string login, string ip, int tcpPort)
        {
            _login = login;

            //Синхронная очередь клиентских событий
            _eventQueue = new ConcurrentEventQueue();

            _msgReaders = new MsgReadersCollection();
            _msgReaders.RegisterMsgReader <AuthenticationSuccesMessage>(AuthenticationSuccessMsgReader);

            //Синхронная очередь msg с сервера
            _msgQueue = new ConcurrentMsgQueue(_msgReaders);

            _client               = ScsClientFactory.CreateClient(new ScsTcpEndPoint(ip, tcpPort));
            _client.Connected    += Client_Connected;
            _client.Disconnected += Client_Disconnected;

            _msgQueue.AddMessenger(_client);
        }