module Control.ERNet.Foundations.Event where
import Control.ERNet.Foundations.Protocol
import Data.Time.Clock
data ERNetEvent
=
forall q a. (QAProtocol q a, Show q, Show a) =>
ERNetEvQryMade
{
ernetevTime :: UTCTime,
ernetevQryId :: QueryId,
ernetevFromId :: String,
ernetevFromQryId :: QueryId,
ernetevToId :: String,
ernetevQry :: q
}
| forall q a. (QAProtocol q a, Show q, Show a) =>
ERNetEvQryReceived
{
ernetevTime :: UTCTime,
ernetevQryId :: QueryId,
ernetevToId :: String,
ernetevQry :: q
}
| forall q a. (QAProtocol q a, Show q, Show a) =>
ERNetEvAnsMade
{
ernetevTime :: UTCTime,
ernetevQryId :: QueryId,
ernetevToId :: String,
ernetevAns :: a
}
| forall q a. (QAProtocol q a, Show q, Show a) =>
ERNetEvAnsReceived
{
ernetevTime :: UTCTime,
ernetevQryId :: QueryId,
ernetevFromId :: String,
ernetevFromQryId :: QueryId,
ernetevToId :: String,
ernetevAns :: a,
ernetevQry :: q
}
instance Show ERNetEvent where
show (ERNetEvQryMade time qryId from fromQryId to qry) =
"Q{" ++ (showNQ from fromQryId) ++ " --?-> " ++ (showNQ to qryId) ++ "}\n " ++ show qry
show (ERNetEvQryReceived time qryId to qry) =
"QR:" ++ to ++ ": got query " ++ show qryId
show (ERNetEvAnsMade time qryId to ans) =
"A:" ++ (showNQ to qryId) ++ ": " ++ show ans
show (ERNetEvAnsReceived time qryId from fromQryId to ans qry) =
"A{" ++ (showNQ from fromQryId) ++ " <-!-- " ++ (showNQ to qryId) ++ "}\n " ++
show qry ++ "\n ===> " ++ show ans
showNQ procName qryId = procName ++ "." ++ (show qryId)