void Start() { _dispatcher = GetComponent <ActionDispatcher>(); // Load database if (GameDbAsset == null) { Debug.LogError("Game DB asset is not set"); } else { _db = JSON.Parse(GameDbAsset.text); Debug.LogFormat("Loaded Game DB asset: Length: {0}", GameDbAsset.text.Length); } _channel.Start(Host, Port); _channel.Received += (ch, msg) => { // Dispatch message processing to Unity thread if (MessageReceived != null) { _dispatcher.Dispatch(() => MessageReceived.Invoke(msg)); } }; _channel.ErrorOccured += (ch, err) => { _dispatcher.Dispatch(() => OnChannelError(err)); }; MessageReceived += OnMessageReceive; Subscribe(Head.SrvHello, message => { Debug.LogFormat("Hello: {0}", message); }); Subscribe(Head.SrvGameStarted, message => { IsGameStarted = true; Side = message.Game.YourSide; Debug.LogFormat("Game begin, side: {0}", Side); }); Subscribe(Head.SrvQueueStarted, message => { IsInQueue = true; Debug.Log("Queue started"); }); Subscribe(Head.SrvQueueStopped, message => { IsInQueue = false; Debug.Log("Queue stopped"); }); Subscribe(Head.SrvQueueGameCreated, message => { IsInQueue = false; IsInGame = true; GameId = message.GameCreated.GameId; Debug.LogFormat("Game started, id: {0}", GameId); if (SceneManager.GetActiveScene().name != GameSceneName) { SceneManager.LoadScene(GameSceneName); } }); Subscribe(Head.SrvGameEffect, message => { Debug.LogFormat("Effect: {0}", message); }); Subscribe(Head.SrvGameEnded, message => { IsInGame = false; IsGameStarted = false; Debug.LogFormat("Game ended: {0}", message); }); }