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
|
let ?ds = dataspace
|
||||||
|
|
||||||
? <service-object <daemon telegram_actor> ?cap> [
|
? <service-object <daemon telegram_actor> ?cap> [
|
||||||
|
$cap ? <telegram-recv-error ?err> [ $log ! <log "-" { telegram-recv-error: $err }> ]
|
||||||
$cap <telegram-client { dataspace: $ds }>
|
$cap <telegram-client { dataspace: $ds }>
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,10 @@ discard td_execute("""{"@type":"setLogVerbosityLevel", "new_verbosity_level":0}"
|
||||||
|
|
||||||
type State = ref object
|
type State = ref object
|
||||||
facet: Facet
|
facet: Facet
|
||||||
|
initialRef: Cap
|
||||||
subscribers: Table[int, Cap]
|
subscribers: Table[int, Cap]
|
||||||
buffer: StringStream
|
buffer: StringStream
|
||||||
|
recvError: Handle
|
||||||
|
|
||||||
let state = State( buffer: newStringStream() )
|
let state = State( buffer: newStringStream() )
|
||||||
# Global state object
|
# Global state object
|
||||||
|
@ -20,6 +22,7 @@ let state = State( buffer: newStringStream() )
|
||||||
let actor = bootActor("main") do (turn: Turn):
|
let actor = bootActor("main") do (turn: Turn):
|
||||||
state.facet = turn.facet
|
state.facet = turn.facet
|
||||||
resolveEnvironment(turn) do (turn: Turn; ds: Cap):
|
resolveEnvironment(turn) do (turn: Turn; ds: Cap):
|
||||||
|
state.initialRef = ds
|
||||||
|
|
||||||
during(turn, ds, TelegramArguments.grabTypeFlat) do (ds: Cap):
|
during(turn, ds, TelegramArguments.grabTypeFlat) do (ds: Cap):
|
||||||
# Extern actors assert themselves here and a ClientId
|
# 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):
|
queueTurn(state.facet) do (turn: Turn):
|
||||||
message(turn, subscriber, recvMsg)
|
message(turn, subscriber, recvMsg)
|
||||||
|
|
||||||
while actor.running:
|
proc recv(state: State; cstr: cstring) =
|
||||||
# Poll Syndicate and Telegram
|
try:
|
||||||
const
|
|
||||||
syndicateTimeout = some initDuration(seconds = 4)
|
|
||||||
telegramTimeout = 4.0
|
|
||||||
syndicate.runOnce(syndicateTimeout)
|
|
||||||
let cstr = td_receive(telegramTimeout)
|
|
||||||
if not cstr.isNil:
|
|
||||||
var
|
var
|
||||||
pr = parsePreserves $cstr
|
pr = parsePreserves $cstr
|
||||||
clientId: Value
|
clientId: Value
|
||||||
|
@ -63,3 +60,20 @@ while actor.running:
|
||||||
recv(state, clientId.register, initRecord("recv", pr))
|
recv(state, clientId.register, initRecord("recv", pr))
|
||||||
else:
|
else:
|
||||||
stderr.writeLine "discarding message without @client_id: ", cstr
|
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