Why this don't work.

0 votes
asked Nov 21 in Question / help by Skybuck Flying.
File: govite_rpc_diagram.puml

@startuml
namespace rpc {
    class "API" << (S,Aquamarine) >> {
        + Namespace string
        + Version string
        + Service <font color=blue>interface</font>{}
        + Public bool

    }
    class "BatchElem" << (S,Aquamarine) >> {
        + Method string
        + Args []<font color=blue>interface</font>{}
        + Result <font color=blue>interface</font>{}
        + Error error

    }
    class "Client" << (S,Aquamarine) >> {
        - idCounter uint32
        - connectFunc <font color=blue>func</font>(context.Context) (net.Conn, error)
        - isHTTP bool
        - writeConn net.Conn
        - close <font color=blue>chan</font> <font color=blue>struct</font>{}
        - didQuit <font color=blue>chan</font> <font color=blue>struct</font>{}
        - reconnected <font color=blue>chan</font> net.Conn
        - readErr <font color=blue>chan</font> error
        - readResp <font color=blue>chan</font> []*jsonrpcMessage
        - requestOp <font color=blue>chan</font> *requestOp
        - sendDone <font color=blue>chan</font> error
        - respWait <font color=blue>map</font>[string]*requestOp
        - subs <font color=blue>map</font>[string]*ClientSubscription

        - nextID() json.RawMessage
        - newMessage(method string, paramsIn ...<font color=blue>interface</font>{}) (*jsonrpcMessage, error)
        - send(ctx context.Context, op *requestOp, msg <font color=blue>interface</font>{}) error
        - write(ctx context.Context, msg <font color=blue>interface</font>{}) error
        - reconnect(ctx context.Context) error
        - dispatch(conn net.Conn)
        - closeRequestOps(err error)
        - handleNotification(msg *jsonrpcMessage)
        - handleResponse(msg *jsonrpcMessage)
        - read(conn net.Conn) error
        - sendHTTP(ctx context.Context, op *requestOp, msg <font color=blue>interface</font>{}) error
        - sendBatchHTTP(ctx context.Context, op *requestOp, msgs []*jsonrpcMessage) error

        + SupportedModules() (<font color=blue>map</font>[string]string, error)
        + Close()
        + Call(result <font color=blue>interface</font>{}, method string, args ...<font color=blue>interface</font>{}) error
        + CallContext(ctx context.Context, result <font color=blue>interface</font>{}, method string, args ...<font color=blue>interface</font>{}) error
        + BatchCall(b []BatchElem) error
        + BatchCallContext(ctx context.Context, b []BatchElem) error
        + EthSubscribe(ctx context.Context, channel <font color=blue>interface</font>{}, args ...<font color=blue>interface</font>{}) (*ClientSubscription, error)
        + ShhSubscribe(ctx context.Context, channel <font color=blue>interface</font>{}, args ...<font color=blue>interface</font>{}) (*ClientSubscription, error)
        + Subscribe(ctx context.Context, namespace string, channel <font color=blue>interface</font>{}, args ...<font color=blue>interface</font>{}) (*ClientSubscription, error)

    }
    class "ClientSubscription" << (S,Aquamarine) >> {
        - client *Client
        - etype reflect.Type
        - channel reflect.Value
        - namespace string
        - subid string
        - in <font color=blue>chan</font> json.RawMessage
        - quitOnce sync.Once
        - quit <font color=blue>chan</font> <font color=blue>struct</font>{}
        - errOnce sync.Once
        - err <font color=blue>chan</font> error

        - quitWithError(err error, unsubscribeServer bool)
        - deliver(result json.RawMessage) bool
        - start()
        - forward() (error, bool)
        - unmarshal(result json.RawMessage) (<font color=blue>interface</font>{}, error)
        - requestUnsubscribe() error

        + Err() <font color=blue>chan</font> error
        + Unsubscribe()

    }
    interface "Error"  {
        + Error() string
        + ErrorCode() int

    }
    interface "ErrorWithId"  {
        + Id() <font color=blue>interface</font>{}

    }
    class "StdIOConn" << (S,Aquamarine) >> {
        + Read(b []byte) (int, error)
        + Write(b []byte) (int, error)
        + Close() error
        + LocalAddr() net.Addr
        + RemoteAddr() net.Addr
        + SetDeadline(t time.Time) error
        + SetReadDeadline(t time.Time) error
        + SetWriteDeadline(t time.Time) error

    }
    class "Subscription" << (S,Aquamarine) >> {
        - namespace string
        - err <font color=blue>chan</font> error

