namillum
Version:
Bubble Protocol SDK
29 lines (19 loc) • 1.55 kB
Markdown
---
id: core-message-dispatch
title: Message Dispatch and Processing
keywords:
- core
- message
- dispatch
- processing
description: Core protocol design - message dispatch and processing.
---
---
In `src/cmd/main.cpp`, we assign `Zilliqa::Dispatch` as the dispatcher inside `P2PComm::StartMessagePump`. Every message that is read from a socket by `P2PComm` then gets sent to `Zilliqa::Dispatch`.
When Zilliqa starts to process a message, it will call `Zilliqa::ProcessMessage`. The first byte of any message defines the **message type**.
!!! note
The “first byte” here refers to the payload part of a socket message. At the `P2PComm` level, each socket message consists of a predefined header plus the payload.
Depending on the type, `Zilliqa::ProcessMessage` will forward the message to the appropriate handler for it. The list of message types can be found in `enum MessageType` inside `src/common/Messages.h`.
Any class that inherits from `Executable` will be a message handler. For example, type `0x01` means `DIRECTORY`, and this message will be handled by `libDirectoryService`. If you go into `libDirectoryService`, you will find a function `DirectoryService::Execute`.
All classes that inherit from `Executable` will first check the second byte in the message, which defines the **instruction type**. The list of instruction types can be found in `src/common/Messages.h`.
From there, `Execute()` will further forward the message to a private function inside the class, and these functions are all named `ProcessXXX`.