async Task SendResult(string id, object result, bool isJson = false) { var json = isJson ? (string)result : JSON(result); var resp = new BDictionary { ["id"] = new BString(id), ["value"] = new BString(json), ["status"] = StatusMessages.DONE }; await resp.EncodeToAsync(_writer); }
public async Task WriteToStreamAsync() { var dict = new BDictionary { { "key", "value" } }; var stream = new MemoryStream(); await dict.EncodeToAsync(stream); var result = Encoding.UTF8.GetString(stream.ToArray()); result.Should().Be("d3:key5:valuee"); }
public async Task WriteToPipeWriterAsync() { var dict = new BDictionary { { "key", "value" } }; var(reader, writer) = new Pipe(); await dict.EncodeToAsync(writer); reader.TryRead(out var readResult); var result = Encoding.UTF8.GetString(readResult.Buffer.First.Span.ToArray()); result.Should().Be("d3:key5:valuee"); }
async Task SendException(string id, string exMessage, object exData = null) { var resp = new BDictionary { ["ex-message"] = new BString(exMessage), ["status"] = StatusMessages.DONE_ERROR }; if (id != null) { resp["id"] = new BString(id); } if (exData != null) { resp["ex-data"] = new BString(JSON(exData)); } await resp.EncodeToAsync(_writer); }
async Task HandleMessage(string operation, BDictionary msg, CancellationTokenSource cts) { switch (operation) { case "describe": var resp = new BDictionary { ["format"] = new BString("json"), ["namespaces"] = new BList { new BDictionary { ["name"] = new BString("pod.xledger.sql-server"), ["vars"] = new BList { new BDictionary { ["name"] = new BString("execute!") }, new BDictionary { ["name"] = new BString("execute-one!") } } } }, ["ops"] = new BDictionary { ["shutdown"] = new BDictionary() } }; await resp.EncodeToAsync(_writer); break; case "shutdown": cts.Cancel(); break; case "invoke": await HandleInvoke(msg, cts); break; default: break; } }