Ejemplo n.º 1
0
        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);
            });
        }