packages feed

transient 0.1.0.1 → 0.1.0.2

raw patch · 4 files changed

+66/−69 lines, 4 filesdep ~base

Dependency ranges changed: base

Files

Main.hs view
@@ -319,29 +319,31 @@ 
 pubSub=  do
   option "pubs" "an example of publish-subscribe using Event Vars (EVars)"
-  v <- newEVar  :: TransIO (EVar String)
+  v  <- newEVar  :: TransIO (EVar String)
   v' <- newEVar
-  suscribe v v' <|> publish v v'
+  subscribe v v' <|> publish v v'
+  liftIO $ putStrLn ".............."
   where
 
   publish v v'= do
     liftIO $ putStrLn "Enter a message to publish"
-    msg <-  input(const True)
+    msg <-   input(const True)
     writeEVar v msg
     liftIO $ putStrLn "after writing first EVar\n"
     writeEVar v' $ "second " ++ msg
     liftIO $ putStrLn "after writing second EVar\n"
     publish v v'
 
-  suscribe :: EVar String -> EVar String -> TransIO ()
-  suscribe v v'= do
+
+  subscribe :: EVar String -> EVar String -> TransIO ()
+  subscribe v v'= do
        r <- (,) <$> proc1 v  <*>  proc2 v'
        liftIO $ do
              putStr "applicative result= "
              print r
 
-  suscribe2 ::  EVar String -> EVar String -> TransIO ()
-  suscribe2 v v'= do
+  susbcribe2 ::  EVar String -> EVar String -> TransIO ()
+  susbcribe2 v v'= do
         x <- readEVar v
         y <- readEVar v'
         liftIO $ do
move.hs view
@@ -19,41 +19,41 @@ import Data.Typeable
 import Control.Concurrent.STM
 import Data.IORef
-
-
-main= do
-      let port1 = PortNumber 2000
-          port2 = PortNumber 2001
-
-
-      keep $  do
-        conn port1 port1 <|> conn port2 port1
-
-        examples' host port2
-      where
-      host= "localhost"
---      delay = liftIO $ threadDelay 1000000
-      conn p p'=  connect host p host p'
-
-
-
-
-
-test = do
-   args <- getArgs
-   let ports= [("localhost",PortNumber 2000), ("localhost",PortNumber 2001)]
-
-   let [(_,port1), (_,port2)]= if null args  then ports else reverse ports
-   print [port1, port2]
-   let local= "localhost"
-   beamInit port1 $ do
-           logged $ option "call" "call"
-           callTo local port2 (liftIO $ print "HOLA")
-             <|> callTo local port2(liftIO $ print "HELLO")
+-- some tests for distributed computing
 
+--main= do
+--      let port1 = PortNumber 2000
+--          port2 = PortNumber 2001
+--
+--
+--      keep $  do
+--        conn port1 port1 <|> conn port2 port1
+--
+--        examples' host port2
+--      where
+--      host= "localhost"
+----      delay = liftIO $ threadDelay 1000000
+--      conn p p'=  connect host p host p'
+--
+--
+--
+--
+--
+--test = do
+--   args <- getArgs
+--   let ports= [("localhost",PortNumber 2000), ("localhost",PortNumber 2001)]
+--
+--   let [(_,port1), (_,port2)]= if null args  then ports else reverse ports
+--   print [port1, port2]
+--   let local= "localhost"
+--   beamInit port1 $ do
+--           logged $ option "call" "call"
+--           callTo local port2 (liftIO $ print "HOLA")
+--             <|> callTo local port2(liftIO $ print "HELLO")
 
 
-two = do
+-- to be executed with two or more nodes
+main = do
   args <- getArgs
   if length args < 2
     then do
@@ -71,35 +71,27 @@        examples
 
 
-examples = do
-   nodes <- logged getNodes
-   logged $ liftIO $ print $ "NODES=" ++ show  nodes
-   let (remoteHost,remotePort)=  head $ tail nodes
-   examples' remoteHost remotePort
-
-examples' remoteHost remotePort= do
+examples =  do
    logged $ option "main"  "to see the menu" <|> return ""
    r <-logged      $ option "move" "move to another node"
                <|> option "call" "call a function in another node"
                <|> option "chat" "chat"
                <|> option "netev" "events propagating trough the network"
    case r of
