mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-13 11:19:04 +01:00
[headless] make events related to adding contacts available via websocket
This commit is contained in:
@@ -5,8 +5,14 @@ import io.javalin.Context
|
||||
import io.javalin.NotFoundResponse
|
||||
import org.briarproject.bramble.api.contact.ContactManager
|
||||
import org.briarproject.bramble.api.contact.PendingContactId
|
||||
import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactRemovedEvent
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent
|
||||
import org.briarproject.bramble.api.db.NoSuchContactException
|
||||
import org.briarproject.bramble.api.db.NoSuchPendingContactException
|
||||
import org.briarproject.bramble.api.event.Event
|
||||
import org.briarproject.bramble.api.event.EventListener
|
||||
import org.briarproject.briar.headless.event.WebSocketController
|
||||
import org.briarproject.briar.headless.getContactIdFromPathParam
|
||||
import org.briarproject.briar.headless.getFromJson
|
||||
import org.briarproject.briar.headless.json.JsonDict
|
||||
@@ -16,12 +22,33 @@ import javax.annotation.concurrent.Immutable
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
internal const val EVENT_CONTACT_ADDED_REMOTELY = "ContactAddedRemotelyEvent"
|
||||
internal const val EVENT_PENDING_CONTACT_STATE_CHANGED = "PendingContactStateChangedEvent"
|
||||
internal const val EVENT_PENDING_CONTACT_REMOVED = "PendingContactRemovedEvent"
|
||||
|
||||
@Immutable
|
||||
@Singleton
|
||||
internal class ContactControllerImpl
|
||||
@Inject
|
||||
constructor(private val contactManager: ContactManager, private val objectMapper: ObjectMapper) :
|
||||
ContactController {
|
||||
constructor(
|
||||
private val contactManager: ContactManager,
|
||||
private val objectMapper: ObjectMapper,
|
||||
private val webSocket: WebSocketController
|
||||
) : ContactController, EventListener {
|
||||
|
||||
override fun eventOccurred(e: Event) = when (e) {
|
||||
is ContactAddedRemotelyEvent -> {
|
||||
webSocket.sendEvent(EVENT_CONTACT_ADDED_REMOTELY, e.output())
|
||||
}
|
||||
is PendingContactStateChangedEvent -> {
|
||||
webSocket.sendEvent(EVENT_PENDING_CONTACT_STATE_CHANGED, e.output())
|
||||
}
|
||||
is PendingContactRemovedEvent -> {
|
||||
webSocket.sendEvent(EVENT_PENDING_CONTACT_REMOVED, e.output())
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
|
||||
override fun list(ctx: Context): Context {
|
||||
val contacts = contactManager.contacts.map { contact ->
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.briarproject.briar.headless.contact
|
||||
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import org.briarproject.bramble.api.event.EventBus
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@@ -9,7 +10,11 @@ class HeadlessContactModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
internal fun provideContactController(contactController: ContactControllerImpl): ContactController {
|
||||
internal fun provideContactController(
|
||||
eventBus: EventBus,
|
||||
contactController: ContactControllerImpl
|
||||
): ContactController {
|
||||
eventBus.addListener(contactController)
|
||||
return contactController
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.briarproject.briar.headless.contact
|
||||
|
||||
import org.briarproject.bramble.api.contact.Contact
|
||||
import org.briarproject.bramble.api.contact.event.ContactAddedRemotelyEvent
|
||||
import org.briarproject.bramble.identity.output
|
||||
import org.briarproject.briar.headless.json.JsonDict
|
||||
|
||||
@@ -8,4 +9,6 @@ internal fun Contact.output() = JsonDict(
|
||||
"contactId" to id.int,
|
||||
"author" to author.output(),
|
||||
"verified" to isVerified
|
||||
)
|
||||
)
|
||||
|
||||
internal fun ContactAddedRemotelyEvent.output() = contact.output()
|
||||
|
||||
@@ -1,18 +1,32 @@
|
||||
package org.briarproject.briar.headless.contact
|
||||
|
||||
import org.briarproject.bramble.api.contact.PendingContact
|
||||
import org.briarproject.bramble.api.contact.PendingContactState
|
||||
import org.briarproject.bramble.api.contact.PendingContactState.*
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactRemovedEvent
|
||||
import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent
|
||||
import org.briarproject.briar.headless.json.JsonDict
|
||||
|
||||
internal fun PendingContact.output() = JsonDict(
|
||||
"pendingContactId" to id.bytes,
|
||||
"alias" to alias,
|
||||
"state" to when(state) {
|
||||
WAITING_FOR_CONNECTION -> "waiting_for_connection"
|
||||
CONNECTED -> "connected"
|
||||
ADDING_CONTACT -> "adding_contact"
|
||||
FAILED -> "failed"
|
||||
else -> throw AssertionError()
|
||||
},
|
||||
"state" to state.output(),
|
||||
"timestamp" to timestamp
|
||||
)
|
||||
)
|
||||
|
||||
internal fun PendingContactState.output() = when(this) {
|
||||
WAITING_FOR_CONNECTION -> "waiting_for_connection"
|
||||
CONNECTED -> "connected"
|
||||
ADDING_CONTACT -> "adding_contact"
|
||||
FAILED -> "failed"
|
||||
else -> throw AssertionError()
|
||||
}
|
||||
|
||||
internal fun PendingContactStateChangedEvent.output() = JsonDict(
|
||||
"pendingContactId" to id.bytes,
|
||||
"state" to pendingContactState.output()
|
||||
)
|
||||
|
||||
internal fun PendingContactRemovedEvent.output() = JsonDict(
|
||||
"pendingContactId" to id.bytes
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user