@cloudpss/ubrpc
Version:
53 lines (52 loc) • 1.39 kB
text/typescript
import { RpcServer } from '@cloudpss/ubrpc';
import { interval, take, tap } from 'rxjs';
import { WebSocketServer } from 'ws';
const a = {
greetings: 'Hello, ',
/**
* @inheritdoc
* @param name 名字
*/
async hello(name: string) {
console.log('hello', name);
await Promise.resolve();
return `${this.greetings}${name}`;
},
/**
* @inheritdoc
* @param i 间隔
*/
timer(i?: number) {
return interval(i).pipe(
take(10),
tap({
next: console.log,
complete: () => console.log('complete'),
error: () => console.log('error'),
subscribe: () => console.log('subscribe'),
unsubscribe: () => console.log('unsubscribe'),
finalize: () => console.log('finalize'),
}),
);
},
};
const rpc = new RpcServer(a, async (meta, id) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({});
}, 10);
});
});
const server = new WebSocketServer({
host: 'localhost',
port: 8090,
path: '/',
});
// eslint-disable-next-line @typescript-eslint/no-misused-promises
server.on('connection', async (socket) => {
try {
await rpc.connect(socket as unknown as WebSocket);
} catch (ex) {
console.log(ex);
}
});