choonkeat / create-elm-server / Fullstack.Server

Definition


type alias PlatformWorker flags model msg =
{ init : flags -> ( model
, Platform.Cmd.Cmd msg )
, update : msg -> model -> ( model
, Platform.Cmd.Cmd msg )
, subscriptions : model -> Platform.Sub.Sub msg 
}

This is the input to create a Platform.worker


type alias Ports msg x serverMsg =
{ writeResponse : HTTP.Request -> { statusCode : HTTP.StatusCode
, headers : List ( String
, Json.Encode.Value )
, body : String } -> Platform.Cmd.Cmd (FrameworkMsg msg x serverMsg)
, onHttpRequest : (Json.Encode.Value -> FrameworkMsg msg x serverMsg) -> Platform.Sub.Sub (FrameworkMsg msg x serverMsg)
, onWebsocketEvent : (Json.Encode.Value -> FrameworkMsg msg x serverMsg) -> Platform.Sub.Sub (FrameworkMsg msg x serverMsg)
, writeWebsocketMessage : Websocket.Connection -> Websocket.Key -> String -> Platform.Cmd.Cmd (FrameworkMsg msg x serverMsg) 
}

A set of required ports

- `writeResponse` is your function created with your port `onHttpResponse`

    port onHttpResponse : Json.Encode.Value -> Cmd msg

    writeResponse =
        Fullstack.Server.writeResponse onHttpResponse



- `onHttpRequest` is a port defined in your `Server.elm`

    port onHttpRequest : (Json.Encode.Value -> msg) -> Sub msg


type alias Protocol msg x serverMsg clientMsg route header model =
{ headerDecoder : Json.Decode.Decoder header
, clientMsgDecoder : Json.Decode.Decoder clientMsg
, updateFromClient : header -> Time.Posix -> clientMsg -> model -> ( model
, Platform.Task x serverMsg )
, serverMsgEncoder : serverMsg -> Json.Encode.Value
, errorEncoder : x -> Json.Encode.Value
, routeDecoder : Url -> Maybe route
, updateFromRoute : ( HTTP.Method
, header
, Maybe route ) -> Time.Posix -> HTTP.Request -> model -> ( model
, Platform.Cmd.Cmd msg ) 
}

A set of required protocols.

Common Helpers

worker : { worker : PlatformWorker flags model msg, ports : Ports msg x serverMsg, protocol : Protocol msg x serverMsg clientMsg endpoint header model } -> Platform.Program flags (FrameworkModel model header) (FrameworkMsg msg x serverMsg)

Returns a Fullstack.Server program, capable of communicating with Fullstack.Client program

writeResponse : (Json.Encode.Value -> Platform.Cmd.Cmd msg) -> HTTP.Request -> { statusCode : HTTP.StatusCode, headers : List ( String, Json.Encode.Value ), body : String } -> Platform.Cmd.Cmd msg

Use this to wire up your port in your own Server.elm

port onHttpResponse : Json.Encode.Value -> Cmd msg

writeResponse =
    Fullstack.Server.writeResponse onHttpResponse

writeWebsocketMessage : (Json.Encode.Value -> Platform.Cmd.Cmd msg) -> Websocket.Connection -> Websocket.Key -> String -> Platform.Cmd.Cmd msg

Use this to wire up your port in your own Server.elm via websocket

port writeWs : Json.Encode.Value -> Cmd msg

writeWebsocketMessage =
    Fullstack.Server.writeWebsocketMessage writeWs