summaryrefslogtreecommitdiff
path: root/Presence/main.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2013-06-19 20:51:43 -0400
committerjoe <joe@jerkface.net>2013-06-19 20:51:43 -0400
commitdbcf30d5239043eafa1282caa369c577130938e9 (patch)
tree1789875ed8abcf20e97738b9c243df73097090ad /Presence/main.hs
parent875f4abfd5853ec3ef189d7e5289ee9cbaa7cc7f (diff)
Shared hostname with client-connection.
Diffstat (limited to 'Presence/main.hs')
-rw-r--r--Presence/main.hs22
1 files changed, 13 insertions, 9 deletions
diff --git a/Presence/main.hs b/Presence/main.hs
index 86503a62..e416d7cc 100644
--- a/Presence/main.hs
+++ b/Presence/main.hs
@@ -46,6 +46,7 @@ import Data.ByteString.Lazy.Char8 as L (ByteString,putStrLn)
46import qualified Prelude 46import qualified Prelude
47import Prelude hiding (putStrLn) 47import Prelude hiding (putStrLn)
48import System.Environment 48import System.Environment
49import qualified Text.Show.ByteString as L
49 50
50 51
51data UnixSession = UnixSession { 52data UnixSession = UnixSession {
@@ -79,14 +80,19 @@ instance XMPPSession UnixSession where
79 ) 80 )
80 muid 81 muid
81 rsc <- readIORef (unix_resource s) 82 rsc <- readIORef (unix_resource s)
82 let suf = maybe "" ("/"<++>) rsc 83 -- let jid = user <++> "@" <++> host <++?> "/" <++$> rsc
83 jid = user <++> "@" <++> host <++> suf 84 L.putStrLn $ "SESSION: jid " <++> L.show (JID (Just user) host rsc)
84 L.putStrLn $ "SESSION: jid " <++> jid 85 return (JID (Just user) host rsc)
85 return jid
86 closeSession _ = L.putStrLn "SESSION: close" 86 closeSession _ = L.putStrLn "SESSION: close"
87 subscribe session Nothing = do 87 subscribe session Nothing = do
88 let tmvar = greedySubscriber (presence_state session) 88 let tmvar = greedySubscriber (presence_state session)
89 chan <- atomically $ 89 atomically $ subscribeToChan tmvar
90 subscribe session (Just jid) = do
91 let tvar = subscriberMap (presence_state session)
92 atomically $ subscribeToMap tvar jid
93
94
95subscribeToChan tmvar =
90 (do (cnt,chan) <- takeTMVar tmvar 96 (do (cnt,chan) <- takeTMVar tmvar
91 putTMVar tmvar (cnt+1,chan) 97 putTMVar tmvar (cnt+1,chan)
92 chan' <- dupTChan chan 98 chan' <- dupTChan chan
@@ -95,10 +101,8 @@ instance XMPPSession UnixSession where
95 (do chan <- newTChan 101 (do chan <- newTChan
96 putTMVar tmvar (1,chan) 102 putTMVar tmvar (1,chan)
97 return chan ) 103 return chan )
98 return chan 104
99 subscribe session (Just jid) = do 105subscribeToMap tvar jid = do
100 let tvar = subscriberMap (presence_state session)
101 atomically $ do
102 subs <- readTVar tvar 106 subs <- readTVar tvar
103 let mbchan = Map.lookup jid subs 107 let mbchan = Map.lookup jid subs
104 (chan,subs') <- 108 (chan,subs') <-