Skip to content

Commit

Permalink
feat: create signalR client
Browse files Browse the repository at this point in the history
  • Loading branch information
andrea-acampora committed Feb 15, 2023
1 parent bcec1a2 commit 7a49c0e
Showing 1 changed file with 41 additions and 0 deletions.
41 changes: 41 additions & 0 deletions src/main/kotlin/infrastructure/signalr/SignalRClient.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Copyright (c) 2023. Smart Operating Block
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/

package infrastructure.signalr

import application.presenter.EventConsumer
import application.presenter.EventParser
import com.microsoft.signalr.HubConnectionBuilder
import entities.events.Event
import infrastructure.digitaltwins.DTEventParser
import io.reactivex.rxjava3.core.FlowableEmitter

/**
* The consumer of events from a SignalR topic.
*/
class SignalRClient : EventConsumer<String> {

init {
requireNotNull(System.getenv("SIGNALR_CONNECTION_STRING")) {
println("Invalid connection String: please provide a valid connection String!")
}
}

private val connection = HubConnectionBuilder.create(System.getenv("SIGNALR_CONNECTION_STRING")).build()
private val eventParser: EventParser<String> = DTEventParser()

override fun start(emitter: FlowableEmitter<Event<Any>>) {
connection.on("newMessage", { event ->
emitter.onNext(consumeEvent(event))
}, String::class.java)
connection.start()
}

override fun consumeEvent(inputEvent: String): Event<Any> = eventParser.parseEvent(inputEvent)

}

0 comments on commit 7a49c0e

Please # to comment.