private void OnMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            var message = JsonConvert.DeserializeObject <Message>(e.Message);

            switch (message.Header)
            {
            case "Join":
                var joinRes = JsonConvert.DeserializeObject <JoinRes>(message.Body);
                JoinEvent?.Invoke(this, new JoinEventArgs
                {
                    JoinRes = joinRes
                });
                break;

            case "Hand":
                var handRes = JsonConvert.DeserializeObject <HandRes>(message.Body);
                HandEvent?.Invoke(this, new HandEventArgs
                {
                    HandRes = handRes
                });
                break;

            case "Tsumo":
                var tsumoRes = JsonConvert.DeserializeObject <TsumoRes>(message.Body);
                TsumoEvent?.Invoke(this, new TsumoEventArgs
                {
                    TsumoRes = tsumoRes
                });
                break;

            case "Dahai":
                var dahaiRes = JsonConvert.DeserializeObject <DahaiRes>(message.Body);
                DahaiEvent?.Invoke(this, new DahaiEventArgs
                {
                    DahaiRes = dahaiRes
                });
                break;

            case "Agari":
                var agariRes = JsonConvert.DeserializeObject <AgariRes>(message.Body);
                AgariEvent?.Invoke(this, new AgariEventArgs
                {
                    AgariRes = agariRes
                });
                break;

            default:
                break;
            }
        }