diff options
Diffstat (limited to 'Presence/ConsoleWriter.hs')
-rw-r--r-- | Presence/ConsoleWriter.hs | 16 |
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 #-} |
2 | module ConsoleWriter | 3 | module ConsoleWriter |
3 | ( ConsoleWriter(cwPresenceChan) | 4 | ( ConsoleWriter(cwPresenceChan) |
@@ -32,7 +33,7 @@ import XMPPServer ( Stanza, makePresenceStanza, JabberShow(..), stanzaType | |||
32 | import ClientState | 33 | import ClientState |
33 | 34 | ||
34 | data ConsoleWriter = ConsoleWriter | 35 | data 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 | ||
86 | newConsoleWriter :: IO ConsoleWriter | 87 | newConsoleWriter :: IO ConsoleWriter |
87 | newConsoleWriter = do | 88 | newConsoleWriter = 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 | ||
137 | lookupEnv k = fmap (lookup k) getEnvironment | ||
138 | #endif | ||
139 | |||
134 | getPreferedLang :: IO Text | 140 | getPreferedLang :: IO Text |
135 | getPreferedLang = do | 141 | getPreferedLang = 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 | ||