Search
19:20:54
phoe
Shinmera: what does the implementation of your wire protocol do when the input is incomplete?
19:21:06
phoe
for example, "(FOO :BAR BAZ"
19:21:26
phoe
Does it block and wait for more input or does it return some meaningful value and allow the input to be buffered?
19:22:31
Shinmera
you can do a read-timeout on sockets
19:23:45
Shinmera
how would it "return some meaningful value" anyway?
19:24:23
phoe
well, the only meaningful value is NIL, I guess
19:24:36
phoe
but once the socket timeouts, what then?
19:24:36
Shinmera
and how would it know when there's no new data?
19:24:50
Shinmera
a socket timeout signals an error
19:25:16
Shinmera
cl streams have no concept of "is there data or not"
19:25:25
Shinmera
you can only read a stream
19:25:36
phoe
http://clhs.lisp.se/Body/f_listen.htm
19:25:39
Colleen
clhs.lisp.se/Body/f_listen.... Website (HTML), Title: CLHS: Function LISTEN
19:25:46
phoe
Returns true if there is a character immediately available from input-stream; otherwise, returns false.
19:25:51
phoe
listen is intended to be used when input-stream obtains characters from an interactive device such as a keyboard.
19:26:21
phoe
that, and a combo of read-char-no-hang + unread-char
19:26:35
Shinmera
what would be the point of all this?
19:26:49
phoe
so we don't have N threads blocking on N sockets.
19:26:55
Shinmera
either you get a full message or the client is malicious
19:27:14
phoe
or there's packet fragmentation and unreliable connections
19:27:46
Shinmera
the thing about n threads is that it makes things like this real easy and painless
19:28:10
Shinmera
async just shifts the complexity elsewhere
19:29:07
phoe
unless you need to shutdown the thread, at which point it's bt:interrupt-thread which isn't painless
19:29:39
Shinmera
interrupt thread is just me being lazy
19:30:01
phoe
I'll write my thing anyway since I want a properly asynchronous mechanism for my own personal gratification
19:30:58
phoe
how can I use the lread function?
19:31:06
phoe
where is *read-counter* bound?
19:31:32
phoe
https://github.com/Shirakumo/lichat-protocol/blob/master/reader.lisp
19:31:32
Colleen
github.com/Shirakumo/lichat... Website (HTML), Title: lichat-protocol/reader.lisp at master · Shirakumo/lichat-protocol · GitHub
19:31:50
phoe
oh, it's https://github.com/Shirakumo/lichat-protocol/blob/43834064c9e856f5ac865f79da695b34681fdeae/wire.lisp#L37
19:31:51
Colleen
github.com/Shirakumo/lichat... Website (HTML), Title: lichat-protocol/wire.lisp at 43834064c9e856f5ac865f79da695b34681fdeae · Shirakumo/lichat-protocol · G
19:34:33
Shinmera
it's done that way because you might want to read multiple expressions in one message
19:37:33
Shinmera
anyway, I'm getting a headache, so I'm off to bed