RoomService

룸 관련 기능을 제공합니다.

# Properties

[{"index":"ReadOnlyDictionary InstanceRooms (ReadOnly)","0":"활성화된 모든 인스턴스 룸의 목록입니다."}]

[{"index":"string RoomKey (ReadOnly)","0":"현재 룸의 key입니다. 현재 룸이 인스턴스 룸이면 생성 시 지정한 key 값을, 정적 룸이면 StaticRoomKey와 같은 값을 나타냅니다."}]

[{"index":"string StaticRoomKey (ReadOnly)","0":"정적 룸의 key입니다. 정적 룸의 RoomKey로 사용되는 문자열 상수 (\"__main__\") 입니다."}]

# Methods

[{"index":"InstanceRoom CreateInstanceRoom(string key, table mapNames, float firstUserWaitSeconds = 10) (ServerOnly) (Yield)","0":"key에 해당하는 인스턴스 룸을 생성해 반환합니다. mapNames에 맵 목록을 지정하면 해당 맵들만 생성하고, 비어 있다면 MapComponent의 InstanceMap 프로퍼티가 true인 맵들을 생성합니다. 인스턴스 룸 생성 후 firstUserWaitSeconds 안에 입장하는 첫 유저가 없으면 그 인스턴스 룸은 파괴됩니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"SharedMemoryResultCode DeleteSharedMemoryAndWait(string name) (ServerOnly) (Yield)","0":"공유 메모리를 삭제합니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"void DeleteSharedMemoryAsync(string name, func callbackFunction) (ServerOnly)","0":"공유 메모리를 삭제합니다. 작업이 완료되면 결과 코드와 함께 callbackFunction으로 전달된 함수가 호출됩니다."}]

