| ' Licensed under the Apache License, Version 2.0 (the "License"); |
| ' you may not use this file except in compliance with the License. |
| ' You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 |
| ' Unless required by applicable law or agreed to in writing, software distributed under the License is distributed |
| ' on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ' See the License for the specific language governing permissions and limitations under the License. |
| @startuml |
| class JsonRPCManager { |
| add_handler(name, Func) |
| add_notification_handler(name, Func) |
| rsponse handle_call(request) |
| JsonRPCManager instance() |
| } |
| note left: Singleton class. |
| |
| class Dispatcher { |
| _handlers: std::unordered_map<std::string, InternalHandler> |
| } |
| |
| class InternalHandler { |
| _func: std::variant<std::monostate, Notification, Method, PluginMethod> |
| } |
| |
| class FunctionWrapper { |
| callback: std::function |
| } |
| |
| JsonRPCManager *-- Dispatcher |
| note right: Class that knows how to call each callback handler. Storage class. |
| Dispatcher *-- InternalHandler |
| InternalHandler *-- FunctionWrapper |
| @enduml |