{-| Module : EventLoop.Output.SystemMessage Description : Library of all the possible output 'SystemMessage' events in the example implementation. Copyright : (c) Sebastiaan la Fleur, 2014 License : BSD3 Maintainer : sebastiaan.la.fleur@gmail.com Stability : experimental Portability : All This module expresses how the outgoing 'SystemMessage's are modelled in the example implementation. -} module EventLoop.Output.SystemMessage(SystemMessageOut(..)) where import EventLoop.Json import EventLoop.Config import EventLoop.CommonTypes {-| The different possible 'SystemMessageOut's. -} data SystemMessageOut = CanvasSetup Dimension -- ^ Answer to the 'EventLoop.Input.SystemMessage.Setup' containing the dimensions of the canvas that will be used. | Timer Bool -- ^ Request to create a timer at the clientside that will generate a 'EventLoop.Input.SystemMessage.Time' message each \'tick\'. | Close -- ^ A request for the client to completely close the connection to the server. {-| Instance to express how to parse a 'SystemMessageIn' from a JSON formatted 'String'. -} instance JSONAble SystemMessageOut where toJsonMessage (CanvasSetup dim) = JSONObject [(JSONMember sysmessageanswerS (JSONString canvassetupS)), (JSONMember dimensionS (dimensionToJsonMessage dim))] toJsonMessage (Timer bool) = JSONObject [(JSONMember sysmessageanswerS (JSONString timerS)), (JSONMember useS (JSONBool bool))] toJsonMessage (Close) = JSONObject [(JSONMember sysmessageanswerS (JSONString closeS))] -- | Private dimensionToJsonMessage :: Dimension -> JSONMessage dimensionToJsonMessage (w, h) = JSONObject [(JSONMember hS (JSONFloat h)), (JSONMember wS (JSONFloat w))]