Updated to test defining HTTP-RPC (WIP, client needs more work)

This commit is contained in:
coffeepots 2018-06-21 18:16:06 +01:00
parent b245a23745
commit 501d5a398c

View File

@ -1,36 +1,27 @@
import rpcserver, tables, chronicles
import rpcserver, tables, chronicles, strformat
export rpcserver
type
ClientHttpWrapper* = StreamTransport
RpcHttpServer* = RpcServer[StreamServer]
proc httpHeader(host: string, length: int): string =
"Host: " & host & "Content-Type: application/json-rpc Content-Length: " & $length
proc write(client: ClientHttpWrapper, data: var string): Future[int] =
# TODO: WIP
let d = httpHeader($client.localAddress, data.len) & data
result = client.write(d)
proc readLine(client: ClientHttpWrapper, bytesToRead: int): Future[string] {.async.} =
result = await client.readLine
# TODO: Strip http
proc processHtmlClient*(server: StreamServer, client: ClientHttpWrapper) {.async, gcsafe.} =
await server.processClient(client)
defineRpcTransport(httpProcessClient):
write:
let
msg = &"Host: {$client.localAddress} Content-Type: application/json-rpc Content-Length: {$value.len} {value}"
debug "Http stream", msg = msg
client.write(msg)
proc newRpcHttpServer*(addresses: openarray[TransportAddress]): RpcHttpServer =
## Create new server and assign it to addresses ``addresses``.
result = newRpcServer[StreamServer]().RpcHttpServer
result.addStreamServers(addresses, processHtmlClient)
result = newRpcServer[StreamServer]()
result.addStreamServers(addresses, httpProcessClient)
proc newRpcHttpServer*(addresses: openarray[string]): RpcHttpServer =
## Create new server and assign it to addresses ``addresses``.
result = newRpcServer[StreamServer]().RpcHttpServer
result.addStreamServers(addresses, processHtmlClient)
result = newRpcServer[StreamServer]()
result.addStreamServers(addresses, httpProcessClient)
proc newRpcHttpServer*(address = "localhost", port: Port = Port(8545)): RpcHttpServer =
result = newRpcServer[StreamServer]().RpcHttpServer
result.addStreamServer(address, port, processHtmlClient)
result = newRpcServer[StreamServer]()
result.addStreamServer(address, port, httpProcessClient)