private void OnReceive(object obj) { NetIncomingMessage message; while ((message = _server.ReadMessage()) != null) { try { switch (message.MessageType) { case NetIncomingMessageType.ErrorMessage: case NetIncomingMessageType.WarningMessage: _logger.Write(new NetException(message.ReadString())); break; case NetIncomingMessageType.StatusChanged: var status = (NetConnectionStatus)message.ReadByte(); if (status != NetConnectionStatus.Connected) { break; } var hailMessage = message.SenderConnection.RemoteHailMessage; if (hailMessage == null) { continue; } var id = AsyncPeer.ReadUserId(hailMessage); var localPoint = hailMessage.ReadIPEndPoint(); var publicPoint = message.SenderEndPoint; lock (_syncObject) { _clientsEndPoints.Add(id, new ClientDescription(localPoint, publicPoint)); TryDoneAllRequest(); } break; } } catch (Exception e) { _logger.Write(e); } } }
public static void Init(ClientInitializer initializer) { var user = new User(initializer.Nick, initializer.NickColor); if (Interlocked.CompareExchange(ref model, new ClientModel(user), null) != null) throw new InvalidOperationException("model already inited"); Api = new ClientApi(); Client = new AsyncClient(initializer.Nick); Peer = new AsyncPeer(); Plugins = new ClientPluginManager(initializer.PluginsPath); Plugins.LoadPlugins(initializer.ExcludedPlugins); }
public static void Init(ClientInitializer initializer) { var user = new User(initializer.Nick, initializer.NickColor); if (Interlocked.CompareExchange(ref model, new ClientModel(user), null) != null) throw new InvalidOperationException("model already inited"); // API установится автоматически при подключении к серверу (согласно версии на сервере) Client = new AsyncClient(initializer.Nick); Peer = new AsyncPeer(); Plugins = new ClientPluginManager(initializer.PluginsPath); Plugins.LoadPlugins(initializer.ExcludedPlugins); }