Esempio n. 1
0
        void serverCallWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                throw e.Error;
            }

            ServerCallParam param = (ServerCallParam)e.Result;

            if (param.callResult.Equals("ERROR"))
            {
                if (param.retryCount > 0)
                {
                    param.retryCount--;
                    print("Problem occur when changing state, retrying..." + param.retryCount);
                    showInstruction("重試與伺服器連接中:" + param.retryCount);
                    serverCallWorker.RunWorkerAsync(param);
                }
                else
                {
                    showInstruction("與伺服器失去聯絡,請立即通知管理員。");
                    //throw new Exception("State Change Failed after " + conf.server_retry + " tries!");
                }
            }
            else if (param.callback != null)
            {
                param.callback(param);
            }
        }
Esempio n. 2
0
        void handleLogin(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            if (isCallOK(param.callResult))
            {
                txtUser.Enabled     = false;
                txtPassword.Enabled = false;
                btnLogin.Enabled    = true;
                btnLogin.Text       = "登出";
                //"OK#DEALER_ID:1;SESSION_ID:0C524B4B-F170-4FD6-A500-AC70868DEFB9;"
                string[] pairs = splitPairs(param.callResult);
                iDealerID = int.Parse(splitValue(pairs[0])[1]);
                sessionID = splitValue(pairs[1])[1];
                print("SessionID:" + sessionID);
                //These line should be used in development environment only
                //in production the previous state must be PREPARE_NEXT even the previous game aborted.
                resetState();
            }
            else
            {
                MessageBox.Show("登入失敗,請重試。", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                switchLoginButton(true);
                switchCloseButton(true);
            }
        }
Esempio n. 3
0
        //for debug purpose
        void resetState()
        {
            ServerCallParam param = new ServerCallParam();

            param.url      = server_url + "resetGame.aspx?tableID=" + tableID;
            param.callback = hResetState;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 4
0
        void hReadB2Complete(object args)
        {
            ServerCallParam param = new ServerCallParam();

            param.url      = string.Format(urlFirst, server_url, sessionID, iDealerID, currentGameID, cardP1, cardP2, cardB1, cardB2, _iPTotal, _iBTotal);
            param.callback = hSetFirstCardsDone;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 5
0
        void checkState(AsyncCallDelegate callback = null)
        {
            ServerCallParam param = new ServerCallParam();

            param.url      = string.Format(urlCheckState, server_url, sessionID, iDealerID, tableID);
            param.callback = callback;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 6
0
        void hReadB3Complete(object args)
        {
            ServerCallParam param = new ServerCallParam();

            param.url      = string.Format(urlB3, server_url, sessionID, iDealerID, currentGameID, cardB3, _iBTotal);
            param.callback = hSetBanker3Done;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 7
0
        void loginDealer(string username, string password)
        {
            ServerCallParam param = new ServerCallParam();

            param.url      = string.Format(urlLogin, server_url, username, password);
            param.callback = handleLogin;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 8
0
        void state_change(string stateChange)
        {
            ServerCallParam param = new ServerCallParam();

            param.url         = string.Format(urlChangeState, server_url, sessionID, iDealerID, currentGameID, "sp_state_change:" + stateChange);
            param.stateChange = stateChange;
            param.callback    = hChangeState;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 9
0
        void newGame()
        {
            resetGameValues();
            string gameName = getNewGameName();

            ServerCallParam param = new ServerCallParam();

            param.url      = string.Format(urlNewGame, server_url, sessionID, iDealerID, tableID, gameName);
            param.callback = handleNewGame;
            serverCallWorker.RunWorkerAsync(param);
        }
Esempio n. 10
0
        void hResetState(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            if (isCallOK(param.callResult))
            {
                print("Checking state after login...");
                checkState(hCheckState_Login_Completed);
            }
            else
            {
                print("Reset state fai!");
            }
        }
Esempio n. 11
0
        void hSetFirstCardsDone(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            print(string.Format(strPrintFirsts, currentGameID, _iPCard1, _iPCard2, _iBCard1, _iBCard2, _iPTotal, _iBTotal, param.callResult));
            if (isCallOK(param.callResult))
            {
                state_change("DEAL_FIRST_>_DONE_FIRST");
            }
            else
            {
                throw new Exception("Set first cards failed. Server returned #FAIL");
            }
        }
Esempio n. 12
0
        void hSetPlayer3Done(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            print(string.Format(strPrintP3, currentGameID, _iPCard3, _iPTotal, param.callResult));
            if (isCallOK(param.callResult))
            {
                state_change("DEAL_PLAYER3_>_DONE_PLAYER3");
            }
            else
            {
                throw new Exception("Set player 3rd card failed. Server returned #FAIL");
            }
        }
Esempio n. 13
0
        void serverCallWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            ServerCallParam param = (ServerCallParam)e.Argument;

            try
            {
                param.callResult = web_client.DownloadString(param.url);
            }
            catch
            {
                param.callResult = "ERROR";
            }
            e.Result = param;
        }
Esempio n. 14
0
        void hCheckState_Login_Completed(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            if (isCallOK(param.callResult))
            {
                currentState  = extractState(param.callResult);
                btnLogin.Text = "登出";
                switchNewGameButton(true);
                plMain.Enabled = true;
            }
            else
            {
                print("check state after login failed");
            }
        }
Esempio n. 15
0
        void handleNewGame(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            print("create game result:" + param.callResult);

            if (isCallOK(param.callResult))
            {
                currentGameID = int.Parse(param.callResult.Split('#')[1]);

                showInstruction("新局開始");
                wait(conf.dNewGame);
                checkState(hCheckState);
            }
            else
            {
                showInstruction("開局失敗,請再試。");
                printError("Failed to create game.");
                switchNewGameButton(true);
            }
        }
Esempio n. 16
0
        void hChangeState(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            print(string.Format(strPrintStateChange, currentGameID, param.url.Substring(param.url.IndexOf("spName=") + 7), param.callResult));
            if (isCallOK(param.callResult))
            {
                switch (param.stateChange)
                {
                case "NEW_GAME_>_READY_BET": showMsgWaitThenCheckState("開始投注", "Allow bet, last call in " + convert2Second(conf.dAllowBet) + " seconds.", conf.dAllowBet); break;

                case "READY_BET_>_LAST_CALL": showMsgWaitThenCheckState("最後投注", "Last call, stop bet in " + convert2Second(conf.dLastCall) + " seconds.", conf.dLastCall); break;

                case "LAST_CALL_>_STOP_BET": showMsgWaitThenCheckState("停止投注", "Synchoizing bet information, wait...", conf.dStopBet); break;

                case "STOP_BET_>_DEAL_FIRST": showMsgWaitThenCheckState("開始派牌", "Start dealing first two cards.", conf.dDeal1st); break;

                case "GAME_DONE_>_RESULT": showMsgWaitThenCheckState("計算結果", "Calculating result, please wait...", conf.dResult); break;

                case "RESULT_>_ANNOUNCE": showMsgWaitThenCheckState("公佈贏家", "Paying out, please wait...", conf.dAnnounce); break;

                case "ANNOUNCE_>_CALC_PAY": showMsgWaitThenCheckState("計算派彩", "Calculating payout, please wait...", conf.dCalcPay); break;

                case "CALC_PAY_>_CALC_PAY_DONE": showMsgWaitThenCheckState("計算完畢", "Calculation done, please wait...", conf.dCalcDone); break;

                case "CALC_PAY_DONE_>_PAYOUT": showMsgWaitThenCheckState("派彩", "Paying out, please wait...", conf.dPayout); break;

                case "PAYOUT_>_PREPARE_NEXT": showMsgWaitThenCheckState("準備新局", "Game ended. Press button again to start a new game.", conf.dPrepareNext); break;

                case "DEAL_FIRST_>_DONE_FIRST": showMsgWaitThenCheckState("派牌完畢", "Upload succeed. Wait to ensure all client in sync.", conf.dDone1st); break;

                case "DONE_FIRST_>_WATCH_FIRST": showMsgWaitThenCheckState("玩家睇牌", "Player can start watching cards now, please wait...", conf.dWatch1st); break;

                case "WATCH_FIRST_>_OPEN_FIRST": showMsgWaitThenCheckState("開牌", "wait...", conf.dOpen1st); break;

                case "DEAL_BANKER3_>_DONE_BANKER3": showMsgWaitThenCheckState("補牌完畢", "Upload succeed. Wait to ensure all client in sync.", conf.dDoneB3); break;

                case "DONE_BANKER3_>_WATCH_BANKER3": showMsgWaitThenCheckState("玩家睇牌", "Player can start watching banker third card now, please wait...", conf.dWatchB3); break;

                case "OPEN_FIRST_>_DEAL_PLAYER3": showMsgWaitThenCheckState("閒家補牌", "Start dealing player third card. Press button when finish.", conf.dDealP3); break;

                case "DEAL_PLAYER3_>_DONE_PLAYER3": showMsgWaitThenCheckState("補牌完畢", "Upload succeed. Wait to ensure all client in sync.", conf.dDoneP3); break;

                case "DONE_PLAYER3_>_WATCH_PLAYER3": showMsgWaitThenCheckState("玩家睇牌", "Player can start watching player third card now, please wait...", conf.dWatchP3); break;

                case "WATCH_PLAYER3_>_OPEN_PLAYER3": showMsgWaitThenCheckState("開牌", "wait...", conf.dOpenP3); break;

                case "OPEN_FIRST_>_DEAL_BANKER3":
                case "OPEN_PLAYER3_>_DEAL_BANKER3":
                    showMsgWaitThenCheckState("莊家補牌", "Start dealing banker third card. Press button when finish.", conf.dDealB3); break;

                case "WATCH_FIRST_>_GAME_DONE":
                case "WATCH_BANKER3_>_GAME_DONE":
                case "WATCH_PLAYER3_>_GAME_DONE":
                    showMsgWaitThenCheckState("牌局結束", getGameDoneString(), conf.dGameDone); break;

                default: break;
                }
            }
            else
            {
                printError("State change returned #FAIL.");
                showInstruction("Game Terminated.");
                throw new Exception("Server returned #FAIL when attempting to change state.");
            }
        }
Esempio n. 17
0
        void hCheckState(object args)
        {
            ServerCallParam param = (ServerCallParam)args;

            if (isCallOK(param.callResult))
            {
                currentState = extractState(param.callResult);
                print("currentState:" + currentState);
                switch (currentState)
                {
                case "NEW_GAME":    state_change("NEW_GAME_>_READY_BET"); break;

                case "READY_BET":   state_change("READY_BET_>_LAST_CALL"); break;

                case "LAST_CALL":   state_change("LAST_CALL_>_STOP_BET"); break;

                case "STOP_BET":    state_change("STOP_BET_>_DEAL_FIRST"); break;

                case "GAME_DONE":   state_change("GAME_DONE_>_RESULT"); break;

                case "RESULT":      state_change("RESULT_>_ANNOUNCE"); break;

                case "ANNOUNCE":    state_change("ANNOUNCE_>_CALC_PAY"); break;

                case "CALC_PAY":    state_change("CALC_PAY_>_CALC_PAY_DONE"); break;

                case "CALC_PAY_DONE":   state_change("CALC_PAY_DONE_>_PAYOUT"); break;

                case "PAYOUT":      state_change("PAYOUT_>_PREPARE_NEXT"); break;

                case "PREPARE_NEXT":
                    switchNewGameButton(true);
                    switchLoginButton(true);
                    break;

                case "DEAL_FIRST": setFirstCards(); break;

                case "DONE_FIRST": state_change("DONE_FIRST_>_WATCH_FIRST"); break;

                case "WATCH_FIRST":
                    // Determine whether need to deal 3rd banker card or not
                    if ((_iPTotal >= 8 || _iBTotal >= 8) || (_iPTotal >= 6 && _iBTotal >= 6))
                    {
                        state_change("WATCH_FIRST_>_GAME_DONE");
                    }
                    else
                    {
                        state_change("WATCH_FIRST_>_OPEN_FIRST");
                    }
                    break;

                case "OPEN_FIRST":
                    // pTotal 6 - 7
                    if (_iPTotal >= 6 && _iBTotal < 6)
                    {
                        state_change("OPEN_FIRST_>_DEAL_BANKER3");
                    }
                    else     // pTotal 0 - 5
                    {
                        state_change("OPEN_FIRST_>_DEAL_PLAYER3");
                    }
                    break;

                case "DEAL_BANKER3": setBankerCard3(); break;

                case "DONE_BANKER3": state_change("DONE_BANKER3_>_WATCH_BANKER3");  break;

                case "WATCH_BANKER3": state_change("WATCH_BANKER3_>_GAME_DONE");  break;

                case "DEAL_PLAYER3": setPlayerCard3(); break;

                case "DONE_PLAYER3": state_change("DONE_PLAYER3_>_WATCH_PLAYER3"); break;

                case "WATCH_PLAYER3":
                    if ((_iBTotal == 6 && (_iPCard3 == 6 || _iPCard3 == 7)) ||
                        (_iBTotal == 5 && (_iPCard3 >= 4 && _iPCard3 <= 7)) ||
                        (_iBTotal == 4 && (_iPCard3 >= 2 && _iPCard3 <= 7)) ||
                        (_iBTotal == 3 && (_iPCard3 != 8)) ||
                        _iBTotal <= 2)
                    {
                        state_change("WATCH_PLAYER3_>_OPEN_PLAYER3"); break;
                    }
                    else
                    {
                        state_change("WATCH_PLAYER3_>_GAME_DONE"); break;
                    }

                case "OPEN_PLAYER3": state_change("OPEN_PLAYER3_>_DEAL_BANKER3"); break;

                default: break;
                }
            }
        }