A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 老衲玩IT 中级黑马   /  2013-8-23 00:01  /  1398 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Socket连接下:
MainServer:通过玩家登陆信息,创建玩家服务线程PlayerServer,把该线程放入playersMap,新建房间时创建RoomServer线程并放入RoomList
RoomServer:被创建后把创建者(PlayerServer)线程的引用放入Players集合,通过PlayerServer发来的命令增加删除Players中的PlayerSever元素
PlayerServer:进入房间后该线程的引用放入RoomServer的Players集合,room引用对应的RoomServer对象,标记在房状态,退出房间时移除room引用。
玩家交互:处于


下面是伪代码:
class MainServer{
ServerSocket ssocket;
HashMap<String,PlayerServer> playersMap;
List<RoomServer> roomList;
while(1){
远程传来的命令做以下动作
createplayerServer();创建玩家线程
createRoomServer();创建房间线程

……
……
}

}
class RoomServer extends Thread{
HashMap<String,PlayerServer> playersMap;
Quene event;
run(){
while(房间人数不为0){
broadcast();
每休息几百毫秒移出一个event元素广播给playersMap的所有成员
……

}
}
}
PlayerServer extends Thread{
RoomServer room;
Socket socket
run(){
while(玩家在线){

在房间时按玩家远程传来的命令给room.event加入消息。
……
不在房间时做其他服务
}
}
}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

2 个回复

正序浏览
{:soso_e176:}
亲,请问下问题是否解决?
如果已解决请及时将未解决改为已解决
如果未解决请回帖追问
三天未回复的将视为已解决

详情参考: 如何更改分类

保持队形,谢谢合作{:soso_e121:}
回复 使用道具 举报
恩  我记得是这个原理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马