示例#1
0
 internal bool EnterRoom(tagGameServer Server, tagGameKind Kind)
 {
     if (FindByServerID(Server.wServerID) != null)
         return false;
     Room room = new Room(Server, Kind);
     mRoomList.Add(room);
     TaskExecute execute = new TaskExecute();
     execute.Push(new GameLoginTask(room));
     execute.Push(new WaitRoomCloseTask(room));
     execute.Execute(delegate(TASK_EVENT ev, BaseTask task)
     {
         DebugKit.Log("KL", "RoomManager.EnterRoom: " + ev.ToString());
         switch (ev)
         {
             case TASK_EVENT.TASK_COMPLETE:
                 {
                     if (OnRoomEvent != null)
                     {
                         OnRoomEvent(new RoomEvent(room,ENUM_ROOM_EVENT.SHOW_ERROR));
                         room.Dispose();
                     }
                 }
                 break;
             case TASK_EVENT.TASK_FINISH:
                 {
                     if(task.Name == typeof(GameLoginTask).ToString())
                     {
                         if (OnRoomEvent != null)
                             OnRoomEvent(new RoomEvent(room, ENUM_ROOM_EVENT.SHOW_ROOM));
                     }
                 }
                 break;
             case TASK_EVENT.TASK_EXECUTE:
                 break;
             case TASK_EVENT.TASK_CANCEL:
                 {
                     OnRoomEvent(new RoomEvent(room, ENUM_ROOM_EVENT.SHOW_ERROR, task.Message));
                     room.Dispose();
                 }
                 break;
         }
     });
     return true;
 }