程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> 游戲大廳從基礎開始(3)——客戶端與服務器的連接

游戲大廳從基礎開始(3)——客戶端與服務器的連接

編輯:VB.NET

本文配套源碼

看了上篇隨筆的回復 發現大家都很關心如何實現連接。

但是本節可能不會涉及到數據連接的 具體實現。

盲目的實現連接 而不試圖從更高的位置來考慮連接的作用,只能徒增耦合。

而網絡傳輸的實現各有特點,耦合過高的話 ,稍不注意業務邏輯就會成為通訊協議的犧牲品。

這種狀況 往往讓我們產生"只能針對xxx傳輸協議"的架構 。

其實只要多加思考,我 們便能跳出協議的樊籬,畢竟"遵循某個接口實現一個基於xx通訊協議的類" 屬於那種可以幾 百塊錢外包到"老少邊窮地區地方大學貧困學生"的項目,耗費精力不一定值得。好吧,其實 當年我就是這樣一個很耗精力大學生,所以我們更要給年輕後輩鍛煉的機會不是麼!

先說封包

封包是什麼?

就是一坨數據。

可能是個問題,可能是個答案,可能是個"我 還活著"的聲明,可能是團亂碼

其實沒什麼可說的, 大體上就是數據和標識

有的有 利於工作時候查詢數據,處理數據

有的有利於傳輸。

連接的功能

大家來跟我一起自我催眠

閉上眼睛

想象我們的網絡游戲大廳是一個地方政府辦公室,你 的地盤你做主,你就是黨委書記。

想象我們的客戶端是一個個街道辦事處。

互聯網 就是 郵政電信系統

我們的數據 就是一封一封的信件文檔。

那麼我們的連接應該是什麼呢?

最早的實現傳達室(UDP)

後來有了電話和傳真機 (http)

數據專線 (tcp持續 連接)

這些都是各種協議細節。

你要和一個街道辦事處互通一下信息,

你需要自 己去傳達室麼?

你需要親自操作傳真麼?

你需要操作電腦,打開軟件,登陸帳號, 發送 信息麼?

你需要了解這個街道辦事處電話有沒有欠費 是否有專線 郵遞員有沒有玩忽職守 以便 決定你怎樣傳遞信息麼?

NO , NO ,你已經不是那個層次的人了,你是黨的好干部,你只需要詢 問你的漂亮女秘書!

女秘書,懂麼,很高科技哦!

來來美女 發個郵件出去 順便把包裹 去回來,恩再幫我安排明天下午和張太太喝下午茶。

有新技術了?msn? qq? Windows live meeting? 送女秘書去培訓! 弄兩個秘書輪流培訓!

反正你就兩個要求,收信,發信!

ICodec 就是終端設備,其中包括傳達室大爺、傳真機、電話、msn 、qq 、數據專線 、微縮膠片 等等等等,把 我們的文件變成可以傳輸的格式,從workingpack變成LinkPack.

眼熟麼?這就是橋接模式 把部 分功能的可替換實現做成另一個類,通過別的工廠根據配置文件產生後放入主類哦。

話說回來, 難道各個街道主任也要勢必躬親麼? No, 沒有女秘難道沒有街道大媽?

所以蜜和大媽的主要作 的事情還是一樣的,細節有所不同

Server端的小秘書是 要連接Client端的 叫做 IClientLink

Client端的大媽是要連接 Server端的 叫做 IServerLink

更高級的需求,我們的小秘書和街道大媽 其實都是琛哥派來的臥底,她們就是查理 的天使,安插在街道辦事處裡的天使。

琛哥最近要有組織的擺地攤犯罪,為了防止城管打砸搶, 給她們一人一個加密機要小秘書給大媽隱蔽的通風報信,只有用同規格的加密機才能解開對方的密文哦 ,女特務們加油。。。。

大圖

好吧 剩下的事情 就 都是郵電系統該做的了。

參考代碼:

IPack

Code

