2013-02-22 8 views
0

У меня возникла проблема при работе с 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!!!"); 
} 

ответ

0

Я уверен, что оригинальный плакат понял это уже, но и для других людей, читающих это, проблема заключается в том, что второй пользователь по-прежнему имеет свой прослушиватель событий room_add. Когда третий пользователь присоединяется, создается новая комната, и поскольку у 2-го и 3-го пользователей по-прежнему есть свои прослушиватели событий room_add, они оба присоединяются к новой комнате.

Чтобы исправить это, добавьте строку, чтобы удалить прослушиватель событий room_add обработчику событий room_join, или добавьте некоторую проверку обработчику события room_add, чтобы отправить запрос на соединение комнаты, только если игрок еще не находится в комнате ,

+0

Это то, что сработало для меня. В любом случае, спасибо за то, что вы нашли Мела. –