@ -2,62 +2,62 @@
@@ -2,62 +2,62 @@
Copyright © 2010 - 2012 Jon Kristensen .
This file ( EchoClient . hs ) illustrates how to connect , authenticate ,
set a simple presence , receive message stanzas , and echo them back to
whoever is sending them , using Pontarius . The contents of this file
may be used freely , as if it is in the public domain .
This file ( EchoClient . hs ) illustrates how to connect , authenticate , set a simple
presence , receive message stanzas , and echo them back to whoever is sending
them , using Pontarius . The contents of this file may be used freely , as if it is
in the public domain .
- }
module Examples.EchoClient ( ) where
{- # LANGUAGE OverloadedStrings # -}
module Main ( main ) where
import Control.Monad ( forever )
import Control.Monad.IO.Class ( liftIO )
import Data.Maybe ( fromJust , isJust )
import Network.XMPP
import Network.XMPP.IM
-- Server and authentication details.
hostName = " nejla.com "
portNumber = 5222
userName = " test "
password = " "
userName = " jon "
password = " G2D9%b4S3 " -- TODO
-- Start an XMPP session with the default settings, open the streams
-- to the XMPP server, authenticate, send a simple presence, and start
-- the `echo' XMPP thread.
-- TODO: Incomplete code, needs documentation, etc.
main :: IO ()
main = session default $ do
liftIO $ putStrLn " Welcome to the Pontarius EchoClient example! "
openStreamsResult <- openStreams " nejla.com "
case openStreamsResult of
Nothing -> do
liftIO $ putStrLn " Streams opened, now authenticating! "
authenticateResult <- authenticate userName password Nothing
case authenticateResult of
Right _ -> do -- Ignore XMPP address
liftIO $ putStrLn " Authenticating, now sending presence! "
sendPresence Nothing Nothing [] Nothing -- Simple presence
liftIO $ putStrLn " Echoing... "
fork echo
Left error -> liftIO $ putStrLn " Error: " ++ $ show exception
Just error -> liftIO $ putStrLn " Error: " ++ $ show exception
main = do
withNewSession $ do
withConnection $ do
connect " xmpp.nejla.com " " nejla.com "
-- startTLS exampleParams
saslResponse <- auth userName password ( Just " echo-client " )
case saslResponse of
Right _ -> return ()
Left e -> error $ show e
sendPresence presenceOnline
fork echo
return ()
return ()
-- Pull message stanzas, verify that they originate from a `full' XMPP
-- address, and, if so, `echo' the message back.
echo :: XMPPThread () -- TODO: XMPP ()? XMPP?
echo :: XMPP ()
echo = forever $ do
result <- pullMessage
case result of
Right message ->
if messageFrom message /= Nothing && isFull $ messageFrom message
then do
sendMessage ( messageFrom message ) ( messageType message ) Nothing []
liftIO $ putStrLn " Message echoed! "
else liftIO $ putStrLn " Message sender is not set or is bare! "
Left exception -> liftIO $ putStrLn " Error: " ++ $ show exception
result <- pullMessage
case result of
Right message ->
if ( isJust $ messageFrom message ) &&
( isFull $ fromJust $ messageFrom message ) then do
-- TODO: May not set from.
sendMessage $ Message Nothing ( messageTo message ) ( messageFrom message ) Nothing ( messageType message ) ( messagePayload message )
liftIO $ putStrLn " Message echoed! "
else liftIO $ putStrLn " Message sender is not set or is bare! "
Left exception -> liftIO $ putStrLn " Error: "