我在使用 SmartFoxServer 2X 时遇到了一个问题,我想分享这个问题,寻求社区的任何帮助/建议。这可能是 SFS 的默认行为,但我想以另一种方式为我的项目做这件事。这是场景:
服务器版本:2.0.0-RC1,我使用 AS3 进行客户端编码。我没有在服务器端做任何事情并在 AS3 中使用 SFS 的基本/默认方法。
用户登录特定区域并获得可用房间列表。所有房间最多只能有 2 位用户。如果没有房间,则用户创建房间(带有settings.maxUsers = 2;
)并加入该房间。如果有任何房间,则用户检查一个房间room.userCount<2
并加入该房间。
如果所有房间都已满,则用户创建一个新房间并加入该房间,以便其他用户可以登录并加入该房间。现在,当第一个用户登录时,会创建一个房间,用户等待下一个用户登录并加入该房间。
第二个用户登录并加入第一个用户创建的房间。现在,当第三个用户登录时,第二个用户加入了新创建的房间,同时也留在了第一个用户创建的房间中。(注意:只有第二个用户有这样的行为;第一个用户呆在同一个房间里。类似地,当游戏中有 4、5 和 6 个用户时,第 5 个用户与第 4 个和第 6 个用户共享房间,以相同的方式正如第二个用户所做的那样)。
现在有两个房间。第一个房间由第一个和第二个用户共享,第二个房间由第二个和第三个用户共享。这可能是 SFS 处理房间和加入他们的用户的默认方式。但是我想将第一个和第二个玩家保留在第一个房间中,即使在区域中创建一个新房间,然后为第三个用户创建一个新房间,以便第四个用户可以与第三个用户一起加入房间并且很快。
感谢您查看它。请帮忙。
private function onLogin(event:SFSEvent):void {
SFSVar.removeEventListener(SFSEvent.LOGIN, onLogin);
var count:int = 0;
var roomList:Array = event.currentTarget.roomList;
if(roomList.length==0) {
var my_date:Date = new Date();
var settings:RoomSettings = new RoomSettings("PoolGame"+my_date.fullYear+my_date.month+my_date.date+my_date.hours+my_date.minutes+my_date.seconds);
settings.maxUsers = 2;
settings.groupId = "default";
settings.isGame = true;
SFSVar.send(new CreateRoomRequest(settings, false));
} else if(roomList.length>0) {
for each(var room:Room in roomList) {
count++;
if(room.userCount==2) {
if(count==roomList.length) {
var my_date:Date = new Date();
var settings:RoomSettings = new RoomSettings("PoolGame"+my_date.fullYear+my_date.month+my_date.date+my_date.hours+my_date.minutes+my_date.seconds);
settings.maxUsers = 2;
settings.groupId = "default";
settings.isGame = true;
SFSVar.send(new CreateRoomRequest(settings,false));
break;
}
} else if(room.userCount==1) {
var roomRequest:JoinRoomRequest = new JoinRoomRequest(room.id,null,-1);
SFSVar.send(roomRequest);
break;
}
}
}
}
private function onRoomCreation(event:SFSEvent):void {
SFSVar.removeEventListener(SFSEvent.ROOM_ADD, onRoomCreation);
var room:Room = event.params.room;
var roomRequest:JoinRoomRequest = new JoinRoomRequest(room.id,null,-1);
SFSVar.send(roomRequest);
}
private function onRoomJoin(event:SFSEvent):void {
SFSVar.removeEventListener(SFSEvent.ROOM_JOIN, onRoomJoin);
trace("room joined!!!");
}