-       "call" -> callExample remoteHost remotePort
-       "move" -> moveExample remoteHost remotePort
+       "call" -> callExample
+       "move" -> moveExample
        "chat" -> chat
-       "netev" -> networkEvents remoteHost remotePort
+       "netev" -> networkEvents
 
 data Environ= Environ (IORef String) deriving Typeable
 
-callExample host port= do
+callExample = do
+   nodes <- logged getNodes
+   let Node host port _=  head $ tail nodes
+
    logged $ putStrLnhp  port "asking for the remote data"
    s <- callTo host port $  do
                        putStrLnhp  port "remote callTo request"
-                       Environ environ <- getSData <|> do
-                                    ref <- liftIO $ newIORef "Not Changed"
-                                    let env= Environ ref
-                                    setSData env
-                                    return env
                        liftIO $ readIORef environ
 
 
@@ -108,18 +100,17 @@ 
 environ= unsafePerformIO $ newIORef "Not Changed"
 
-moveExample host port= do
+moveExample = do
+   nodes <- logged getNodes
+   let Node host port _=  head $ tail nodes
+
    putStrLnhp  port "enter a string. It will be inserted in the other node by a migrating program"
    name <- logged $ input (const True)
    beamTo host port
    putStrLnhp  port "moved!"
    putStrLnhp  port $ "inserting "++ name ++" as new data in this node"
-   Environ environ <- getSData <|> do
-                                    ref <- liftIO $ newIORef "Not Changed"
-                                    let env= Environ ref
-                                    setSData env
-                                    return env
 
+
    liftIO $ writeIORef environ name
    return()
 
@@ -132,7 +123,9 @@     clustered $   liftIO $ putStrLn line
 
 
-networkEvents rh rp= do
+networkEvents = do
+     nodes <- logged getNodes
+     let Node rh rp _=  head $ tail nodes
      logged $  do
        putStrLnhp  rp "callTo is not  a simole remote call. it stablish a connection"
        putStrLnhp  rp "between transient processes in different nodes"
src/Transient/Move.hs view
@@ -33,7 +33,7 @@ import Data.Monoid
 import qualified Data.Map as M
 import Data.List (nub,(\\))
-
+import Data.IORef
 
 
 -- | install in a remote node a haskell package with an executable transient service initialized with `listen`
@@ -173,10 +173,10 @@ 
 deriving instance Ord PortID
 
-myNode= unsafePerformIO $ atomically $ newTVar Nothing
+myNode= unsafePerformIO $ newIORef Nothing
 
-setMyNode h p= liftIO $ atomically $ writeTVar  myNode $ Just (h,p)
-getMyNode= Transient $ liftIO $ atomically $ readTVar myNode
+setMyNode h p= liftIO $ writeIORef  myNode $ Just (h,p)
+getMyNode= Transient $ liftIO $ readIORef myNode
 
 getNodes :: TransIO [Node]
 getNodes  = Transient $ Just <$> (liftIO $ atomically $ readTVar  nodeList)
@@ -223,9 +223,11 @@         port <- logged $ return port
         nodes <- callTo remotehost remoteport   $ do
                    clustered $  addNodes [newnode]
-                   getNodes
+                   r <- getNodes
+                   liftIO $ putStrLn $ "Connected to modes: " ++ show r
+                   return r
 
         logged $ addNodes nodes
-        logged $ liftIO $ putStrLn $ "Connected to modes: " ++ show nodes
+
 
 
transient.cabal view
@@ -2,7 +2,7 @@ synopsis: A monad for extensible effects and primitives for unrestricted composability of applications
 homepage: http://www.fpcomplete.com/user/agocorona
 bug-reports: https://github.com/agocorona/transient/issues
-version: 0.1.0.1
+version: 0.1.0.2
 cabal-version: >=1.10
 build-type: Simple
 license: GPL-3