Assert parse failures

Some messages with emojii aren't parsing, log and discard them.
This commit is contained in:
Emery Hemingway 2024-05-21 14:47:16 +02:00
parent af382bfc34
commit 5d347b2ba8
2 changed files with 23 additions and 8 deletions

View File

@ -21,6 +21,7 @@ Probably a front for gathering metadata, like Signal, except FSB.
let ?ds = dataspace
? <service-object <daemon telegram_actor> ?cap> [
$cap ? <telegram-recv-error ?err> [ $log ! <log "-" { telegram-recv-error: $err }> ]
$cap <telegram-client { dataspace: $ds }>
]

View File

@ -11,8 +11,10 @@ discard td_execute("""{"@type":"setLogVerbosityLevel", "new_verbosity_level":0}"
type State = ref object
facet: Facet
initialRef: Cap
subscribers: Table[int, Cap]
buffer: StringStream
recvError: Handle
let state = State( buffer: newStringStream() )
# Global state object
@ -20,6 +22,7 @@ let state = State( buffer: newStringStream() )
let actor = bootActor("main") do (turn: Turn):
state.facet = turn.facet
resolveEnvironment(turn) do (turn: Turn; ds: Cap):
state.initialRef = ds
during(turn, ds, TelegramArguments.grabTypeFlat) do (ds: Cap):
# Extern actors assert themselves here and a ClientId
@ -47,14 +50,8 @@ proc recv(state: State; id: int; recvMsg: Value) =
queueTurn(state.facet) do (turn: Turn):
message(turn, subscriber, recvMsg)
while actor.running:
# Poll Syndicate and Telegram
const
syndicateTimeout = some initDuration(seconds = 4)
telegramTimeout = 4.0
syndicate.runOnce(syndicateTimeout)
let cstr = td_receive(telegramTimeout)
if not cstr.isNil:
proc recv(state: State; cstr: cstring) =
try:
var
pr = parsePreserves $cstr
clientId: Value
@ -63,3 +60,20 @@ while actor.running:
recv(state, clientId.register, initRecord("recv", pr))
else:
stderr.writeLine "discarding message without @client_id: ", cstr
except ValueError:
var buf = newSeq[byte](cstr.len)
copyMem(buf[0].addr, cstr[0].addr, buf.len)
var rec = initRecord("telegram-recv-error", buf.toPreserves)
stderr.writeLine rec
queueTurn(state.facet) do (turn: Turn):
replace(turn, state.initialRef, state.recvError, rec)
while actor.running:
# Poll Syndicate and Telegram
const
syndicateTimeout = some initDuration(seconds = 4)
telegramTimeout = 4.0
syndicate.runOnce(syndicateTimeout)
let cstr = td_receive(telegramTimeout)
if not cstr.isNil:
recv(state, cstr)