'---------- -------------------
'     Wayne Wang
'     個人研究
'   不是什麼了不起的東西
'  有錯誤的話還請告訴我
'     努力奮斗
'      Yeah!
'-----------------------------
Namespace CommonNamespace Common
  Public Interface IPackInterface IPack
    Enum PackFlagEnum PackFlag
      cmdHeart_Up = &H0
      cmdLogin_Up = &H1000000
      cmdLogin_Down = &H1010001
      cmdLogin_Err = &H1010000
      cmdLogin_Sign_Up = &H1000100
       cmdMove_Up = &H2000000
      cmdMove_IntAny_Up = &H2000001
       cmdMove_Invite_User_Up = &H2000002
      cmdMove_Local_Down = &H2010001
      cmdMove_Local_Err = &H2010000
       cmdMove_Remote_Down = &H2010101
      cmdMove_Remote_Err = &H2010100
      cmdLook_Area_Up = &H3000000
      cmdLook_ItemPrice_Up = &H3000100
      cmdLook_ItemInstr_Up = &H3000200
       cmdLook_AccountMoney_Up = &H3000300
      cmdLook_Sms_Report_Up = &H3000400
      cmdLook_Area_Down = &H3010001
       cmdLook_Area_Err = &H3010000
      cmdLook_ItemPrice_Down = &H3010101
      cmdLook_ItemInstr_Down = &H3010201
       cmdLook_AccountMoney_Down = &H3010301
      cmdLook_Sms_Report_Down = &H3010401
      cmdLook_AreaChildren_Up = &H3000500
       cmdLook_AreaChildren_Down = &H3010501
      cmdLook_AreaChildren_Err = &H3010500
      cmdLook_AreaUser_Up = &H3000600
       cmdLook_AreaUser_Down = &H3010601
      cmdLook_AreaUser_Err = &H3010600
      cmdLook_Guilds_Up = &H3000700
       cmdLook_Guilds_Down = &H3010701
      cmdLook_Guilds_Err = &H3010700
      cmdShop_Buy_Up = &H4000000
      cmdShop_Buy_Down = &H4010001
      cmdShop_Buy_Err = &H4010000
       cmdCheckin_CreateRoom_Up = &H5000100
      cmdCheckin_CreateRoom_Down = &H5010101
      cmdCheckin_CreateRoom_Err = &H5010100
       cmdCheckin_KickAss_Up = &H5000200
      cmdCheckin_KickAss_Down = &H5010201
      cmdCheckin_KickAss_Err = &H5010200
       cmdCheckin_ChangePassword_Up = &H5000300
       cmdCheckin_ChangePassword_Down = &H5010301
       cmdCheckin_ChangePassword_Err = &H5010300
      cmdGameLogic = &H6000000
      cmdGameLogic_SoloGame_Up = &H6000001
       cmdGameLogic_SoloGame_Down = &H6010001
      cmdChatPush_Chat_Up = &H7000100
      cmdChatPush_Chat_Down = &H7010100
       cmdChatPush_Whisper_Up = &H7000101
      cmdChatPush_Whisper_Down = &H7010101
      cmdChatPush_Emote_Up = &H7000200
       cmdChatPush_Emote_Down = &H7010200
      cmdChatPush_PEmote_Up = &H7000201
      cmdChatPush_PEmote_Down = &H7010201
       cmdChatPush_SystemQuetion_Answer_Up = &H7000300
       cmdChatPush_SystemQuetion_Ask_Down = &H7010301
      cmdClose_Logout_Up = &H8000000
      cmdClose_Logout_Down = &H8010001
       cmdPVar_PVar_Up = &H9000000
      cmdPVar_PVar_Down = &H9010001
       cmdPVar_PVar_Err = &H9010000
      cmdPVar_PVarUpdate_Up = &H9000100
      cmdPVar_PVarUpdate_Down = &H9010101
       cmdPVar_PVarUpdate_Err = &H9010100
      cmdInv_List_Up = &HA000000
      cmdInv_List_Down = &HA010001
      cmdInv_List_Err = &HA010000
      cmdGive_Item2Other_Up = &HB000000
       cmdGive_Item2Other_Down = &HB010001
      cmdGive_Item2Other_Err = &HB010000
      cmdSMS_List_Up = &HC000000
       cmdSMS_List_Down = &HC010001
      cmdSMS_List_Err = &HC010000
       cmdGuild_Create_Up = &HD000000
      cmdGuild_Create_Down = &HD010001
      cmdGuild_Create_Err = &HD010000
       cmdGuild_Invite_Up = &HD000100
      cmdGuild_Invite_Down = &HD010101
      cmdGuild_Invite_Err = &HD010100
      cmdGuild_Quit_Up = &HD000200
      cmdGuild_Quit_Down = &HD010201
       cmdGuild_Quit_Err = &HD010200
      cmdGuild_Status_Up = &HD000300
      cmdGuild_Status_Down = &HD010301
      cmdGuild_Status_Err = &HD010300
      cmdGuild_UpdateStatus_Up = &HD000400
       cmdGuild_UpdateStatus_Down = &HD010401
      cmdGuild_UpdateStatus_Err = &HD010400
      cmdGuild_Kick_Up = &HD000500
       cmdGuild_Kick_Down = &HD010501
      cmdGuild_Kick_Err = &HD010500
      cmdGuild_ChangeOwner_Up = &HD000600
       cmdGuild_ChangeOwner_Down = &HD010601
      cmdGuild_ChangeOwner_Err = &HD010600
      cmdGuild_Dismiss_Up = &HD000700
       cmdGuild_Dismiss_Down = &HD010701
      cmdGuild_Dismiss_Err = &HD010700
      cmdGuild_ChangeRight_Up = &HD000800
       cmdGuild_ChangeRight_Down = &HD010801
      cmdGuild_ChangeRight_Err = &HD010800
    End Enum
    /**/''' <summary>
    ''' 包的標識
    ''' </summary>
     Property Flag()Property Flag() As PackFlag
  End Interface
End Namespace

IWorkingPack

Code

'-------------------------- ---
'     Wayne Wang
'     個人研究
'  不是什麼了不起 的東西
'  有錯誤的話還請告訴我
'     努力奮斗
'       Yeah!
'-----------------------------
Namespace CommonNamespace Common
  Public Interface IWorkingPackInterface IWorkingPack
    Inherits IPack
     /**/''' <summary>
    ''' 根據路徑讀取包的內容
    ''' </summary>
    ''' <param name="routeArray">讀取包內數據樹的某個位置 數組表示路徑</param>
     Function LocateValue()Function LocateValue(ByVal routeArray As Int32()) As IWorkingPackNode
    /**/''' <summary>
     ''' 根節點
    ''' </summary>
    Property RootValueNode()Property RootValueNode() As IWorkingPackNode
  End Interface
End Namespace

IWorkingPackNode

Code

Namespace CommonNamespace Common
  Public Interface IWorkingPackNodeInterface IWorkingPackNode
     Property Name()Property Name() As String
    Property Value()Property Value() As Object
    Property ChildNodes()Property ChildNodes() As IList(Of IWorkingPackNode)
    Property Attritues()Property Attritues() As IDictionary(Of String, Object)
  End Interface
End Namespace

今天文件太多了 太麻 煩了 其他的部分 我打包好了。。。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved