iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
自我挑戰組

卡牌遊戲開發日記v2020系列 第 24

Day24 終於改成socket連線

今天主要進度是把Queue改成socket,然後修修補補

整理概念

socket物件,負責底層send(), recv(),交換的資料型態是 bytes
經過擴展之後具備解析能力,這需要依賴封包定義格式,解析之後轉換成event,轉手給player
再往上一層則是需要具備處理、反應能力,最基本的反應就是 echo
再來跟據自身狀態、遊戲流程來決定 event 要接受還是不處理

  • 解析/編譯 bytes <-> event

目前最簡化的版本,純文字資料,指令無參數,使用空白分隔
ex: Turn_start Broadcast Update Draw_card Turn_end Heartbeat
包成一組資料的方式()
ex: (Update p1hp 150)

socket連線主機,一段時間後,等待對方傳送測試指令,接收指令後回送

進度

DONE:

  • 把Queue改成socket
  • 先不做封包解析的動作。直接 recv(1024)
  • 透過全域函數send()送出玩家行動的封包
  • handler先不做任何處理,單純回覆 ACK_XXX

client接收到的封包會被判定包含空白字元,要確認是什麼情況

測試結果

server side:

('127.0.0.1', 53311) Joined!
test after 5sec...
ACK_Turn_start
ACK_Broadcast
ACK_Update
ACK_Draw_card
ACK_Turn_end
ACK_Heartbeat
closeing client...
('127.0.0.1', 53311) Left!
('127.0.0.1', 53500) Joined!
test after 5sec...
closeing client...
('127.0.0.1', 53500) Left!

client side:

0_AddEventListener
1_AddEventListener
2_AddEventListener
3_AddEventListener
4_AddEventListener
5_AddEventListener
6_Start
6_run
"Turn_start"
"Broadcast"
"Update"
"Draw_card"
"Turn_end"
"Heartbeat"

上一篇
Day23 實作玩家(用戶端)的訊息收發-2
下一篇
Day25 思考遊戲的傳輸協議
系列文
卡牌遊戲開發日記v202030

尚未有邦友留言

立即登入留言