summaryrefslogtreecommitdiff
path: root/Presence/ConsoleWriter.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Presence/ConsoleWriter.hs')
-rw-r--r--Presence/ConsoleWriter.hs16
1 files changed, 11 insertions, 5 deletions
diff --git a/Presence/ConsoleWriter.hs b/Presence/ConsoleWriter.hs
index 3b02dbbc..9b62b00f 100644
--- a/Presence/ConsoleWriter.hs
+++ b/Presence/ConsoleWriter.hs
@@ -1,3 +1,4 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE OverloadedStrings #-} 2{-# LANGUAGE OverloadedStrings #-}
2module ConsoleWriter 3module ConsoleWriter
3 ( ConsoleWriter(cwPresenceChan) 4 ( ConsoleWriter(cwPresenceChan)
@@ -32,7 +33,7 @@ import XMPPServer ( Stanza, makePresenceStanza, JabberShow(..), stanzaType
32import ClientState 33import ClientState
33 34
34data ConsoleWriter = ConsoleWriter 35data ConsoleWriter = ConsoleWriter
35 { cwPresenceChan :: TChan (ClientState,Stanza) 36 { cwPresenceChan :: TMVar (ClientState,Stanza)
36 , csActiveTTY :: TVar Word8 37 , csActiveTTY :: TVar Word8
37 , csUtmp :: TVar (Map Text (TVar (Maybe UtmpRecord))) 38 , csUtmp :: TVar (Map Text (TVar (Maybe UtmpRecord)))
38 , cwClients :: TVar (Map Text ClientState) 39 , cwClients :: TVar (Map Text ClientState)
@@ -85,7 +86,7 @@ onLogin cs start = \e -> do
85 86
86newConsoleWriter :: IO ConsoleWriter 87newConsoleWriter :: IO ConsoleWriter
87newConsoleWriter = do 88newConsoleWriter = do
88 chan <- atomically newBroadcastTChan 89 chan <- atomically $ newEmptyTMVar
89 cs <- atomically $ do 90 cs <- atomically $ do
90 ttyvar <- newTVar 0 91 ttyvar <- newTVar 0
91 utmpvar <- newTVar Map.empty 92 utmpvar <- newTVar Map.empty
@@ -131,6 +132,11 @@ toBCP47 lang = map hyphen $ takeWhile (/='.') lang
131 where hyphen '_' = '-' 132 where hyphen '_' = '-'
132 hyphen c = c 133 hyphen c = c
133 134
135#if MIN_VERSION_base(4,6,0)
136#else
137lookupEnv k = fmap (lookup k) getEnvironment
138#endif
139
134getPreferedLang :: IO Text 140getPreferedLang :: IO Text
135getPreferedLang = do 141getPreferedLang = do
136 lang <- do 142 lang <- do
@@ -234,7 +240,7 @@ newCon log cw activeTTY utmp = do
234 , clientFlags = flgs } 240 , clientFlags = flgs }
235 atomically $ do 241 atomically $ do
236 modifyTVar (cwClients cw) $ Map.insert r client 242 modifyTVar (cwClients cw) $ Map.insert r client
237 writeTChan (cwPresenceChan cw) (client,stanza) 243 putTMVar (cwPresenceChan cw) (client,stanza)
238 loop client tty tu (Just u) 244 loop client tty tu (Just u)
239 where 245 where
240 bstatus r ttynum mtu 246 bstatus r ttynum mtu
@@ -277,7 +283,7 @@ newCon log cw activeTTY utmp = do
277 dup <- cloneStanza stanza 283 dup <- cloneStanza stanza
278 atomically $ do 284 atomically $ do
279 writeTVar (clientStatus client) $ Just dup 285 writeTVar (clientStatus client) $ Just dup
280 writeTChan (cwPresenceChan cw) (client,stanza) 286 putTMVar (cwPresenceChan cw) (client,stanza)
281 log $ status r tty' tu' <> " " <> jid 287 log $ status r tty' tu' <> " " <> jid
282 loop client tty' tu' u 288 loop client tty' tu' u
283 289
@@ -293,6 +299,6 @@ newCon log cw activeTTY utmp = do
293 stanza <- makePresenceStanza "jabber:client" (Just jid) Offline 299 stanza <- makePresenceStanza "jabber:client" (Just jid) Offline
294 atomically $ do 300 atomically $ do
295 modifyTVar (cwClients cw) $ Map.delete (clientResource client) 301 modifyTVar (cwClients cw) $ Map.delete (clientResource client)
296 writeTChan (cwPresenceChan cw) (client,stanza) 302 putTMVar (cwPresenceChan cw) (client,stanza)
297 log $ "Offline " <> jid 303 log $ "Offline " <> jid
298 304