From 01aada9e93b5e132635feb214baa5d302c4f2154 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 11:24:05 -0500 Subject: merge mevent server and document mevent_server_helpers --- src/mevent_server_helpers.c | 211 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 src/mevent_server_helpers.c (limited to 'src/mevent_server_helpers.c') diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c new file mode 100644 index 000000000..a5ce595b0 --- /dev/null +++ b/src/mevent_server_helpers.c @@ -0,0 +1,211 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_event_script.h" +#include "mevent.h" +#include "mevent_server.h" + +static u32 mevent_receive_func(struct mevent_srv_sub *); +static u32 mevent_send_func(struct mevent_srv_sub *); + +u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr) +{ + return svr->recvFunc(svr); +} + +u32 mevent_srv_sub_send(struct mevent_srv_sub * svr) +{ + return svr->sendFunc(svr); +} + +void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->sendPlayerNo = sendPlayerNo; + svr->recvPlayerNo = recvPlayerNo; + svr->seqno = 0; + svr->sendCRC = 0; + svr->sendSize = 0; + svr->sendCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvCounter = 0; + svr->sendBfr = NULL; + svr->recvBfr = NULL; + svr->sendFunc = mevent_send_func; + svr->recvFunc = mevent_receive_func; +} + +void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 a1, const void * src, u32 size) +{ + svr->seqno = 0; + svr->sendIdent = a1; + svr->sendCounter = 0; + svr->sendCRC = 0; + if (size != 0) + svr->sendSize = size; + else + svr->sendSize = ME_SEND_BUF_SIZE; + svr->sendBfr = src; +} + +void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void * dest) +{ + svr->seqno = 0; + svr->recvIdent = ident; + svr->recvCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvBfr = dest; +} + +static void mevent_recv_block(u32 recv_idx, void * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[recv_idx], size); +} + +static bool32 mevent_has_received(u32 recv_idx) +{ + if ((GetBlockReceivedStatus() >> recv_idx) & 1) + return TRUE; + else + return FALSE; +} + +static void mevent_reset_recv(u32 recv_idx) +{ + ResetBlockReceivedFlag(recv_idx); +} + +static bool32 mevent_receive_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (mevent_has_received(svr->recvPlayerNo)) + { + mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header)); + svr->recvSize = header.size; + svr->recvCRC = header.crc; + if (svr->recvSize > ME_SEND_BUF_SIZE) + { + sub_80FA190(); + return FALSE; + } + else if (svr->recvIdent != header.ident) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->recvCounter = 0; + mevent_reset_recv(svr->recvPlayerNo); + ++svr->seqno; + } + } + break; + case 1: + if (mevent_has_received(svr->recvPlayerNo)) + { + size_t r3 = svr->recvCounter * 252; + if (svr->recvSize - r3 <= 252) + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, svr->recvSize - r3); + ++svr->recvCounter; + ++svr->seqno; + } + else + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, 252); + ++svr->recvCounter; + } + mevent_reset_recv(svr->recvPlayerNo); + } + break; + case 2: + if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->seqno = 0; + return TRUE; + } + break; + + } + + return FALSE; +} + +static bool32 mevent_send_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (sub_800A4BC()) + { + header.ident = svr->sendIdent; + header.size = svr->sendSize; + header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize); + svr->sendCRC = header.crc; + svr->sendCounter = 0; + SendBlock(0, &header, sizeof(header)); + ++svr->seqno; + } + break; + case 1: + if (sub_800A4BC()) + { + if (mevent_has_received(svr->sendPlayerNo)) + { + size_t r3; + mevent_reset_recv(svr->sendPlayerNo); + r3 = 252 * svr->sendCounter; + if (svr->sendSize - r3 <= 252) + { + SendBlock(0, svr->sendBfr + r3, svr->sendSize - r3); + ++svr->sendCounter; + ++svr->seqno; + } + else + { + SendBlock(0, svr->sendBfr + r3, 252); + ++svr->sendCounter; + } + } + } + break; + case 2: + if (sub_800A4BC()) + { + if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) + sub_80FA190(); + else + ++svr->seqno; + } + break; + case 3: + if (mevent_has_received(svr->sendPlayerNo)) + { + mevent_reset_recv(svr->sendPlayerNo); + svr->seqno = 0; + return TRUE; + } + break; + } + + return FALSE; +} -- cgit v1.2.3 From d4d209428107f0530b4018b6373c6f0bf697793e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 11:24:48 -0500 Subject: also rename r3 in the mevent helper send and recv functions --- src/mevent_server_helpers.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/mevent_server_helpers.c') diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index a5ce595b0..7e2119088 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -115,16 +115,16 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr) case 1: if (mevent_has_received(svr->recvPlayerNo)) { - size_t r3 = svr->recvCounter * 252; - if (svr->recvSize - r3 <= 252) + size_t blocksiz = svr->recvCounter * 252; + if (svr->recvSize - blocksiz <= 252) { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, svr->recvSize - r3); + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz); ++svr->recvCounter; ++svr->seqno; } else { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, 252); + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252); ++svr->recvCounter; } mevent_reset_recv(svr->recvPlayerNo); @@ -171,18 +171,18 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr) { if (mevent_has_received(svr->sendPlayerNo)) { - size_t r3; + size_t blocksiz; mevent_reset_recv(svr->sendPlayerNo); - r3 = 252 * svr->sendCounter; - if (svr->sendSize - r3 <= 252) + blocksiz = 252 * svr->sendCounter; + if (svr->sendSize - blocksiz <= 252) { - SendBlock(0, svr->sendBfr + r3, svr->sendSize - r3); + SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz); ++svr->sendCounter; ++svr->seqno; } else { - SendBlock(0, svr->sendBfr + r3, 252); + SendBlock(0, svr->sendBfr + blocksiz, 252); ++svr->sendCounter; } } -- cgit v1.2.3 From 2fbe528d5e2db723db338cb2d1635f0fa76ac905 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 20:27:35 -0500 Subject: Attempt to give meaningful names to mevent srv fields --- src/mevent_server_helpers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/mevent_server_helpers.c') diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index 7e2119088..35efa68c8 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -41,10 +41,10 @@ void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recv svr->recvFunc = mevent_receive_func; } -void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 a1, const void * src, u32 size) +void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void * src, u32 size) { svr->seqno = 0; - svr->sendIdent = a1; + svr->sendIdent = ident; svr->sendCounter = 0; svr->sendCRC = 0; if (size != 0) -- cgit v1.2.3