void SPiece::rotate() { if (active_state == 1) { assign_state(2, s_state2); } else { assign_state(1, s_state1); } }
void JPiece::rotate_back() { if (active_state == 1) { assign_state(4, j_state4); } else if (active_state == 2) { assign_state(1, j_state1); } else if (active_state == 3) { assign_state(2, j_state2); } else { assign_state(3, j_state3); } }
int input_handshake(DESC_DATA *d, char *orig, int bytes) { if (bytes < 4) return 0; if (d->handshake == *(DWORD *) orig) assign_state(d, STATE_MAIN); else { sys_log("SYSERR: BAD_HANDSHAKE: %d %d", d->handshake, *(DWORD *) orig); assign_state(d, STATE_CLOSE); } return 4; }
int input_main(DESC_DATA *d, char *orig, int bytes) { char *data = orig; BYTE header, last_header = 0; WORD desc_num; int i, pl, last_pl = 0, bytes_proceed = 0; for (i = bytes; i > 0;) { header = (BYTE) *(data++); i--; // desc_num 은 2 bytes 이므로 2 bytes 보다 내용이 적으면 bytes 를 리턴 if (i < 2) return (bytes_proceed); desc_num = *((WORD *) data); data += 2; i -= 2; pl = 0; switch (header) { case HEADER_GT_LOGIN: if (!(pl = input_login(d, data, i))) return (bytes_proceed); break; case HEADER_GT_LOGOUT: if (!(pl = input_logout(d, data, i))) return (bytes_proceed); break; default: sys_log("UNKNOWN HEADER: %d, LAST HEADER: %d(%d), REMAIN BYTES: %d, DESC: %d", header, last_header, last_pl, i, d->desc_num); printdata((BYTE*)orig, bytes); assign_state(d, STATE_CLOSE); return (bytes); } data += pl; i -= pl; bytes_proceed += 3 + pl; last_pl = pl; last_header = header; } return (bytes); }
SPiece::SPiece() { assign_state(1, s_state1); }
JPiece::JPiece() { assign_state(1, j_state1); }