EOS 学習メモ:EOSIO_DISPATCH 編 の続き。
今回から数回は custom dispatcher 編として、dispatcher のカスタマイズパターンについて、なぜカスタマイズする必要があるのかを意識しながら学習していく。なお、チュートリアルとしてはこれが最後の項目になる。
まず初回は、そもそも EOSIO_DISPATCH
が生成する dispatcher がどうなっているのかをより具体的に把握する。
ということで、EOSIO_DISPATCH
macro に頼らず、それと同じ処理をする dispatcher を実装した contract を書くと、こんな感じ になる。dispatcher だけ抜き出すと以下。
extern "C" {
void apply(uint64_t receiver, uint64_t code, uint64_t action) {
if (code == receiver) {
switch (action) {
case name("a").value:
execute_action(name(receiver), name(code), &test::a);
break;
case name("b").value:
execute_action(name(receiver), name(code), &test::b);
break;
case name("c").value:
execute_action(name(receiver), name(code), &test::c);
break;
}
}
}
};
特にわかりにくい処理はないかなと思う。action
を switch
に渡してあげて、対応する action handler を呼び出しているだけ。なお、action handler の呼び出しには execute_action()
が使われており、その実装は こんな感じ になっているので、第 1 引数と第 2 引数には apply
action handler の引数である receiver
と code
をそのまま渡し、第 3 引数には呼び出したい action handler を渡してあげればよい模様。
今回はここまで。
Translator screwed up the wordings. But, keep it up.
Posted using Partiko Android
Thanks for using eSteem!
Your post has been voted as a part of eSteem encouragement program. Keep up the good work! Install Android, iOS Mobile app or Windows, Mac, Linux Surfer app, if you haven't already!
Learn more: https://esteem.app
Join our discord: https://discord.gg/8eHupPq