У меня возникла проблема при работе с SmartFoxServer 2X, которую я хочу поделиться с поиском какой-либо помощи/совета сообщества. Это может быть поведение по умолчанию для SFS по умолчанию, но я хочу сделать это другим способом для моего проекта. Вот сценарий:Как запретить пользователю покидать текущую комнату и присоединиться к вновь созданной комнате?
Версия сервера: 2.0.0-RC1, и я использую AS3 для кодирования на стороне клиента. Я не делаю ничего на стороне сервера и использую основные/стандартные методы SFS в AS3.
Пользователь регистрируется в определенной зоне и получает список доступных номеров. Во всех номерах должно быть не более 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!!!");
}
Это то, что сработало для меня. В любом случае, спасибо за то, что вы нашли Мела. –