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>