Assert parse failures
Some messages with emojii aren't parsing, log and discard them.
This commit is contained in:
parent
af382bfc34
commit
5d347b2ba8
|
@ -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 }>
|
||||
]
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue