---
# System prepended metadata

title: Bot 無法完整解析 RPC-onEnterRoomList 問題

---

# Bot 無法完整解析 RPC-onEnterRoomList 問題
## 結論
> 對過程有興趣的讀者，可以閱讀本篇後續內容。

Bot 在解析 Struct[] 時，無法成功將 Struct 中的 Key 填入對應的 Value
```typescript=
// 原本寫法
struct[key] = value;
console.log(struct[key]); // print undefined --> unexpected

// 修正寫法
struct.setKey(key, value);
console.log(struct[key]); // print value --> expected
```

原本的寫法在 NW、V8 專案是正常運作的，
<font color=#FF0000>目前尚在釐清 【為何 Bot Struct Reader 結果與 NW、V8 不同】。</font>

## 發現問題
> 版本：0.11.4
SHA-1：8f446b95016809325ee003188ffbf02b7d9a89ff

Bot 登入 YL 時獲取之 RPC-onEnterRoomList 的內容為 undefined，具體錯誤如下：
```typescript=
// onEnterRoomList Data
[{"GameId": undefined, "GameType": undefined, ...}, ...], // GameInfo Array
[{"id": undefined, "name": undefined, ...}, ...] // RoomInfo Array
```
預期內容為：
```typescript=
// onEnterRoomList Data
[{"GameId": 1111, "GameType": "塗遊捕魚", ...}, ...], // GameInfo Array
[{"id": 9999, "name": "高級房", ...}, ...] // RoomInfo Array
```

## 錯誤猜測 - 登入資訊遺漏
因 Bot 與 YL 登入流程並非完全一致，故猜測是 Bot 在登入流程中有遺漏必要交握資訊，導致 YL Server 回傳不正確的 onEnterRoomList。

<font color=##FF0000>但在調整登入流程至完全一致後，依然無法獲取有效 onEnterRoomList。</font>

## 錯誤猜測 - RPCPacket Reader 有誤
因觀察到 Bot 與 YL 兩邊的 onEnterRoomList 封包內容一致，故猜測為 Reader 有問題；
另外觀察到 onEnterRoomList 解析後是有得到正確的陣列長度與格式，所以先排除 Array Reader 的問題，進一步推測是 **Struct Reader** 有錯誤。
<font color=#FF0000>在測試其他使用 Struct Reader 的 RPC(如：showdown)後，發現亦有相同問題。</font>
在 Struct Reader 中：
```typescript=
struct[key] = value;
console.log("value: ", value) // 發現得到正確的 value
console.log("struct: ", struct[key]); // 發現得到 undefined
```

進入 Struct Class 可見有 setKey function 處理 key-value-pair，
故，嘗試使用此 function 來填值：
```typescript=
struct.setKey(key, value);
console.log("struct: ", struct[key]); // 發現得到正確的 value
```

因此，所有 Struct Reader 經手之 RPC 應都有相同問題；
但為何僅 Bot 會有此問題，需另外釐清。