-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Happstack backend for jmacro-rpc -- @package jmacro-rpc-happstack @version 0.3.2 -- | Happstack backend for JMacro-RPC. -- -- Example usage: -- --
-- module Main where
-- import Network.JMacroRPC.Happstack
-- import Happstack.Server
-- import Language.Javascript.JMacro
-- import Control.Concurrent
-- import Network.JMacroRPC.Base
-- import Text.XHtml hiding(dir)
-- import Control.Monad.Trans(lift)
--
-- jsScript f = script (primHtml f) ! [thetype "text/javascript"]
-- jsScript' = jsScript . show . renderJs
--
-- testPage :: IO (ServerPartT IO Response)
-- testPage = mkConversationPageNoCulling pageFun (newMVar (1::Int)) jRpcs
-- where pageFun js = return $ toResponse $
-- (header << [script ! [src "https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"] << noHtml]) +++
-- jsScript' js +++
-- jsScript' ([jmacro|$(\
-- {
-- var b = $("<button>click me!</button>");
-- $("body").append(b);
-- b.click(\ {
-- var c = getCounter();
-- alert ("counter is: " + c);
-- });
-- });
-- |]);
-- jRpcs = [getCounterRPC]
-- getCounterRPC =
-- toJsonConvRPC "getCounter" $ \s -> (lift $ retRight =<< modifyMVar s (\i -> return (i+1,i)) :: ServerPartT IO (Either String Int))
--
-- retRight :: a -> IO (Either String a)
-- retRight = return . Right
--
-- main = simpleHTTP nullConf =<< testPage
--
--
-- Every invocation of this page (including from the same browser) will
-- have a distinct, stateful, counter, stored server-side.
module Network.JMacroRPC.Happstack
serveRpcs :: (MonadIO m, Functor m, Monad m) => (Int -> (ServerPartT m) s) -> [JsonRPC (ServerPartT m) s] -> ServerPartT m Response
serveSimpleRpcs :: (MonadIO m, Functor m, Monad m) => [JsonRPC (ServerPartT m) ()] -> ServerPartT m Response
-- | This general handler allows explicit culling of conversation state.
mkConversationPage :: (Monad m, Functor m, MonadIO m, MonadPlus m) => IO timestamp -> (IntMap (timestamp, s) -> IO (IntMap (timestamp, s))) -> (JStat -> ServerPartT m Response) -> IO s -> [JsonRPC (ServerPartT m) s] -> IO (ServerPartT m Response)
-- | This simple handler allows conversation state to grow without bounds.
mkConversationPageNoCulling :: (Monad m, Functor m, MonadIO m, MonadPlus m) => (JStat -> ServerPartT m Response) -> IO s -> [JsonRPC (ServerPartT m) s] -> IO (ServerPartT m Response)
-- | Render a Panel as a ServerPartT m Response.
panelToPage :: (Monad m, Functor m, MonadIO m, MonadPlus m) => Maybe String -> String -> Panel (ServerPartT m) -> ServerPartT m Response
instance (ToJSON b, Monad m, Functor m) => ToJsonRPC (ServerPartT m (Either String b)) (ServerPartT m)