游戏客户端编码-2
来源:互联网 发布:实施国家大数据战略 编辑:程序博客网 时间:2024/03/28 16:55
class CHallSocket
...{
public:
void requestLogon(); //请求登录
void requestGameList(); //请求游戏列表
void requestRoomList(); //请求某个游戏的房间列表
void requestLoginGame(); //请求登录某个游戏的房间
void onrepLogon(); //大厅服务器 回复 请求登录
void onrepGameList(); //大厅服务器 回复 游戏列表
void onrepRoomList(); //大厅服务器 回复 某个游戏的房间列表
void onLoginGame(); //大厅服务器 回复 登录某个游戏的房间
void setLogonDialog(CLogonDialog* pDlg); // 新增这个方法,与CLogonDialog通信
void setHallDialog(CHallDialog* pDlg); // 通过调用 pDlg 的方法,与 CHallDialog 通信
protected:
void onRecv(); //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
};
...{
public:
void requestLogon(); //请求登录
void requestGameList(); //请求游戏列表
void requestRoomList(); //请求某个游戏的房间列表
void requestLoginGame(); //请求登录某个游戏的房间
void onrepLogon(); //大厅服务器 回复 请求登录
void onrepGameList(); //大厅服务器 回复 游戏列表
void onrepRoomList(); //大厅服务器 回复 某个游戏的房间列表
void onLoginGame(); //大厅服务器 回复 登录某个游戏的房间
void setLogonDialog(CLogonDialog* pDlg); // 新增这个方法,与CLogonDialog通信
void setHallDialog(CHallDialog* pDlg); // 通过调用 pDlg 的方法,与 CHallDialog 通信
protected:
void onRecv(); //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
};
当 CHallSocket 需要与多一个窗体通信时,就需要加多一个 setXXXXDialog() 的函数, CHallSocket 与 窗体类关联太密切了,当界面改动时,免不了要修改 CHallSocket ,又要再重新测试。
于是把 CHallSocket 与 界面的通信做成了一个类,俗称“接口类”
class CHallSocketImpl
...{
void onrepLogon() = 0; //大厅服务器 回复 请求登录
void onrepGameList() = 0; //大厅服务器 回复 游戏列表
void onrepRoomList() = 0; //大厅服务器 回复 某个游戏的房间列表
void onLoginGame() = 0; //大厅服务器 回复 登录某个游戏的房间
};
...{
void onrepLogon() = 0; //大厅服务器 回复 请求登录
void onrepGameList() = 0; //大厅服务器 回复 游戏列表
void onrepRoomList() = 0; //大厅服务器 回复 某个游戏的房间列表
void onLoginGame() = 0; //大厅服务器 回复 登录某个游戏的房间
};
把 CHallSocket 改成
class CHallSocket
...{
public:
void requestLogon(); //请求登录
void requestGameList(); //请求游戏列表
void requestRoomList(); //请求某个游戏的房间列表
void requestLoginGame(); //请求登录某个游戏的房间
void onrepLogon(); //大厅服务器 回复 请求登录
void onrepGameList(); //大厅服务器 回复 游戏列表
void onrepRoomList(); //大厅服务器 回复 某个游戏的房间列表
void onLoginGame(); //大厅服务器 回复 登录某个游戏的房间
// 无论要和几个窗口通信,只需通过这个函数告诉 CHallSocket 就可以了, 当然, 这需要 CLoginDialog 和 CHallDialog 都 继承 CHallSocketImpl 类,并且实现类中的方法。
void setSockImpl(CHallSocketImpl* pImpl);
protected:
void onRecv(); //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
private:
CHallSocketImpl* m_sockImpl; // 通过 setSockImpl 赋值
};
...{
public:
void requestLogon(); //请求登录
void requestGameList(); //请求游戏列表
void requestRoomList(); //请求某个游戏的房间列表
void requestLoginGame(); //请求登录某个游戏的房间
void onrepLogon(); //大厅服务器 回复 请求登录
void onrepGameList(); //大厅服务器 回复 游戏列表
void onrepRoomList(); //大厅服务器 回复 某个游戏的房间列表
void onLoginGame(); //大厅服务器 回复 登录某个游戏的房间
// 无论要和几个窗口通信,只需通过这个函数告诉 CHallSocket 就可以了, 当然, 这需要 CLoginDialog 和 CHallDialog 都 继承 CHallSocketImpl 类,并且实现类中的方法。
void setSockImpl(CHallSocketImpl* pImpl);
protected:
void onRecv(); //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
private:
CHallSocketImpl* m_sockImpl; // 通过 setSockImpl 赋值
};
窗体类:
class CLoginDialog : public CHallSocketImpl
...{
void onrepLogon() ...{/**//* 服务器返回登录结果的显示 */} //大厅服务器 回复 请求登录
// 由于登录窗体并不显示 游戏列表,房间登录等信息,所以只实现了 onrepLogon 方法
void onrepGameList() ...{} //大厅服务器 回复 游戏列表
void onrepRoomList() ...{} //大厅服务器 回复 某个游戏的房间列表
void onLoginGame() ...{}; //大厅服务器 回复 登录某个游戏的房间
}
class CHallDialog : public CHallSocketImpl
...{
// 同样道理,大厅窗体显示登录相关的信息,因为已经在登录窗体处理后,才进入大厅窗体的,故这里不实现 onrepLogon 方法
void onrepLogon() ...{} //大厅服务器 回复 请求登录
void onrepGameList() ...{ /**//* 显示游戏列表操作 */ } //大厅服务器 回复 游戏列表
void onrepRoomList() ...{ /**//* 显示游戏房间操作 */ } //大厅服务器 回复 某个游戏的房间列表
void onLoginGame() ...{ /**//* 登录游戏显示操作 */ } //大厅服务器 回复 登录某个游戏的房间
}
...{
void onrepLogon() ...{/**//* 服务器返回登录结果的显示 */} //大厅服务器 回复 请求登录
// 由于登录窗体并不显示 游戏列表,房间登录等信息,所以只实现了 onrepLogon 方法
void onrepGameList() ...{} //大厅服务器 回复 游戏列表
void onrepRoomList() ...{} //大厅服务器 回复 某个游戏的房间列表
void onLoginGame() ...{}; //大厅服务器 回复 登录某个游戏的房间
}
class CHallDialog : public CHallSocketImpl
...{
// 同样道理,大厅窗体显示登录相关的信息,因为已经在登录窗体处理后,才进入大厅窗体的,故这里不实现 onrepLogon 方法
void onrepLogon() ...{} //大厅服务器 回复 请求登录
void onrepGameList() ...{ /**//* 显示游戏列表操作 */ } //大厅服务器 回复 游戏列表
void onrepRoomList() ...{ /**//* 显示游戏房间操作 */ } //大厅服务器 回复 某个游戏的房间列表
void onLoginGame() ...{ /**//* 登录游戏显示操作 */ } //大厅服务器 回复 登录某个游戏的房间
}
在显示登录窗体之前通过调用
CHallSocket::setSockImpl(&CLoginDialog); // 设置网络层要回调的接口.
在显示大厅窗体之前同样调用
CHallSocket::setSockImpl(&CHallDialog);
这样做的好处,CHallSocket 并不关心它具体是与哪个窗体进行通信,它只知道与接口 CHallSocketImpl 通信就可以了,这样一来,只要网络通信流程不改变,无论要把整个登录游戏的过程分成多少个窗体来显示,都可以不用修改 CHallSocket 类,一来方便修改代码,二来也减少了出错的机会。
(未完,等续)
- 游戏客户端编码-2
- 游戏客户端编码
- flash游戏客户端设计2:地图实现
- Http Client 客户端编码
- 休闲游戏客户端框架
- 拉起游戏客户端carsh
- u3d游戏客户端架构
- u3d游戏客户端架构
- 王哲:游戏客户端趋势
- 游戏客户端是什么?
- 游戏客户端_登陆
- u3d游戏客户端架构
- 游戏客户端开发杂记
- akoj-1138-游戏编码
- 游戏编码问题
- 游戏编码及过程
- 对服务器与客户端编码不同的解决方式2
- Java socket编程 猜数游戏--2--客户端
- Struts 2.0系列之一--Struts 2.0概述
- AT指令短信开发集
- C语言实现数据结构的链表
- 简要分析C中结构的位域成员
- 现代生活21防
- 游戏客户端编码-2
- 拼音爱好者的好消息:紫光V6发版
- 《给初学者的Windows Vista的补遗手册》之068
- 《给初学者的Windows Vista的补遗手册》之069
- 如何获取局域网中的所有 SQL Server 服务
- 技术翻译答客问之一
- 利用u-boot移植更新u-boot自身
- js判断浏览器类型
- 主管大忌--护短