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加入消息。
……
不在房间时做其他服务
}
}
}
|