Skip to content

Latest commit

 

History

History
87 lines (68 loc) · 2.13 KB

File metadata and controls

87 lines (68 loc) · 2.13 KB

Spec uses names like get_vote_target,
but they should be converted to getVoteTarget.
Yes, text search doesn't work.


Module system uses subscriptions and messages.
For example:

struct Message { ... };

struct IModule {
  // Send `Message` to subscription
  virtual void dispatchMessage(std::shared_ptr<const Message> message) = 0;

  // Received `Message` from subscription
  virtual void onMessage(std::shared_ptr<const Message> message) = 0;
};
struct Module : IModule {
  SimpleSubscription<Message> subscription_message_;

  void start() {
    subscription_message_.subscribe(*se_manager_, module_internal);
  }

  void dispatchMessage(std::shared_ptr<const Message> message) override {
    log("dispatch Message");
    dispatchDerive(subscription, message);
  }

  void onMessage(std::shared_ptr<const Message> message) override;
};
void Module::onMessage(std::shared_ptr<const Message> message) {
  log("received Message");
}

That code may look like boilerplate and duplicate message type name,
but don't try to simplify it using macro.
The following code is forbidden and will not pass PR review.

struct Message { ... };

struct IModule {
  // Send `Message` to subscription
  VIRTUAL_DISPATCH(Message);

  // Received `Message` from subscription
  VIRTUAL_ON_DISPATCH(Message);
};
struct Module : IModule {
  ON_DISPATCH_SUBSCRIPTION(Message);

  void start() {
    ON_DISPATCH_SUBSCRIBE(Message);
  }

  DISPATCH_OVERRIDE(Message) {
    log("dispatch Message");
    dispatchDerive(subscription, message);
  }

  ON_DISPATCH_OVERRIDE(Message);
};
ON_DISPATCH_IMPL(Module, Message) {
  log("received Message");
}

Don't try to preserve type name case in variable or member name.
Yes, it breaks relation between type name and field name.
Yes, you need to change case manually.
The following code is forbidden and will not pass PR review.

SimpleSubscription<Message> subscription_Message_;

Don't try to separate type name in function name.
The following code is forbidden and will not pass PR review.

void dispatch_Message(std::shared_ptr<const Message> message);