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; }