diff --git a/rpchttpservers.nim b/rpchttpservers.nim new file mode 100644 index 0000000..9c4489f --- /dev/null +++ b/rpchttpservers.nim @@ -0,0 +1,36 @@ +import rpcserver, tables, chronicles +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) + +proc newRpcHttpServer*(addresses: openarray[TransportAddress]): RpcHttpServer = + ## Create new server and assign it to addresses ``addresses``. + result = newRpcServer[StreamServer]().RpcHttpServer + result.addStreamServers(addresses, processHtmlClient) + +proc newRpcHttpServer*(addresses: openarray[string]): RpcHttpServer = + ## Create new server and assign it to addresses ``addresses``. + result = newRpcServer[StreamServer]().RpcHttpServer + result.addStreamServers(addresses, processHtmlClient) + +proc newRpcHttpServer*(address = "localhost", port: Port = Port(8545)): RpcHttpServer = + result = newRpcServer[StreamServer]().RpcHttpServer + result.addStreamServer(address, port, processHtmlClient) +