diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2022-02-24 02:57:45 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2022-02-24 02:57:45 +0900 |
commit | e8514389ce1904e1f73abb6829b5eb78576fdcd6 (patch) | |
tree | dc93385ea264d42ca6f3b75208f6e73f27c87dc8 | |
parent | 651e6d909bded515841bfeb3fa5c851ac1a7fa60 (diff) | |
download | snag-master.tar.gz |
-rw-r--r-- | server/src/main/kotlin/jp/rhe/snag/server/Event.kt | 4 | ||||
-rw-r--r-- | server/src/main/kotlin/jp/rhe/snag/server/Service.kt | 22 |
2 files changed, 14 insertions, 12 deletions
diff --git a/server/src/main/kotlin/jp/rhe/snag/server/Event.kt b/server/src/main/kotlin/jp/rhe/snag/server/Event.kt index bc42c55..2c66b10 100644 --- a/server/src/main/kotlin/jp/rhe/snag/server/Event.kt +++ b/server/src/main/kotlin/jp/rhe/snag/server/Event.kt @@ -1,6 +1,8 @@ package jp.rhe.snag.server -data class Event(val type: EventType, val content: String) { +import kotlinx.serialization.json.JsonElement + +data class Event(val type: EventType, val content: JsonElement) { val id = idBase++ companion object { diff --git a/server/src/main/kotlin/jp/rhe/snag/server/Service.kt b/server/src/main/kotlin/jp/rhe/snag/server/Service.kt index 49e7f6a..f1d2e38 100644 --- a/server/src/main/kotlin/jp/rhe/snag/server/Service.kt +++ b/server/src/main/kotlin/jp/rhe/snag/server/Service.kt @@ -61,9 +61,9 @@ class Service(val account: Account) { sentEvents += events.size GlobalScope.launch { try { - c.send(Event(EventType.BackfillStart, "")) + c.send(Event(EventType.BackfillStart, JsonNull)) events.forEach { c.send(it) } - c.send(Event(EventType.BackfillFinish, "")) + c.send(Event(EventType.BackfillFinish, JsonNull)) } catch (ignored: ChannelWriteException) { } } @@ -86,7 +86,7 @@ class Service(val account: Account) { private suspend fun doPollingHomeTimeline() { val path = "/1.1/statuses/home_timeline.json" val requestInterval = account.minInterval(path).coerceAtLeast(1.0) - emitEvent(Event(EventType.System, "'home_timeline' polling job started with interval $requestInterval seconds")) + emitEvent(Event(EventType.System, JsonPrimitive("'home_timeline' polling job started with interval $requestInterval seconds"))) doPolling(path, requestInterval, EventType.HomeTimelineTweet) } @@ -94,7 +94,7 @@ class Service(val account: Account) { private suspend fun doPollingMentionsTimeline() { val path = "/1.1/statuses/mentions_timeline.json" val requestInterval = account.minInterval(path).coerceAtLeast(1.0) - emitEvent(Event(EventType.System, "'mentions_timeline' polling job started with interval $requestInterval seconds")) + emitEvent(Event(EventType.System, JsonPrimitive("'mentions_timeline' polling job started with interval $requestInterval seconds"))) doPolling(path, requestInterval, EventType.MentionsTimelineTweet) } @@ -122,12 +122,12 @@ class Service(val account: Account) { twitterApiErrors += 1 if (httpRes.code == 429 /* Too Many Requests */) { - val msg = "$path rate limited; another program using the token? " + + val msg = "$path rate limited; another program using the token?\n" + "limit=${httpRes.headers["x-rate-limit-limit"]}; " + "remaining=${httpRes.headers["x-rate-limit-remaining"]}; " + - "reset=${httpRes.headers["x-rate-limit-reset"]}" + - " (current time: ${System.currentTimeMillis() / 1000})" - emitEvent(Event(EventType.System, msg)) + "reset=${httpRes.headers["x-rate-limit-reset"]}\n" + + "current=${System.currentTimeMillis() / 1000}" + emitEvent(Event(EventType.System, JsonPrimitive(msg))) return@use listOf<JsonObject>() } throw Exception( @@ -154,7 +154,7 @@ class Service(val account: Account) { // 100 is a random safe value if (res.size >= 100) { val msg = "Possible stalled tweets ${lastMax + 1}...$currentMin" - emitEvent(Event(EventType.System, msg)) + emitEvent(Event(EventType.System, JsonPrimitive(msg))) } } @@ -179,7 +179,7 @@ class Service(val account: Account) { // this is probably not worth doing as clients will anyway process // extended_tweet only so it can support >140 characters tweets. - emitEvent(Event(into, JsonObject(obj).toString())) + emitEvent(Event(into, JsonObject(obj))) } lastMax = res.last()["id"]!!.jsonPrimitive.long } catch (e: Exception) { @@ -322,7 +322,7 @@ class Service(val account: Account) { println("feedWebhook: webhook event for unknown user: $forUserId: $body") return } - service.emitEvent(Event(EventType.WebhookEvent, body)) + service.emitEvent(Event(EventType.WebhookEvent, obj)) } suspend fun register(params: Parameters) { |