RPC fixes
ci/woodpecker/tag/ociImageTag Pipeline was successful Details

This commit is contained in:
Natty 2024-11-15 23:12:21 +01:00
parent 53149858e9
commit 58266bcb7f
Signed by: natty
GPG Key ID: BF6CB659ADEE60EC
1 changed files with 6 additions and 5 deletions

View File

@ -13,7 +13,7 @@ let serial: bigint = BigInt(0);
const logger = new Logger("RpcLog"); const logger = new Logger("RpcLog");
function getRpcClient(): Socket { function getRpcClient(): Socket {
if (client) { if (client != null) {
return client; return client;
} }
@ -85,6 +85,9 @@ function getRpcClient(): Socket {
} }
async function rpcCall<D, T>(method: string, data: D): Promise<T> { async function rpcCall<D, T>(method: string, data: D): Promise<T> {
const currentSerial = serial;
serial = serial + BigInt(1);
const header = new Uint8Array([77]); const header = new Uint8Array([77]);
const textEncoder = new TextEncoder(); const textEncoder = new TextEncoder();
const methodBuf = textEncoder.encode(method); const methodBuf = textEncoder.encode(method);
@ -99,7 +102,7 @@ async function rpcCall<D, T>(method: string, data: D): Promise<T> {
packetBuf.set(dataBuf, header.length + serialLength + sizeLength + methodBuf.length + sizeLength); packetBuf.set(dataBuf, header.length + serialLength + sizeLength + methodBuf.length + sizeLength);
const packetDataView = new DataView(packetBuf.buffer); const packetDataView = new DataView(packetBuf.buffer);
packetDataView.setBigUint64(header.length, serial); packetDataView.setBigUint64(header.length, currentSerial);
packetDataView.setUint32(header.length + serialLength, methodBuf.length); packetDataView.setUint32(header.length + serialLength, methodBuf.length);
packetDataView.setUint32(header.length + serialLength + sizeLength + methodBuf.length, dataBuf.length); packetDataView.setUint32(header.length + serialLength + sizeLength + methodBuf.length, dataBuf.length);
@ -107,13 +110,11 @@ async function rpcCall<D, T>(method: string, data: D): Promise<T> {
client.write(packetBuf); client.write(packetBuf);
const fut = new Promise((resolve, reject) => { const fut = new Promise((resolve, reject) => {
client.once(`mag-data:${serial}`, resolve); client.once(`mag-data:${currentSerial}`, resolve);
client.once("close", reject); client.once("close", reject);
client.once("error", reject); client.once("error", reject);
}); });
serial++;
const result = await fut as { success: false, data: any } | { success: true, data: T }; const result = await fut as { success: false, data: any } | { success: true, data: T };
if (!result.success) { if (!result.success) {