        + ID ID

        + Err() <font color=blue>chan</font> error

    }
    class "WebSocketCli" << (S,Aquamarine) >> {
        - u *url.URL
        - c *websocket.Conn
        - srv *Server
        - closed <font color=blue>chan</font> <font color=blue>struct</font>{}
        - nextConnTime time.Time

        + Srv(c *websocket.Conn) error
        + Close()
        + Handle()

    }
    class "callback" << (S,Aquamarine) >> {
        - rcvr reflect.Value
        - method reflect.Method
        - argTypes []reflect.Type
        - hasCtx bool
        - errPos int
        - isSubscribe bool

    }
    class "callbackError" << (S,Aquamarine) >> {
        - message string

        + ErrorCode() int
        + Error() string

    }
    class "executePanicError" << (S,Aquamarine) >> {
        + ErrorCode() int
        + Error() string

    }
    class "httpConn" << (S,Aquamarine) >> {
        - client *http.Client
        - req *http.Request
        - closeOnce sync.Once
        - closed <font color=blue>chan</font> <font color=blue>struct</font>{}

        - doRequest(ctx context.Context, msg <font color=blue>interface</font>{}) (io.ReadCloser, error)

        + LocalAddr() net.Addr
        + RemoteAddr() net.Addr
        + SetReadDeadline( time.Time) error
        + SetWriteDeadline( time.Time) error
        + SetDeadline( time.Time) error
        + Write( []byte) (int, error)
        + Read(b []byte) (int, error)
        + Close() error

    }
    class "httpReadWriteNopCloser" << (S,Aquamarine) >> {
        + Close() error

    }
    class "invalidMessageError" << (S,Aquamarine) >> {
        - message string

        + ErrorCode() int
        + Error() string

    }
    class "invalidParamsError" << (S,Aquamarine) >> {
        - message string

        + ErrorCode() int
        + Error() string

    }
    class "invalidRequestError" << (S,Aquamarine) >> {
        - message string
        - id <font color=blue>interface</font>{}

        + ErrorCode() int
        + Error() string
        + Id() <font color=blue>interface</font>{}

    }
}
"__builtin__.int" #.. "rpc.CodecOption"
"__builtin__.string" #.. "rpc.ID"
"rpc.<font color=blue>map</font>[string]*callback" #.. "rpc.callbacks"
"rpc.<font color=blue>map</font>[string]*callback" #.. "rpc.subscriptions"
"rpc.<font color=blue>map</font>[string]*service" #.. "rpc.serviceRegistry"
"rpc.Error" *-- "rpc.ErrorWithId"
"io.Reader" *-- "rpc.httpReadWriteNopCloser"
"io.Writer" *-- "rpc.httpReadWriteNopCloser"

"rpc.Error" <|-- "rpc.callbackError"
"rpc.Error" <|-- "rpc.executePanicError"
"rpc.Error" <|-- "rpc.invalidMessageError"
"rpc.Error" <|-- "rpc.invalidParamsError"
"rpc.Error" <|-- "rpc.invalidRequestError"
"rpc.ErrorWithId" <|-- "rpc.invalidRequestError"
"rpc.ServerCodec" <|-- "rpc.jsonCodec"
"rpc.Error" <|-- "rpc.jsonError"
"rpc.Error" <|-- "rpc.methodNotFoundError"
"rpc.ErrorWithId" <|-- "rpc.methodNotFoundError"
"rpc.Error" <|-- "rpc.shutdownError"

@enduml

PS U:\UMLExperiment> java -Xmx2048m -jar G:\Tools\PlantUML\plantuml-mit-1.2025.10.jar govite_rpc_diagram.puml
Warning: no image in govite_rpc_diagram.puml
PS U:\UMLExperiment>

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
Anti-spam verification:

[Antispam2 Feature: please please wait 1 or 2 minutes (this message will disappear) before pressing the button otherwise it will fail](--------)
To avoid this verification in future, please log in or register.
...