[{"index":"InstanceRoom GetOrCreateInstanceRoom(string key, float firstUserWaitSeconds = 10) (ServerOnly) (Yield)","0":"key에 해당하는 인스턴스 룸을 얻어오거나 생성해 반환합니다. 생성 후 firstUserWaitSeconds 안에 입장하는 첫 유저가 없으면 그 룸은 파괴됩니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"SharedMemoryResultCode, RoomSharedMemory GetSharedMemory(string name) (ServerOnly)","0":"같은 월드 인스턴스 내 룸끼리 공유하는 공유 메모리 객체를 반환합니다. 같은 이름의 공유 메모리가 이미 존재할 경우 기존 것을 얻어오고, 없을 경우 새로 생성합니다."}]

[{"index":"boolean IsInstanceRoom()","0":"현재 인스턴스 룸인지를 확인합니다."}]

[{"index":"int32 MoveUsersToInstanceRoom(string key, table userIds, string mapName = nil) (ServerOnly) (Yield)","0":"key에 해당하는 인스턴스 룸으로 userId에 해당하는 유저들을 이동시킵니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"int32 MoveUsersToStaticRoom(table userIds, string mapName = nil) (ServerOnly) (Yield)","0":"userIds에 해당하는 유저들을 정적 맵으로 이동시킵니다. mapName을 사용하지 않으면, 시작 맵으로 이동합니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"boolean MoveUserToInstanceRoom(string key, string userId, string mapName = nil) (ServerOnly) (Yield)","0":"key에 해당하는 인스턴스 룸으로 userIds에 해당하는 유저를 이동시킵니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"boolean MoveUserToStaticRoom(string userId, string mapName = nil) (ServerOnly) (Yield)","0":"userId에 해당하는 유저를 정적 맵으로 이동시킵니다. mapName을 사용하지 않으면, 시작 맵으로 이동합니다. 수행하는 동안 스크립트 실행을 중단합니다."}]

[{"index":"SendEventRequestResultCode RequestSendEventToAllRoomsAndWait(EventType sendEvent) (Yield)","0":"이벤트를 모든 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 수행하는 동안 스크립트 실행을 중단합니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다."}]

[{"index":"void RequestSendEventToAllRoomsAsync(EventType sendEvent, func callbackFunction)","0":"이벤트를 모든 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 작업이 완료되면 결과 코드, 이벤트 객체와 함께 callbackFunction으로 전달된 함수가 호출됩니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다."}]

[{"index":"SendEventRequestResultCode RequestSendEventToRoomAndWait(EventType sendEvent, string targetRoomKey) (Yield)","0":"이벤트를 특정 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 수행하는 동안 스크립트 실행을 중단합니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다."}]

[{"index":"void RequestSendEventToRoomAsync(EventType sendEvent, string targetRoomKey, func callbackFunction)","0":"이벤트를 특정 룸에 전송합니다. 수신자는 RoomService에 핸들러를 등록해 이벤트를 수신할 수 있습니다. 작업이 완료되면 결과 코드, 이벤트 객체와 함께 callbackFunction으로 전달된 함수가 호출됩니다. Entity, EntityRef, Component, ComponentRef를 Event에 담아 전송하면 유효하지 않은 값이 전달될 수 있으므로 주의해야 합니다."}]

##### inherited from Service:

[{"index":"EventHandlerBase ConnectEvent(string key, IScriptFunction eventHandler)","0":"이벤트를 연결합니다. 이 서비스에서 타입의 이름이 key인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다."}]

[{"index":"EventHandlerBase ConnectEvent(Type eventType, IScriptFunction eventHandler)","0":"이벤트를 연결합니다. 이 서비스에서 타입이 eventType인 이벤트가 발생하면, 핸들러로 통지받습니다. 핸들러는 event 매개 변수를 전달받습니다."}]

[{"index":"boolean DisconnectEvent(string key, EventHandlerBase eventHandler)","0":"타입의 이름이 key인 이벤트와 핸들러와의 이벤트 연결을 끊습니다."}]

[{"index":"boolean DisconnectEvent(Type eventType, EventHandlerBase eventHandler)","0":"타입이 eventType인 이벤트와 핸들러와의 연결을 끊습니다."}]

[{"index":"void SendEvent(EventType sendEvent)","0":"이벤트를 발생시킵니다."}]

# Events

[{"index":"RoomBeginEvent","0":"룸이 생성될 때 해당 룸에서 발생하는 이벤트입니다."}]

[{"index":"RoomEndEvent","0":"룸이 파괴될 때 해당 룸에서 발생하는 이벤트입니다."}]

# Examples

#### 인스턴스 룸 입장

특정 맵들을 사용하는 인스턴스 룸을 생성하고, 인스턴스 룸의 지정한 맵으로 입장하는 예제입니다.
    
    
    @Component
    script InstanceGameStarter extends Component
        property integer GameIdx = "0"
    
        @ExecSpace("ServerOnly")
        method void EnterGame(table userIds)
        -- 중복되지 않는 인스턴스 룸 식별자를 만듭니다.
        local roomKey = "Game" .. tostring(self.gameIdx)
        self.gameIdx = self.GameIdx + 1
    
        -- 맵 GameMap01, GameMap02를 사용하는 인스턴스 룸을 생성합니다.
        -- 이 맵들은 InstanceMap 속성이 true로 지정되어야 합니다.
        -- 정적 룸에서 실행되어야 합니다.
        local instanceRoom = _RoomService:CreateInstanceRoom(roomKey, {"GameMap01", "GameMap02"})
    
        -- 이미 사용 중인 식별자이거나 자주 요청했을 경우 생성에 실패할 수 있습니다.
        if instanceRoom == nil then
        	log_error("Cannot create instance room. roomKey: " .. roomKey)
        	return
        end
    
        -- 생성된 인스턴스 룸의 특정 맵으로 유저들을 입장시킵니다.
        -- _RoomService:MoveUsersToInstanceRoom() 함수를 사용할 수도 있습니다.
        instanceRoom:MoveUsers(userIds, "GameMap01")
        end
    end
    

#### 정적 룸으로 복귀
    
    
    @Component
    script LobbyReturner extends Component
        @ExecSpace("ServerOnly")
        method void ReturnToLobby(table userIds)
        -- 정적 룸의 특정 맵으로 유저들을 입장시킵니다.
        _RoomService:MoveUsersToStaticRoom(userIds, "LobbyMap")
        end
    end
    

# SeeAlso

  * InstanceMapService
  * [월드 인스턴스](/docs?postId=984)
  * [인스턴스 맵 만들기](/docs?postId=540)
  * [RoomService를 활용해 룸끼리 통신하기](/docs?postId=1035)