游戏大厅 从基础开始(3)——最吸引眼球的部分 客户端与服务器的连接
作者:互联网
游戏大厅 从基础开始(3)
——最吸引眼球的部分 客户端与服务器的连接
看了上篇随笔的回复 发现大家都很关心如何实现连接。
但是本节可能不会涉及到数据连接的具体实现。
(补充: tcp实现封装已经完成 请参考 http://www.cnblogs.com/waynebaby/archive/2009/01/14/1375234.html)
盲目的实现连接 而不试图从更高的位置来考虑连接的作用,只能徒增耦合。
而网络传输的实现各有特点,耦合过高的话 ,稍不注意业务逻辑就会成为通讯协议的牺牲品。
这种状况 往往让我们产生"只能针对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
CodeNamespace 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
今天文件太多了 太麻烦了 其他的部分 我打包好了。。。
http://files.cnblogs.com/waynebaby/Communicate.rar
转载于:https://www.cnblogs.com/waynebaby/archive/2008/12/19/1358700.html
标签:Err,Up,cmdLook,Down,cmdGuild,眼球,服务器,Property,客户端 来源: https://blog.csdn.net/weixin_30379973/article/details/96692018