[rpc/nats]: fix tests to properly hook handlers, handle encodings

This commit is contained in:
41666 2019-06-05 05:27:32 -05:00
parent ddabb03461
commit 5c31920289
No known key found for this signature in database
GPG key ID: DE08FAA8925DC747
2 changed files with 21 additions and 10 deletions

View file

@ -1,5 +1,9 @@
import NATS, { connect, NatsError } from 'nats'
import Bento, { Transport, IBentoSerializer } from '@kayteh/bento'
import console = require('console')
const txtEnc = new TextEncoder()
const txtDec = new TextDecoder()
export default class NATSTransport extends Transport {
NATS: NATS.Client
@ -7,8 +11,8 @@ export default class NATSTransport extends Transport {
constructor (
bento: Bento,
serializer: IBentoSerializer,
addr: string = 'nats://localhsot:4222/',
private prefix: string = ''
addr: string = 'nats://localhost:4222/',
private prefix: string = 'roleypoly'
) {
super(bento, serializer)
@ -19,22 +23,25 @@ export default class NATSTransport extends Transport {
}
public hookHandlers = () => {
for (const svc in this.bento.serviceRegistry.keys) {
this.NATS.subscribe(`${this.prefix}-rpc:${svc}`, this.rpcHandler)
for (let service of this.bento.serviceRegistry.keys()) {
this.NATS.subscribe(`rp:${this.prefix}:${service}`, this.rpcHandler)
}
}
rpcHandler = async (request: ArrayBuffer, replyTo: string) => {
this.NATS.publish(replyTo, await this.receiver({
rpcHandler = async (request: string, replyTo: string) => {
// console.log('rpcHandler', { request, replyTo })
const output = await this.receiver({
ctx: {},
buffer: request
}))
buffer: txtEnc.encode(request)
})
this.NATS.publish(replyTo, txtDec.decode(output))
}
sender (data: ArrayBuffer, { service }: { service: string }): Promise<ArrayBuffer> {
return new Promise((resolve, reject) => {
this.NATS.requestOne(`${this.prefix}-rpc:${service}`, data, 5000, (incoming: NatsError | Buffer) => {
this.NATS.requestOne(`rp:${this.prefix}:${service}`, txtDec.decode(data), 5000, (incoming: NatsError | ArrayBuffer) => {
if (incoming instanceof NatsError) {
console.error('NATSError', incoming)
reject(incoming)
return
}

View file

@ -9,13 +9,17 @@ const getCC = () => {
const bento2 = new Bento()
const tt = new NATSTransport(bento, new JSONSerializer({ verbose: true }), 'nats://localhost:4222/', '' + NOW)
const tt2 = new NATSTransport(bento2, new JSONSerializer({ verbose: true }), 'nats://localhost:4222/', '' + NOW)
bento.transport = tt
bento2.transport = tt
bento2.transport = tt2
bento.service(MockBackendClient.__SERVICE__, MockBackendServer)
const cc = bento2.client(MockBackendClient)
tt.hookHandlers()
tt2.hookHandlers()
return cc
}