diff options
author | joe <joe@jerkface.net> | 2013-06-19 20:51:43 -0400 |
---|---|---|
committer | joe <joe@jerkface.net> | 2013-06-19 20:51:43 -0400 |
commit | dbcf30d5239043eafa1282caa369c577130938e9 (patch) | |
tree | 1789875ed8abcf20e97738b9c243df73097090ad /Presence/main.hs | |
parent | 875f4abfd5853ec3ef189d7e5289ee9cbaa7cc7f (diff) |
Shared hostname with client-connection.
Diffstat (limited to 'Presence/main.hs')
-rw-r--r-- | Presence/main.hs | 22 |
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) | |||
46 | import qualified Prelude | 46 | import qualified Prelude |
47 | import Prelude hiding (putStrLn) | 47 | import Prelude hiding (putStrLn) |
48 | import System.Environment | 48 | import System.Environment |
49 | import qualified Text.Show.ByteString as L | ||
49 | 50 | ||
50 | 51 | ||
51 | data UnixSession = UnixSession { | 52 | data 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 | |||
95 | subscribeToChan 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 | 105 | subscribeToMap 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') <- |