Message Encode(IKMessageContext <TNodeId> context, IKResponse <TNodeId> message)
        {
            var m = new Message();

            m.Response        = new Response();
            m.Response.Header = Encode(context, message.Header);

            switch (message)
            {
            case KResponse <TNodeId, KPingResponse <TNodeId> > ping:
                m.Response.PingResponse = Encode(context, ping.Body.Value);
                break;

            case KResponse <TNodeId, KStoreResponse <TNodeId> > store:
                m.Response.StoreResponse = Encode(context, store.Body.Value);
                break;

            case KResponse <TNodeId, KFindNodeResponse <TNodeId> > findNode:
                m.Response.FindNodeResponse = Encode(context, findNode.Body.Value);
                break;

            case KResponse <TNodeId, KFindValueResponse <TNodeId> > findValue:
                m.Response.FindValueResponse = Encode(context, findValue.Body.Value);
                break;

            default:
                throw new InvalidOperationException();
            }

            return(m);
        }
 Message Encode(IKMessageContext <TNodeId> context, IKMessage <TNodeId> message)
 {
     return(message switch
     {
         IKRequest <TNodeId> request => Encode(context, request),
         IKResponse <TNodeId> response => Encode(context, response),
         _ => throw new InvalidOperationException(),
     });
Esempio n. 3
0
        void Write(Utf8JsonWriter writer, IKMessageContext <TNodeId> context, IKResponse <TNodeId> message)
        {
            writer.WriteStartObject();
            writer.WritePropertyName("header");
            Write(writer, context, message.Header);

            writer.WritePropertyName("status");
            Write(writer, context, message.Status);

            writer.WritePropertyName("type");

            switch (message)
            {
            case KResponse <TNodeId, KPingResponse <TNodeId> > ping:
                writer.WriteStringValue("PING_RESPONSE");
                if (ping.Body.HasValue)
                {
                    writer.WritePropertyName("body");
                    Write(writer, context, ping.Body.Value);
                }
                break;

            case KResponse <TNodeId, KStoreResponse <TNodeId> > store:
                writer.WriteStringValue("STORE_RESPONSE");
                if (store.Body.HasValue)
                {
                    writer.WritePropertyName("body");
                    Write(writer, context, store.Body.Value);
                }
                break;

            case KResponse <TNodeId, KFindNodeResponse <TNodeId> > findNode:
                writer.WriteStringValue("FIND_NODE_RESPONSE");
                if (findNode.Body.HasValue)
                {
                    writer.WritePropertyName("body");
                    Write(writer, context, findNode.Body.Value);
                }
                break;

            case KResponse <TNodeId, KFindValueResponse <TNodeId> > findValue:
                writer.WriteStringValue("FIND_VALUE_RESPONSE");
                if (findValue.Body.HasValue)
                {
                    writer.WritePropertyName("body");
                    Write(writer, context, findValue.Body.Value);
                }
                break;

            default:
                throw new InvalidOperationException();
            }

            writer.WriteEndObject();
        }