Пример #1
0
OpcodeTable::OpcodeTable()
{
	DEFINE_HANDLER(C2SHeartbeat, heartbeat_handler);
    DEFINE_HANDLER(C2SLoginReq, user_login_handler);
    DEFINE_HANDLER(C2SRegisterReq, user_register_handler);
    DEFINE_HANDLER(C2SGetPlayerProfileReq, get_player_profile_handler);
    DEFINE_HANDLER(C2SChatMessageReq, chat_message_handler);
    DEFINE_HANDLER(C2SRoomCreateReq, room_create_handler);
    DEFINE_HANDLER(C2SSRoomInfoChangeReq, room_info_change_handler);
    DEFINE_HANDLER(C2SGetRoomListReq, get_room_list_handler);
    DEFINE_HANDLER(C2SEnterRoomReq, enter_room_handler);
}
Пример #2
0
WorldListener::HandlerTable::HandlerTable()
{
#define DEFINE_HANDLER(opc, func) _handlers[opc] = { func, #opc }

    DEFINE_HANDLER(BNET_CHANGE_TOON_ONLINE_STATE, &WorldListener::HandleToonOnlineStatusChange);

#undef DEFINE_HANDLER
}
Пример #3
0
int main(int ac, char** av)
{
#define DEFINE_HANDLER(__s) { #__s, sizeof(#__s) - 1, do_ ## __s }
  static struct
  {
    const char* s;
    uint8_t len;
    void (*f)(const char*, uint8_t);
  } h[] =
  {
    DEFINE_HANDLER(addr),
    DEFINE_HANDLER(rmem),
    DEFINE_HANDLER(wmem),
    DEFINE_HANDLER(rrom),
    DEFINE_HANDLER(llen)
  };

  static const uint8_t n = sizeof(h) / sizeof(h[0]);

  uint8_t i;
  uint8_t len;

  uart_setup();

  ds2433_setup();

  while (1)
  {
    len = read_line(line_buf, sizeof(line_buf));
    if (len == 0) continue ;

    for (i = 0; i != n; ++i)
    {
      if (len < h[i].len) continue ;
      if (is_eq(line_buf, h[i].s, h[i].len)) break ;
    }

    if (i != n) h[i].f(line_buf + h[i].len, len - h[i].len);
    else write_ko();
  }

  return 0;
}