Tinder / Scarlet

A Retrofit inspired WebSocket client for Kotlin, Java, and Android
Other
3.2k stars 236 forks source link

set the url of connect #187

Open gzhhong opened 3 years ago

gzhhong commented 3 years ago

Hello all, I am working on Android by kotlin to develop a client receiving websocket message. The server team provides sample in python showing that the server side will assign a new url like ws://domain.name/connect/79004032-a52c-4c1a-b305-be12de925318, and the client should call websockets.connect (websockets is a python library) to this url. I didn't find the equivalent function of "connect" in scarlet, when the "connect" action is executed by scarlet and how to define the url of this function? and I am wondering how can I define the url in the functions of my interface by annotation, like what we can do in retrofit, @Url on the paramters of the function. Take the example of url ws://domain.name/connect/79004032-a52c-4c1a-b305-be12de925318, I want to do something in this way:

  @Provides
  @Singleton
  fun provideScarlet(okHttpClient: OkHttpClient) : Scarlet {
    val scarletInstance = Scarlet.Builder()
      .webSocketFactory(okHttpClient.newWebSocketFactory("ws://domain.name"))
      .addMessageAdapterFactory(GsonMessageAdapter.Factory())
      .addStreamAdapterFactory(CoroutinesStreamAdapterFactory())
      .build()
    return scarletInstance
  }
  @Provides
  @Singleton
  fun provideMyWebSocketService(scarlet: Scarlet) : MyWebSocketService {
    return scarlet.create(MyWebSocketService::class.java)
  }

in MyWebSocketService.kt, I want to define function in this way:

interface MyWebSocketService {
        @Receive
        fun observeWebSocketEvent(@Url url = "/connect/79004032-a52c-4c1a-b305-be12de925318"): Sequence<WebSocket.Event>
        @Receive
        fun observeNews(): Sequence<List<News>>
}

Is there a way to do so in scarlet? Another question, is it possible to use the viewModel lifecycle as lifecycle of my scarlet service?

Thanks,

James

Warhedgehog commented 2 years ago

Did you ever find a solution ?