From 00af116ffaede6349a340f1da2ba5ad0030df46e Mon Sep 17 00:00:00 2001 From: "Marc J. Schmidt" Date: Tue, 3 Oct 2023 04:57:19 +0200 Subject: [PATCH] chore: add rpc-websocket-esm example --- examples/rpc-websockets-esm/README.md | 24 +++++++++++++++++++++++ examples/rpc-websockets-esm/client.ts | 14 +++++++++++++ examples/rpc-websockets-esm/package.json | 19 ++++++++++++++++++ examples/rpc-websockets-esm/server.ts | 19 ++++++++++++++++++ examples/rpc-websockets-esm/tsconfig.json | 11 +++++++++++ 5 files changed, 87 insertions(+) create mode 100644 examples/rpc-websockets-esm/README.md create mode 100644 examples/rpc-websockets-esm/client.ts create mode 100644 examples/rpc-websockets-esm/package.json create mode 100644 examples/rpc-websockets-esm/server.ts create mode 100644 examples/rpc-websockets-esm/tsconfig.json diff --git a/examples/rpc-websockets-esm/README.md b/examples/rpc-websockets-esm/README.md new file mode 100644 index 000000000..54885295e --- /dev/null +++ b/examples/rpc-websockets-esm/README.md @@ -0,0 +1,24 @@ +# Deepkit RPC WebSockets Example + +This example shows how to use the Deepkit RPC over WebSockets. + +## How to run + +First install dependencies + +``` +# postinstall script automatically installs deepkit type compiler +npm install +``` + +Start server: + +``` +./node_modules/.bin/ts-node-esm server.ts +``` + +Start client: + +``` +./node_modules/.bin/ts-node-esm client.ts +``` diff --git a/examples/rpc-websockets-esm/client.ts b/examples/rpc-websockets-esm/client.ts new file mode 100644 index 000000000..3d23646b9 --- /dev/null +++ b/examples/rpc-websockets-esm/client.ts @@ -0,0 +1,14 @@ +import { RpcWebSocketClient } from '@deepkit/rpc'; +import type { Controller } from './server'; + +async function main() { + const client = new RpcWebSocketClient('ws://127.0.0.1:8081'); + const controller = client.controller('/main'); + + const result = await controller.hello('World'); + console.log('result', result); + + client.disconnect(); +} + +main().catch(console.error); diff --git a/examples/rpc-websockets-esm/package.json b/examples/rpc-websockets-esm/package.json new file mode 100644 index 000000000..d4fbafdfe --- /dev/null +++ b/examples/rpc-websockets-esm/package.json @@ -0,0 +1,19 @@ +{ + "name": "deepkit-example-rpc-websockets", + "version": "0.0.1", + "type": "module", + "scripts": { + "postinstall": "deepkit-type-install" + }, + "dependencies": { + "ws": "^8.13.0", + "@deepkit/type": "^1.0.1-alpha.97", + "@deepkit/rpc": "^1.0.1-alpha.97", + "@deepkit/rpc-tcp": "^1.0.1-alpha.97" + }, + "devDependencies": { + "@deepkit/type-compiler": "^1.0.1-alpha.97", + "typescript": "^5.2.2", + "ts-node": "^10.9.1" + } +} diff --git a/examples/rpc-websockets-esm/server.ts b/examples/rpc-websockets-esm/server.ts new file mode 100644 index 000000000..ad644aea0 --- /dev/null +++ b/examples/rpc-websockets-esm/server.ts @@ -0,0 +1,19 @@ +import { rpc, RpcKernel } from '@deepkit/rpc'; +import { RpcWebSocketServer } from '@deepkit/rpc-tcp'; + +@rpc.controller('/main') +export class Controller { + @rpc.action() + hello(title: string): string { + return 'Hello ' + title; + } +} + +const kernel = new RpcKernel(); +kernel.registerController(Controller); +const server = new RpcWebSocketServer(kernel, 'localhost:8081'); +server.start({ + host: '127.0.0.1', + port: 8081, +}); +console.log('Server started at ws://127.0.0.1:8081'); diff --git a/examples/rpc-websockets-esm/tsconfig.json b/examples/rpc-websockets-esm/tsconfig.json new file mode 100644 index 000000000..755dbd57e --- /dev/null +++ b/examples/rpc-websockets-esm/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "strict": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "target": "ES2022", + "esModuleInterop": true, + "module": "esnext" + }, + "reflection": true +}