예제 #1
0
 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);
 }
예제 #2
0
        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");
        }
예제 #3
0
        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");
        }
예제 #4
0
        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);
        }
예제 #5
0
        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;
            }
        }