Dictionary <string, Action <string> > MakeWebsocketActions()
    {
        var WebsocketActions = new Dictionary <string, Action <string> >();

        WebsocketActions.Add("text", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <WsChatMessage>(reply);
            Chat.MessageReceived(replyMsg.Name, replyMsg.Payload);
        });
        WebsocketActions.Add("newUser", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <WsUserMessage>(reply);
            ClientList.AddClient(replyMsg.Payload.ID, replyMsg.Payload.Name);
        });
        WebsocketActions.Add("deleteuser", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <WsUserMessage>(reply);
            ClientList.DeleteClient(replyMsg.Payload.ID);
        });
        WebsocketActions.Add("ownCards", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <WsCardsForm>(reply);
            PlayerSeatSlot.ShowCards(replyMsg.Payload);
        });
        WebsocketActions.Add("activePlayer", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <ActivePlayerForm>(reply);
            ActivePlayerBorder(replyMsg.ID);
            //TODO: consider changing to id
            if (replyMsg.Name == ClientInfo.Name)
            {
                BettingStage.ActiveBet(replyMsg.MinBet);
            }
        });
        WebsocketActions.Add("tableCards", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <TableCardsForm>(reply);
            TableCards.SetTableCards(replyMsg.Payload);
        });
        WebsocketActions.Add("startRound", (reply) => {
            Pot.ClearPot();
            TableCards.ClearTable();
            CurrentSeatStructure.ClearClientsCards();
            CurrentSeatStructure.DefaultActiveBorder();
            var replyMsg = JsonConvert.DeserializeObject <StartRoundForm>(reply);
            CurrentSeatStructure.FillSeatsWithPlayers(replyMsg.Players);
            PlayerSeatSlot.SetStack(replyMsg.Players[CurrentSeatStructure.GetClientIndex(replyMsg.Players)].Stack);
            //TODO: button player mark
        });
        WebsocketActions.Add("endRound", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <EndRoundMessageForm>(reply);
            WinnerNotifier.ShowWinnerMessage(replyMsg.Winners);
            foreach (var winner in replyMsg.Winners)
            {
                if (winner.Winner.ID == ClientInfo.ID)
                {
                    PlayerSeatSlot.ChangeStack(winner.Ammount);
                }
                else
                {
                    CurrentSeatStructure.SetClientBet(winner.Winner.ID, winner.Ammount);
                    CurrentSeatStructure.ShowClientCards(winner.Winner.ID, winner.Cards);
                }
            }
        });
        WebsocketActions.Add("bet", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <BetForm>(reply);
            if (replyMsg.ID == ClientInfo.ID)
            {
                PlayerBetField.SetBetSize(replyMsg.Ammount);
                PlayerSeatSlot.ChangeStack(-replyMsg.Ammount);
                return;
            }
            CurrentSeatStructure.SetClientBet(replyMsg.ID, replyMsg.Ammount);
        });
        WebsocketActions.Add("endBetStage", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <EndBetStageForm>(reply);
            PlayerBetField.ClearBet();
            CurrentSeatStructure.ClearAllBets();
            Pot.AddToPot(replyMsg.Pot);
        });
        WebsocketActions.Add("fold", (reply) => {
            var replyMsg = JsonConvert.DeserializeObject <PlayerInfo>(reply);
            ActivePlayerBorder(replyMsg.ID);
            if (replyMsg.ID == ClientInfo.ID)
            {
                //TODO: hiding cards instead of deleting them, show them on hover
                PlayerSeatSlot.ClearCards();
            }
            else
            {
                CurrentSeatStructure.SetClientFoldCue(replyMsg.ID);
            }
        });
        return(WebsocketActions);
    }