//---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; }
//---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); }