Skip to content

minisdk/MiniPubSub-Android

Repository files navigation

MiniPubSub-Android

안드로이드와 게임 엔진 간 통신을 위한 pubsub 방식의 라이브러리입니다. 직렬화된 데이터를 발행하여 사전 등록된 구독자들에게 전달합니다.

같이 보기

시작하기

Release 에서 aar을 다운 받아 프로젝트에 임포트합니다. 해당 모듈은 gson 라이브러리를 필요로 합니다.

dependencies{
    // other dependencies
    implementation("com.google.code.gson:gson:2.11.0")
}

주요 요소들

Payload

데이터 저장 객체입니다.
데이터를 json 시리얼라이즈 하여 저장합니다.

Topic

발행 데이터의 타입입니다.
어느 플랫폼(Game or Native) 의 어느 구독자에게 전달할지 결정합니다.

MessageInfo

발행 데이터의 메타데이터입니다.
해당 발행 데이터의 발행자, 목적지(Topic) 같은 데이터 전달에 필요한 정보를 담고 있습니다.

Message

PayloadMessageInfo 객체를 포함한 데이터 전달 객체입니다.

  • key : 발행자와 구독자 사이에 약속한 발행 데이터 식별자입니다.
    발행자가 특정 키로 Topic을 생성해서 메세지를 발행하면, 사전에 해당 키를 구독한 구독자가 메세지를 받습니다.
  • data<T> : 역직렬화된 객체를 반환합니다.

Messenger

Message 객체를 발행(publish) 하거나 구독(subscribe)합니다.
또한 동기적으로 Message 객체를 보내고(sendSync) 처리(handle) 하여 반환합니다.

데이터는 크게 세가지 방법으로 주고 받을 수 있습니다.

  • pub/sub
    • 기본적인 발행/구독 방식. 구독자가 subscribe 하고 발행자가 publish 하여 Message를 주고 받습니다.
  • pub/sub and reply
    • 구독자가 다시 발행자에게 Message를 비동기적으로 전달(reply)합니다.
  • sendSync/handle
    • 발행자가 동기적으로 Message를 전달(sendSync)하고 사전에 처리(handle) 하기로 한 구독자가 그 결과(Payload) 를 반환합니다.

예제 코드

class MyController{
    private const val KEY_SUB_HELLO = "SAMPLE::HELLO"
    private const val KEY_PUB_WORLD = "SAMPLE::WORLD"
    private const val KEY_SUB_HELLO_REPLY_MODE = "SAMPLE::HELLO_REPLY"
    private const val KEY_SYNC_SEND = "SAMPLE::SYNCSEND"
    private val messenger = Messenger()

    init {
        messenger.subscribe(KEY_SUB_HELLO, ::onHello)
        messenger.subscribe(KEY_SUB_HELLO_REPLY_MODE, ::onHelloReplyMode)
        messenger.handle(KEY_SYNC_SEND, ::onSyncSend)
    }

    private fun onHello(message: Message){
        val myData = message.data<MyHelloData>(
        // Do Something...
        messenger.publish(
            Topic(KEY_PUB_WORLD, SdkType.Game),
            Payload(MyWorldData(/* initialize data members */))
        )
    }

    private fun onHelloReplyMode(message: Message){
        val myData = message.data<MyHelloData>()
        // Do Something...
        messenger.reply(
            message.info,
            Payload(MyWorldData(/* initialize data members */))
        )
    }

    private fun onSyncSend(message: Message): Payload{
        val mySyncData = message.data<MySyncData>()
        // Do Something...
        return Payload(MySyncResult(/* initialize data members */)
    }
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published