diff --git a/server/Main.hs b/server/Main.hs index c7f6d06..78b046b 100644 --- a/server/Main.hs +++ b/server/Main.hs @@ -7,6 +7,7 @@ import qualified Network.WebSockets as WS import Forest.Server import Forest.Node import Forest.TreeModule.ConstModule +import Forest.TreeModule.AnimateModule import Forest.TreeModule.ForkModule pingDelay :: Int @@ -25,5 +26,21 @@ main = do putStrLn "Starting server" WS.runServerWithOptions options $ serverApp pingDelay $ forkModule "Forest" [ ProngConstructor $ constModule $ newNode "" "Test" [txtNode "" "Bla"] + , ProngConstructor $ animateModule 200000 + [ newNode "" "Animate" [txtNode "" "|> |", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "|-> |", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "| -> |", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "| -> |", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "| ->|", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "| -|", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "| |", txtNode "" "Ping!"] + , newNode "" "Animate" [txtNode "" "| <|", txtNode "" "Pong!"] + , newNode "" "Animate" [txtNode "" "| <-|", txtNode "" "Pong!"] + , newNode "" "Animate" [txtNode "" "| <- |", txtNode "" "Pong!"] + , newNode "" "Animate" [txtNode "" "| <- |", txtNode "" "Pong!"] + , newNode "" "Animate" [txtNode "" "|<- |", txtNode "" "Pong!"] + , newNode "" "Animate" [txtNode "" "|- |", txtNode "" "Pong!"] + , newNode "" "Animate" [txtNode "" "| |", txtNode "" "Pong!"] + ] , ProngConstructor $ constModule projectDescriptionNode ] diff --git a/src/Forest/TreeModule/AnimateModule.hs b/src/Forest/TreeModule/AnimateModule.hs new file mode 100644 index 0000000..a9ef1da --- /dev/null +++ b/src/Forest/TreeModule/AnimateModule.hs @@ -0,0 +1,26 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Forest.TreeModule.AnimateModule + ( AnimateModule + , animateModule + ) where + +import Control.Concurrent + +import Forest.TreeModule +import Forest.Node +import Forest.Util + +data AnimateModule = AnimateModule + +instance TreeModule AnimateModule where + +animateModule :: Int -> [Node] -> ModuleConstructor AnimateModule +animateModule delay frames sendNode continue = + withThread (animateThread frames) $ continue AnimateModule + where + animateThread [] = sendNode $ txtNode "" "Invalid animation: No frames provided" + animateThread (x:xs) = do + sendNode x + threadDelay delay + animateThread $ xs ++ [x]