Holumbus-Distribution-0.1.0: Examples/Distribution/ChatDChan/MessagesDChan.hs
-- ----------------------------------------------------------------------------
{- |
Module : Holumbus
Copyright : Copyright (C) 2009 Stefan Schmidt
License : MIT
Maintainer : Stefan Schmidt (stefanschmidt@web.de)
Stability : experimental
Portability: portable
Version : 0.1
-}
-- ----------------------------------------------------------------------------
module MessagesDChan
(
ChatRequest(..)
, ChatResponse(..)
, ClientToken
, genClientToken
)
where
import Data.Binary
--import Holumbus.Common.MRBinary
import System.Random
import Holumbus.Distribution.DChan
data ChatRequest
= ReqRegister String (DChan ChatResponse)
| ReqUnregister ClientToken
| ReqMessage ClientToken String
instance Binary ChatRequest where
put(ReqRegister cn ch) = putWord8 1 >> put cn >> put ch
put(ReqUnregister ct) = putWord8 2 >> put ct
put(ReqMessage ct text) = putWord8 3 >> put ct >> put text
get
= do
t <- getWord8
case t of
1 -> get >>= \cn -> get >>= \ch -> return (ReqRegister cn ch)
2 -> get >>= \ct -> return (ReqUnregister ct)
3 -> get >>= \ct -> get >>= \text -> return (ReqMessage ct text)
_ -> error "ChatRequest: wrong encoding"
data ChatResponse
= RspRegister ClientToken
| RspMessage String String
| RspError String
instance Binary ChatResponse where
put(RspRegister ct) = putWord8 1 >> put ct
put(RspMessage cn text) = putWord8 2 >> put cn >> put text
put(RspError e) = putWord8 3 >> put e
get
= do
t <- getWord8
case t of
1 -> get >>= \ct -> return (RspRegister ct)
2 -> get >>= \cn -> get >>= \text -> return (RspMessage cn text)
3 -> get >>= \e -> return (RspError e)
_ -> error "ChatResponse: wrong encoding"
data ClientToken = ClientToken Integer Integer
deriving (Show, Eq, Ord)
instance Binary ClientToken where
put(ClientToken i rnd) = put i >> put rnd
get = get >>= \i -> get >>= \rnd -> return (ClientToken i rnd)
genClientToken :: Integer -> IO ClientToken
genClientToken i
= do
rnd <- getStdRandom (randomR (1,1000000000))
return $ ClientToken i rnd