MCPcopy
hub / github.com/tsrpc/tsrpc / parseServerOutout

Method parseServerOutout

src/models/TransportDataUtil.ts:68–149  ·  view source on GitHub ↗
(tsbuffer: TSBuffer, serviceMap: ServiceMap, buf: Uint8Array)

Source from the content-addressed store, hash-verified

66 }
67
68 static parseServerOutout(tsbuffer: TSBuffer, serviceMap: ServiceMap, buf: Uint8Array): ParsedServerOutput {
69 let serverOutputData: ServerOutputData;
70 try {
71 serverOutputData = this.transportCoder.decode(buf, 'ServerOutputData') as ServerOutputData;
72 }
73 catch (e) {
74 throw new TsrpcError('Cannot parse server output data', {
75 code: 'PARSE_SERVER_OUTPUT_ERR',
76 innerError: e,
77 });
78 }
79
80 let serviceId = serverOutputData[0];
81 let buffer = serverOutputData[1];
82 let apiError = serverOutputData[2];
83 let sn = serverOutputData[3] || 0;
84
85 let service = serviceMap.id2Service[serviceId];
86 if (!service) {
87 throw new Error(`Cannot find service ID: ${serviceId}`)
88 }
89
90 if (service.type === 'msg') {
91 if (!buffer) {
92 throw new Error('Empty msg buffer');
93 }
94 let msg: unknown;
95 try {
96 msg = tsbuffer.decode(buffer, service.msg);
97 }
98 catch (e) {
99 throw new TsrpcError('Cannot parse msg body', {
100 code: 'PARSE_MSG_BODY_ERR',
101 service: service,
102 innerError: e,
103 buf: buffer
104 });
105 }
106
107 return {
108 type: 'msg',
109 service: service,
110 msg: msg
111 }
112 }
113 else {
114 if (apiError) {
115 return {
116 type: 'api',
117 service: service,
118 isSucc: false,
119 error: apiError,
120 sn: sn
121 }
122 }
123 else {
124 if (!buffer) {
125 throw new Error('Empty res buffer');

Callers 2

callApiMethod · 0.80
_onBufferMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected