static bool8 NPClientGetSRAMFromServer (void) { if (!npclient.online) return (false); NPNotification("Client: Receiving SRAM from server...", -1); if (NPClientGetMesFromServer() != kNPServerSRAMWillSend) { NPError("Client: Failed to receive messsage from server.", 5501); return (false); } if (NPClientSendMesToServer(kNPClientSRAMWaiting) == false) { NPError("Client: Failed to send messsage to server.", 5502); return (false); } uint8 mes[4]; uint32 sramsize; if (socket_read(npclient.socket, mes, 4) != 4) { NPError("Client: Failed to receive SRAM size from server.", 5503); return (false); } sramsize = READ_LONG(mes + 0); if (sramsize != (uint32) (Memory.SRAMSize ? (1 << (Memory.SRAMSize + 3)) * 128 : 0)) { NPError("Client: SRAM size mismatch.", 5504); return (false); } if (sramsize && (socket_read(npclient.socket, Memory.SRAM, sramsize) != (int) sramsize)) { NPError("Server: Failed to receive SRAM from server.", 5505); return (false); } if (NPClientSendMesToServer(kNPClientSRAMLoaded) == false) { NPError("Client: Failed to send messsage to server.", 5506); return (false); } NPNotification("Client: Received SRAM from server.", -1); return (true); }
static bool8 NPClientGetPlayerListFromServer (void) { if (!npclient.online) return (false); NPNotification("Client: Receiving player list from server...", -1); if (NPClientGetMesFromServer() != kNPServerPlayerWillSend) { NPError("Client: Failed to receive messsage from server.", 5701); return (false); } if (NPClientSendMesToServer(kNPClientPlayerWaiting) == false) { NPError("Client: Failed to send messsage to server.", 5702); return (false); } for (int i = 0; i < NP_MAX_PLAYERS; i++) { uint8 mes[10]; uint32 l; if (socket_read(npclient.socket, mes, 10) != 10) { NPError("Client: Failed to receive messsage from server.", 5703); return (false); } npcinfo[i].ready = READ_BYTE(mes + 1); npcinfo[i].player = READ_LONG(mes + 2); l = READ_LONG(mes + 6); if (l && (socket_read(npclient.socket, (uint8 *) npcinfo[i].name, l) != (int) l)) { NPError("Client: Failed to receive messsage from server.", 5704); return (false); } npcinfo[i].name[l] = 0; } npclient.numplayers = 0; for (int i = 0; i < NP_MAX_PLAYERS; i++) if (npcinfo[i].ready) npclient.numplayers++; NPNotification("Client: Received player list from server.", -1); NPNotification("Client: Number of players: %d", npclient.numplayers); return (true); }
static bool8 NPClientGetROMInfoFromServer(void) { if (!npclient.online) return (false); NPNotification("Client: Receiving ROM information from server...", -1); if (NPClientGetMesFromServer() != kNPServerROMInfoWillSend) { NPError("Client: Failed to receive messsage from server.", 5201); return (false); } if (NPClientSendMesToServer(kNPClientROMInfoWaiting) == false) { NPError("Client: Failed to send messsage to server.", 5202); return (false); } uint8 mes[16]; uint32 l; if (socket_read(npclient.socket, mes, 16) != 16) { NPError("Client: Failed to receive ROM information from server.", 5203); return (false); } nprominfo.crc32 = READ_LONG(mes + 0); nprominfo.input = READ_LONG(mes + 4); //reserved1 = READ_BYTE(mes + 8); //reserved2 = READ_BYTE(mes + 9); //reserved3 = READ_BYTE(mes + 10); //reserved4 = READ_BYTE(mes + 11); l = READ_LONG(mes + 12); if (socket_read(npclient.socket, (uint8 *) nprominfo.fname, l) != (int) l) { NPError("Client: Failed to receive ROM name from server.", 5204); return (false); } nprominfo.fname[l] = 0; nprominfo.length = l; NPNotification("Client: Received ROM information from server.", -1); return (true); }
static bool8 NPClientROMReadyToServer (void) { if (!npclient.online) return (false); NPNotification("Client: Sending ROM ready sign to server...", -1); if (NPClientSendMesToServer(kNPClientROMOpened) == false) { NPError("Client: Failed to send messsage to server.", 5401); return (false); } NPNotification("Client: Sent ROM ready sign to server.", -1); return (true); }
static bool8 NPClientSendNameToServer (void) { if (!npclient.online) return (false); NPNotification("Client: Sending player name to server...", -1); if (NPClientGetMesFromServer() != kNPServerNameRequest) { NPError("Client: Failed to receive messsage from server.", 5101); return (false); } uint8 mes[4]; uint32 l; l = strlen(npclient.name); WRITE_LONG(mes + 0, l); if (socket_write(npclient.socket, mes, 4) != 4) { NPError("Client: Failed to send name size to server.", 5102); return (false); } if (socket_write(npclient.socket, (uint8 *) npclient.name, l) != (int) l) { NPError("Client: Failed to send name to server.", 5103); return (false); } if (NPClientGetMesFromServer() != kNPServerNameReceived) { NPError("Client: Failed to receive messsage from server.", 5104); return (false); } if (NPClientSendMesToServer(kNPClientNameSent) == false) { NPError("Client: Failed to send messsage to server.", 5105); return (false); } NPNotification("Client: Sent player name to server.", -1); return (true); }
bool8 NPClientNetPlayWaitStart (void) { NPNotification("Client: Waiting start flag...", -1); if (NPClientSendMesToServer(kNPClientStartWait) == false) { NPError("Client: Failed to send messsage to server.", 5801); return (false); } if (NPClientGetMesFromServer() != kNPServerStart) { NPError("Client: Failed to send messsage to server.", 5802); return (false); } npclient.phasecount = 0; npclient.header = 0; sem_post(csempad); NPNotification("Client: Netplay started.", -1); return (true); }