Make one's own arrival non-special

This commit is contained in:
Tony Garnock-Jones 2017-05-12 16:20:38 -04:00
parent daa5336bb2
commit 7303df46ed
6 changed files with 6 additions and 7 deletions

View File

@ -38,7 +38,7 @@
(define (arrive! connection-id)
(call-with-semaphore active-connection-mutex
(lambda ()
(thread-send (current-thread) `(you-are ,connection-id))
(thread-send (current-thread) `(arrived ,connection-id))
(for ([c active-connections])
(thread-send (current-thread) `(arrived ,(cdr c)))
(thread-send (car c) `(arrived ,connection-id)))

View File

@ -26,7 +26,7 @@ class ConnectionHandler(StreamRequestHandler):
self.depart()
def arrive(self):
self.announce('you are %s' % (self.connection_id,))
self.announce('%s arrived' % (self.connection_id,))
with active_connection_mutex:
for c in active_connections:
self.announce('%s arrived' % (c.connection_id,))

View File

@ -50,7 +50,7 @@
(channel-put ch active-connections)
(loop active-connections)]
[`(arrive ,caller ,connection-id)
(thread-send caller `(you-are ,connection-id))
(thread-send caller `(arrived ,connection-id))
(for ([c active-connections])
(thread-send caller `(arrived ,(cdr c)))
(thread-send (car c) `(arrived ,connection-id)))

View File

@ -43,7 +43,7 @@
(let loop ()
(match (thread-receive)
[`(arrive ,caller ,connection-id)
(thread-send caller `(you-are ,connection-id))
(thread-send caller `(arrived ,connection-id))
(for ([c active-connections])
(thread-send caller `(arrived ,(cdr c)))
(thread-send (car c) `(arrived ,connection-id)))

View File

@ -17,6 +17,7 @@ accept_loop(LSock, IndexPid) ->
index(Connected) ->
receive
{arrive, Pid} ->
Pid ! {utterance, {arrive, Pid}},
[begin
P ! {utterance, {arrive, Pid}},
Pid ! {utterance, {arrive, P}}
@ -39,7 +40,6 @@ say(Sock, V) ->
connection(Sock, IndexPid) ->
IndexPid ! {arrive, self()},
say(Sock, {you_are, self()}),
connection_mainloop(Sock, IndexPid).
connection_mainloop(Sock, IndexPid) ->

View File

@ -33,11 +33,10 @@ broadcast str conns = sequence_ $ map sendStr conns
where sendStr (_, hdl) = hPutStrLn hdl str
arrive index name hdl = do
hPutStrLn hdl ("you are " ++ name)
old <- atomically $ do old <- readTVar index
writeTVar index ((name, hdl) : old)
return old
broadcast (name ++ " arrived") old
broadcast (name ++ " arrived") ((name, hdl) : old)
sequence_ $ map (\ (otherName, _) -> hPutStrLn hdl (otherName ++ " arrived")) old
depart index name hdl = do