@@ -72,6 +72,12 @@ class MessageService : public MemoryManaged {
7272public: 
7373    MessageService (Context& context);
7474
75+     //  handle Requests from the OCPP Server
76+     bool  registerOperation (const  char  *operationType, Operation* (*createOperationCb)(Context& context));
77+     bool  registerOperation (const  char  *operationType, void  (*onRequest)(const  char  *operationType, const  char  *payloadJson, void  **userStatus, void  *userData), int (*writeResponse)(const  char  *operationType, char  *buf, size_t  size, void  *userStatus, void  *userData), void (*finally)(const  char  *operationType, void  *userStatus, void  *userData) = nullptr, void *userData = nullptr);
78+     bool  setOnReceiveRequest (const  char  *operationType, void  (*onRequest)(const  char  *operationType, const  char  *payloadJson, void  *userData), void *userData = nullptr);
79+     bool  setOnSendConf (const  char  *operationType, void  (*onConfirmation)(const  char  *operationType, const  char  *payloadJson, void  *userData), void *userData = nullptr);
80+ 
7581    bool  setup ();
7682
7783    void  loop (); // polls all reqQueues and decides which request to send (if any)
@@ -80,15 +86,14 @@ class MessageService : public MemoryManaged {
8086    bool  sendRequest (std::unique_ptr<Request> request); // send an OCPP operation request to the server; adds request to default queue
8187    bool  sendRequestPreBoot (std::unique_ptr<Request> request); // send an OCPP operation request to the server; adds request to preBootQueue
8288
83-     //  handle Requests from the OCPP Server
84-     bool  registerOperation (const  char  *operationType, Operation* (*createOperationCb)(Context& context));
85-     bool  registerOperation (const  char  *operationType, void  (*onRequest)(const  char  *operationType, const  char  *payloadJson, void  **userStatus, void  *userData), int (*writeResponse)(const  char  *operationType, char  *buf, size_t  size, void  *userStatus, void  *userData), void (*finally)(const  char  *operationType, void  *userStatus, void  *userData) = nullptr, void *userData = nullptr);
86-     bool  setOnReceiveRequest (const  char  *operationType, void  (*onRequest)(const  char  *operationType, const  char  *payloadJson, void  *userData), void *userData = nullptr);
87-     bool  setOnSendConf (const  char  *operationType, void  (*onConfirmation)(const  char  *operationType, const  char  *payloadJson, void  *userData), void *userData = nullptr);
88- 
8989    //  process message from server ("message" = serialized Request or Confirmation)
9090    bool  receiveMessage (const  char * payload, size_t  length);
9191
92+     //  Undo `registerOperation()`, `setOnReceiveRequest()` and `setOnSendConf()` for specific operation type.
93+     //  Necessary to re-register different operation handler after `mo_setup()`. MO will clear all registered
94+     //  handlers during `mo_deinitialize()` automatically.
95+     void  clearRegisteredOperation (const  char  *operationType);
96+ 
9297    //  Outgoing Requests are handled in separate queues.
9398    void  addSendQueue (RequestQueue* sendQueue);
9499    void  setPreBootSendQueue (VolatileRequestQueue *preBootQueue);
0 commit comments