# 棋牌新遊戲架構部署文件
## 說明
### 更動服務
- game0; 支持房間代理線水庫運算, 且向下兼容既有系統.
- center; 支持新款遊戲架構, 提供客製化遊戲房間配置, 且向下兼容既有系統.
- hhdz; 支持代理線分房運算遊戲結果
### 已知問題
- 既有棋牌後台代理部分功能不兼容
### 遊戲架構改變
| 以前 | 現在 |
| --- | --- |
| 遊戲區分牌桌 `只能區別` 到廳主 | 遊戲區分牌桌 `能細分` 到代理線 |
| 遊戲相關資訊儲存於 redis `set` | 遊戲相關資訊儲存於 redis `hset` |
| 動態房間水庫透過 `redis` 鍵值更新資訊 | 動態房間水庫透過 `nats` 傳遞資訊 |
| 遊戲房間採 `全手動` 設定 | 遊戲房間採 `全自動` 設定, 有額外客人製需求才另外手動設定 |
| 遊戲房間託管採用 `單一` 託管 | 遊戲房間託管採用 `託管池` 託管 |
| 代理 `共用` 廳主房間水庫, 代理玩家可以過分 | 代理線 `獨立` 使用房間倍率水庫, 代理玩家無法過分 |
| `透過` 層級/代理線/殺率, 操作玩家遊玩房間 | `廢除` 層級/代理線/殺率, 相關功能 |
| 設定檔模組 `不可` 指定 AES 值, 大部分服務採用環境變數, 僅 center 服務支持設定檔 | 設定檔模組 `可以` 指定 AES 值, 除了遊戲採用環境變數, 其餘服務採用設定檔運行 |
| 服務日誌輸出到 `stdout` 透過 supervisor 做日誌整理 | 部分服務日誌輸出到 `檔案`, 自動做整理, 減少 stdio |
| 玩家登入透過 `stored_procedure` 操作確認是否創建對應帳號/廳主/代理資訊 | 玩家登入透過 `代碼` 內部實現, 操作確認是否創建對應帳號/廳主/代理/代理線資訊 |
---
## 步驟
### MySql 欄位修改
```sql
-- 1. 會員帳號增加 `linecode` 資訊
ALTER TABLE `chesscards`.`tbl_account`
ADD COLUMN `linecode` varchar(32) NOT NULL DEFAULT '' COMMENT 'linecode' AFTER `agent_login_id`;
-- 2. 會員廳主代理資料表 `ukey` 欄位擴充
ALTER TABLE `chesscards`.`tbl_agent`
CHANGE `ukey` `ukey` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'sn_agentid';
-- 3. 遊戲房間設置增加 `linekey` 資訊; `sn^agent_id^linecode`
ALTER TABLE `chesscards`.`tbl_game_room`
ADD COLUMN `linekey` varchar(64) NOT NULL DEFAULT '' COMMENT 'sn^agent_id^linecode' AFTER `currency_code`;
-- 4. 將新遊戲架構水庫設置改寫至 `chesscards`.`tbl_run_rtp` 並增加 `ukey` 資訊; `gameId^sn^agent_id^linecode^room_type`
CREATE TABLE `chesscards`.`tbl_run_rtp` (
`game_id` bigint(32) DEFAULT NULL COMMENT 'gameID',
`sn` varchar(32) DEFAULT NULL COMMENT '廳主名稱',
`agent_id` varchar(32) DEFAULT NULL COMMENT '代理id',
`linecode` varchar(32) DEFAULT NULL COMMENT '代理線',
`room_type_code` int(11) DEFAULT NULL COMMENT '房間類別',
`ukey` varchar(64) DEFAULT NULL COMMENT 'gameId^sn^agent_id^linecode^room_type',
`current_grade` bigint(20) DEFAULT NULL COMMENT '库存当前值(厘)',
`total_bet` bigint(20) DEFAULT NULL COMMENT '总投注(厘)',
`total_settlement` bigint(20) DEFAULT NULL COMMENT '总派彩(厘)',
`created_at` bigint(20) DEFAULT NULL COMMENT '创建时间(UNIX时间戳)',
`updated_at` bigint(20) DEFAULT NULL COMMENT '最后更新时间(UNIX时间戳)',
UNIQUE KEY (`ukey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间各项数据';
-- 5. 玩家在線報表 `sn` 欄位擴充
ALTER TABLE `chesscards_busi`.`tbl_online_count` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20230918` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20230925` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231002` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231009` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231016` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231023` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231030` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231106` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231113` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231120` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231127` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231204` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231211` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231218` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
ALTER TABLE `chesscards_busi`.`tbl_online_count_20231225` CHANGE `sn` `sn` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '';
```
### Redis 鍵值增加
```bash=
# 將 set_redis_data 放置在執行檔目錄中即可執行
mv set_redis_data /home/kyo/releases/set_redis_data
chmod +x set_redis_data
cd /home/kyo/releases
./set_redis_data
# sn:li00, gameId: 15, isAddSn: false, cyCode: CNY, cyDisplayName: 人民幣(CNY)
# set redis data done!
```
### 棋牌服務執行檔/設定檔替換
```bash=
# chmod 使 binary 可執行
chmod +x game0
chmod +x center
chmod +x hhdz
# 確認版本號
./game0 --version
# git commit num: f0dd185
./center --version
# git commit num: 551e93a
./hhdz --version
# git commit num: 224b6a5
# 移動 config, 執行檔 到執行目錄
mv binary_config/config.ini /home/kyo/releases/config.ini
mv binary_config/config_games.yaml /home/kyo/releases/config_games.yaml
mv game0 /home/kyo/releases/game0
mv center /home/kyo/releases/center
mv hhdz /home/kyo/releases/hhdz
# 移動 supervisor 設定檔到 supervisor 設定檔目錄
mv supervisor_config/game0.conf /etc/supervisor/conf.d/game0.conf
mv supervisor_config/center.conf /etc/supervisor/conf.d/center.conf
mv supervisor_config/hhdz.conf /etc/supervisor/conf.d/hhdz.conf
```
### 重啟 `Supervisor` 服務
```bash=
systemctl restart supervisord
```
### 檢查是否正確更新
1. 看 log 日誌
2. 確認是否能從測試廳登入
3. 檢查登入廳主的 redisKey 是否創建(應該會自動生成)
4. 用測試廳(代理線)跑一局, 確認 RTP 是否為 97.5 或是 請企劃協助確認一下登入測試 RTP