//有发送或是接收网络的成功事件,证明连接是正常的。 void on_active(Socket *socket) { if(check_in(socket)) { //将socket放到_online_queue队列的队尾 socket->_last_active_time = time(0); _online_queue.erase(socket); _online_queue.push(socket); } dlog2("WARN: EventBaseSockMgr::on_active"); }
//socket断开 void on_closed(Socket *socket) { if (check_in(socket)) { _sockets.erase(socket); _online_queue.erase(socket); _waiting_queue.push(socket); } dlog2("WARN: EventBaseSockMgr::on_closed"); }
//tcpserver接收到新的连接 void on_new_connection(Socket *socket) { socket->_last_active_time = time(0); if(!check_in(socket)) { _sockets.insert(socket); _online_queue.push(socket); } dlog2("WARN: EventBaseSockMgr::on_new_connection"); }
void on_connect_fail(Socket *socket) { dlog2("WARN: on_connect_fail"); this->on_closed(socket); }
void vdp1_cmdt_sprite_draw(struct vdp1_cmdt *cmdt, const struct vdp1_cmdt_sprite *sprite) { bool scale; uint16_t zp; switch (sprite->cs_type) { case CMDT_TYPE_NORMAL_SPRITE: cmdt->cmd_ctrl = 0x0000; cmdt->cmd_pmod = (sprite->cs_mode.raw & 0x9FFF) ^ 0x00C0; cmdt->cmd_xa = sprite->cs_position.x; cmdt->cmd_ya = sprite->cs_position.y; break; case CMDT_TYPE_SCALED_SPRITE: zp = sprite->cs_zoom_point.enable ? dlog2(sprite->cs_zoom_point.raw & ~0x0010) : 0x0000; cmdt->cmd_ctrl = (zp << 8) | 0x0001; cmdt->cmd_pmod = sprite->cs_mode.raw; scale = zp == 0x0000; if (scale) { /* Scale with two vertices, A and C. No zoom point */ cmdt->cmd_xa = sprite->cs_vertex.a.x; cmdt->cmd_ya = sprite->cs_vertex.a.y; cmdt->cmd_xc = sprite->cs_vertex.c.x; cmdt->cmd_yc = sprite->cs_vertex.c.y; } else { cmdt->cmd_xa = sprite->cs_zoom.point.x; cmdt->cmd_ya = sprite->cs_zoom.point.y; cmdt->cmd_xb = sprite->cs_zoom.display.x; cmdt->cmd_yb = sprite->cs_zoom.display.y; } break; case CMDT_TYPE_DISTORTED_SPRITE: cmdt->cmd_ctrl = 0x0002; cmdt->cmd_pmod = sprite->cs_mode.raw; /* CCW starting from vertex D */ cmdt->cmd_xd = sprite->cs_vertex.d.x; cmdt->cmd_yd = sprite->cs_vertex.d.y; cmdt->cmd_xa = sprite->cs_vertex.a.x; cmdt->cmd_ya = sprite->cs_vertex.a.y; cmdt->cmd_xb = sprite->cs_vertex.b.x; cmdt->cmd_yb = sprite->cs_vertex.b.y; cmdt->cmd_xc = sprite->cs_vertex.c.x; cmdt->cmd_yc = sprite->cs_vertex.c.y; break; } cmdt->cmd_link = 0x0000; switch (sprite->cs_mode.color_mode) { case 0: cmdt->cmd_colr = sprite->cs_color_bank.raw & 0xFFF0; break; case 1: cmdt->cmd_colr = (uint16_t)((sprite->cs_clut >> 3) & 0xFFFF); break; case 2: cmdt->cmd_colr = sprite->cs_color_bank.raw & 0xFFC0; break; case 3: cmdt->cmd_colr = sprite->cs_color_bank.raw & 0xFF80; break; case 4: cmdt->cmd_colr = sprite->cs_color_bank.raw & 0xFF00; break; case 5: break; } cmdt->cmd_srca = (sprite->cs_char >> 3) & 0xFFFF; cmdt->cmd_size = (((sprite->cs_width >> 3) << 8) | sprite->cs_height) & 0x3FFF; /* Gouraud shading processing is valid when a color calculation * mode is specified */ cmdt->cmd_grda = (sprite->cs_grad >> 3) & 0xFFFF; }