2010年2月17日 星期三

聊天室練習 - V. 傳輸命令格式

在聊天室這個練習中,網路接收與傳送是以單一物件為主,見"III、 網路設定、接收與傳送"。在這個架構下,每個命令以一個python內建型態--字典(dictionary )來包裝,內含三個欄位:
  1. "i":傳送命令者的索引代號
  2. "fn":命令名稱
  3. "param":命令參數

欄位"i"又分成兩種。
  • i=0:系統命令,處理特殊命令如參予者加入命令,參予者離開等事件。
  • i != 0:參予者輸入的命令。如聊天字串輸入,鍵盤按下,搖桿輸入等。
在 此練習中,參予者暱稱清單是由"i=1"開始算起,給第一個加入聊天室的server。"i"是交由server端依據封包由哪個client傳入來設定,只有server端擁有所有client的連線清單,隨者client加入或離開,此client的連線清單也跟著改變,因此client所表示的索 引代號"i"也會跟著改變。

欄位"fn"總是字串,定義在CommandInputLib.py中。欄位"param"隨著"fn"而有所不同格式。
此練習中使用下列"fn":
  • cmd_CLIENTINITIAL:client加入時的初始化處理。在此server將傳遞聊天室內的參予者暱稱清單,但只回覆給傳送此命令的client,而不是給所有的參予者。
  • cmd_USERJOIN:其他client加入時的處理。將加入者的暱稱加入參予者暱稱清單。
  • cmd_USERLEAV:其他client離開時的處理。將離開者的暱稱從參予者暱稱清單移除。
  • cmd_TEXT:參予者的對話字串處理。將此字串與發話者暱稱連結("發話者暱稱:字串"),加入文字顯示區。
由 於server端的client的連線清單,會隨著client加入或離開改變,server必須以命令cmd_USERJOIN、 cmd_USERLEAV來通知client,好讓client更新目前參予者暱稱清單,才能在處理命令cmd_TEXT時,由"i"取得正確的發話者暱 稱。參予者暱稱清單放於ChatRoomFrame.userList(ChatRoomFrame.py,第31行)。

傳輸命令格式的設計目的是希望藉由"i"來分辨參與者,將"fn"與"param"傳遞給對應的參予者處理。如此參予者的行為可交由不同人獨立撰寫,自行定義私人的傳輸命令,僅以一個共同介面如
CmdExec(fn,param)
來接收命令。



----

  1. 操作方式
  2. 程式架構
  3. 網路設定、接收與傳送
  4. Server - Client 間的傳輸協定
  5. 傳輸命令格式
  6. GUI
  7. 中文輸入與顯示
  8. 事件驅動

沒有留言: