mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 21:45:12 +00:00
Removed 'int' from most of networking code
moved -Werror over to 'STRICT'
This commit is contained in:
parent
9512fde4a5
commit
1289f863ca
14 changed files with 45 additions and 38 deletions
|
@ -3952,6 +3952,7 @@
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_collect_coin.c" />
|
<ClCompile Include="..\src\pc\network\packets\packet_collect_coin.c" />
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_collect_item.c" />
|
<ClCompile Include="..\src\pc\network\packets\packet_collect_item.c" />
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_collect_star.c" />
|
<ClCompile Include="..\src\pc\network\packets\packet_collect_star.c" />
|
||||||
|
<ClCompile Include="..\src\pc\network\packets\packet_custom.c" />
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_inside_painting.c" />
|
<ClCompile Include="..\src\pc\network\packets\packet_inside_painting.c" />
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_level_warp.c" />
|
<ClCompile Include="..\src\pc\network\packets\packet_level_warp.c" />
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_object.c" />
|
<ClCompile Include="..\src\pc\network\packets\packet_object.c" />
|
||||||
|
|
|
@ -15006,6 +15006,9 @@
|
||||||
<ClCompile Include="..\src\pc\network\packets\packet_reservation.c">
|
<ClCompile Include="..\src\pc\network\packets\packet_reservation.c">
|
||||||
<Filter>Source Files\src\pc\network\packets</Filter>
|
<Filter>Source Files\src\pc\network\packets</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\pc\network\packets\packet_custom.c">
|
||||||
|
<Filter>Source Files\src\pc\network\packets</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\actors\common0.h">
|
<ClCompile Include="..\actors\common0.h">
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here' -ex 'run' -ex 'quit'
|
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 STRICT=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here' -ex 'run' -ex 'quit'
|
2
debug.sh
2
debug.sh
|
@ -1 +1 @@
|
||||||
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here'
|
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 STRICT=1 && winpty cgdb ./build/us_pc/sm64.us.f3dex2e.exe -ex 'break debug_breakpoint_here'
|
|
@ -1,5 +1,9 @@
|
||||||
set -e
|
set -e
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1
|
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1
|
||||||
|
else
|
||||||
|
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 STRICT=1
|
||||||
|
fi
|
||||||
|
|
||||||
# find file
|
# find file
|
||||||
FILE=./build/us_pc/sm64.us.f3dex2e.exe
|
FILE=./build/us_pc/sm64.us.f3dex2e.exe
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef NETWORK_H
|
#ifndef NETWORK_H
|
||||||
#define NETWORK_H
|
#define NETWORK_H
|
||||||
|
|
||||||
|
#include "PR/ultratypes.h"
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -32,13 +33,13 @@ enum PacketType {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Packet {
|
struct Packet {
|
||||||
int dataLength;
|
u16 dataLength;
|
||||||
int cursor;
|
u16 cursor;
|
||||||
bool error;
|
bool error;
|
||||||
bool reliable;
|
bool reliable;
|
||||||
u16 seqId;
|
u16 seqId;
|
||||||
bool sent;
|
bool sent;
|
||||||
char buffer[PACKET_LENGTH];
|
u8 buffer[PACKET_LENGTH];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SyncObject {
|
struct SyncObject {
|
||||||
|
@ -80,8 +81,8 @@ void network_shutdown(void);
|
||||||
|
|
||||||
// packet read / write
|
// packet read / write
|
||||||
void packet_init(struct Packet* packet, enum PacketType packetType, bool reliable);
|
void packet_init(struct Packet* packet, enum PacketType packetType, bool reliable);
|
||||||
void packet_write(struct Packet* packet, void* data, int length);
|
void packet_write(struct Packet* packet, void* data, u16 length);
|
||||||
void packet_read(struct Packet* packet, void* data, int length);
|
void packet_read(struct Packet* packet, void* data, u16 length);
|
||||||
u32 packet_hash(struct Packet* packet);
|
u32 packet_hash(struct Packet* packet);
|
||||||
bool packet_check_hash(struct Packet* packet);
|
bool packet_check_hash(struct Packet* packet);
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,7 @@ void network_receive_collect_coin(struct Packet* p) {
|
||||||
const void* behavior = get_behavior_from_id(behaviorId);
|
const void* behavior = get_behavior_from_id(behaviorId);
|
||||||
|
|
||||||
// check if remote coin id has already been seen
|
// check if remote coin id has already been seen
|
||||||
for (int i = 0; i < MAX_REMOTE_COIN_IDS; i++) {
|
for (u16 i = 0; i < MAX_REMOTE_COIN_IDS; i++) {
|
||||||
if (remoteCoinIds[i] == remoteCoinId) {
|
if (remoteCoinIds[i] == remoteCoinId) {
|
||||||
// we already saw this coin!
|
// we already saw this coin!
|
||||||
goto SANITY_CHECK_COINS;
|
goto SANITY_CHECK_COINS;
|
||||||
|
|
|
@ -73,7 +73,7 @@ void network_receive_collect_item(struct Packet* p) {
|
||||||
const void* behavior = get_behavior_from_id(behaviorId);
|
const void* behavior = get_behavior_from_id(behaviorId);
|
||||||
|
|
||||||
// check if remote item id has already been seen
|
// check if remote item id has already been seen
|
||||||
for (int i = 0; i < MAX_REMOTE_ITEM_IDS; i++) {
|
for (u16 i = 0; i < MAX_REMOTE_ITEM_IDS; i++) {
|
||||||
if (remoteItemIds[i] == remoteItemId) {
|
if (remoteItemIds[i] == remoteItemId) {
|
||||||
// we already saw this item!
|
// we already saw this item!
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -24,7 +24,7 @@ float player_distance(struct MarioState* marioState, struct Object* o) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void network_clear_sync_objects(void) {
|
void network_clear_sync_objects(void) {
|
||||||
for (int i = 0; i < MAX_SYNC_OBJECTS; i++) {
|
for (u16 i = 0; i < MAX_SYNC_OBJECTS; i++) {
|
||||||
network_forget_sync_object(&syncObjects[i]);
|
network_forget_sync_object(&syncObjects[i]);
|
||||||
}
|
}
|
||||||
nextSyncID = 1;
|
nextSyncID = 1;
|
||||||
|
@ -36,7 +36,7 @@ void network_set_sync_id(struct Object* o) {
|
||||||
// two-player hack
|
// two-player hack
|
||||||
u8 reserveId = (networkLevelLoaded && networkType == NT_CLIENT) ? 1 : 0;
|
u8 reserveId = (networkLevelLoaded && networkType == NT_CLIENT) ? 1 : 0;
|
||||||
|
|
||||||
for (int i = 0; i < MAX_SYNC_OBJECTS; i++) {
|
for (u16 i = 0; i < MAX_SYNC_OBJECTS; i++) {
|
||||||
if (syncObjects[nextSyncID].reserved == reserveId && syncObjects[nextSyncID].o == NULL) { break; }
|
if (syncObjects[nextSyncID].reserved == reserveId && syncObjects[nextSyncID].o == NULL) { break; }
|
||||||
nextSyncID = (nextSyncID + 1) % MAX_SYNC_OBJECTS;
|
nextSyncID = (nextSyncID + 1) % MAX_SYNC_OBJECTS;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ void network_init_object_field(struct Object *o, void* field) {
|
||||||
assert(o->oSyncID != 0);
|
assert(o->oSyncID != 0);
|
||||||
// remember to synchronize this extra field
|
// remember to synchronize this extra field
|
||||||
struct SyncObject* so = &syncObjects[o->oSyncID];
|
struct SyncObject* so = &syncObjects[o->oSyncID];
|
||||||
int index = so->extraFieldCount++;
|
u8 index = so->extraFieldCount++;
|
||||||
so->extraFields[index] = field;
|
so->extraFields[index] = field;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ static void packet_write_object_extra_fields(struct Packet* p, struct Object* o)
|
||||||
packet_write(p, &so->extraFieldCount, sizeof(u8));
|
packet_write(p, &so->extraFieldCount, sizeof(u8));
|
||||||
|
|
||||||
// write the extra field
|
// write the extra field
|
||||||
for (int i = 0; i < so->extraFieldCount; i++) {
|
for (u8 i = 0; i < so->extraFieldCount; i++) {
|
||||||
assert(so->extraFields[i] != NULL);
|
assert(so->extraFields[i] != NULL);
|
||||||
packet_write(p, so->extraFields[i], sizeof(u32));
|
packet_write(p, so->extraFields[i], sizeof(u32));
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ static void packet_read_object_extra_fields(struct Packet* p, struct Object* o)
|
||||||
}
|
}
|
||||||
|
|
||||||
// read the extra fields
|
// read the extra fields
|
||||||
for (int i = 0; i < extraFieldsCount; i++) {
|
for (u8 i = 0; i < extraFieldsCount; i++) {
|
||||||
assert(so->extraFields[i] != NULL);
|
assert(so->extraFields[i] != NULL);
|
||||||
packet_read(p, so->extraFields[i], sizeof(u32));
|
packet_read(p, so->extraFields[i], sizeof(u32));
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,24 +17,24 @@ void packet_init(struct Packet* packet, enum PacketType packetType, bool reliabl
|
||||||
packet->sent = false;
|
packet->sent = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void packet_write(struct Packet* packet, void* data, int length) {
|
void packet_write(struct Packet* packet, void* data, u16 length) {
|
||||||
if (data == NULL) { packet->error = true; return; }
|
if (data == NULL) { packet->error = true; return; }
|
||||||
memcpy(&packet->buffer[packet->cursor], data, length);
|
memcpy(&packet->buffer[packet->cursor], data, length);
|
||||||
packet->dataLength += length;
|
packet->dataLength += length;
|
||||||
packet->cursor += length;
|
packet->cursor += length;
|
||||||
}
|
}
|
||||||
|
|
||||||
void packet_read(struct Packet* packet, void* data, int length) {
|
void packet_read(struct Packet* packet, void* data, u16 length) {
|
||||||
if (data == NULL) { packet->error = true; return; }
|
if (data == NULL) { packet->error = true; return; }
|
||||||
int cursor = packet->cursor;
|
u16 cursor = packet->cursor;
|
||||||
memcpy(data, &packet->buffer[cursor], length);
|
memcpy(data, &packet->buffer[cursor], length);
|
||||||
packet->cursor = cursor + length;
|
packet->cursor = cursor + length;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 packet_hash(struct Packet* packet) {
|
u32 packet_hash(struct Packet* packet) {
|
||||||
u32 hash = 0;
|
u32 hash = 0;
|
||||||
int byte = 0;
|
u16 byte = 0;
|
||||||
for (int i = 0; i < packet->dataLength; i++) {
|
for (u16 i = 0; i < packet->dataLength; i++) {
|
||||||
hash ^= ((u32)packet->buffer[i]) << (8 * byte);
|
hash ^= ((u32)packet->buffer[i]) << (8 * byte);
|
||||||
byte = (byte + 1) % sizeof(u32);
|
byte = (byte + 1) % sizeof(u32);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,12 +24,12 @@ void network_receive_reservation_request(UNUSED struct Packet* p) {
|
||||||
|
|
||||||
void network_send_reservation(void) {
|
void network_send_reservation(void) {
|
||||||
assert(networkType == NT_SERVER);
|
assert(networkType == NT_SERVER);
|
||||||
int clientPlayerIndex = 1; // two-player hack
|
u8 clientPlayerIndex = 1; // two-player hack
|
||||||
|
|
||||||
// find all reserved objects
|
// find all reserved objects
|
||||||
u8 reservedObjs[RESERVATION_COUNT] = { 0 };
|
u8 reservedObjs[RESERVATION_COUNT] = { 0 };
|
||||||
int reservedIndex = 0;
|
u16 reservedIndex = 0;
|
||||||
for (int i = 1; i < MAX_SYNC_OBJECTS; i++) {
|
for (u16 i = 1; i < MAX_SYNC_OBJECTS; i++) {
|
||||||
if (syncObjects[i].reserved == clientPlayerIndex) {
|
if (syncObjects[i].reserved == clientPlayerIndex) {
|
||||||
reservedObjs[reservedIndex++] = i;
|
reservedObjs[reservedIndex++] = i;
|
||||||
if (reservedIndex >= RESERVATION_COUNT) { break; }
|
if (reservedIndex >= RESERVATION_COUNT) { break; }
|
||||||
|
@ -38,7 +38,7 @@ void network_send_reservation(void) {
|
||||||
|
|
||||||
if (reservedIndex < RESERVATION_COUNT) {
|
if (reservedIndex < RESERVATION_COUNT) {
|
||||||
// reserve the rest
|
// reserve the rest
|
||||||
for (int i = MAX_SYNC_OBJECTS - 1; i > 0; i--) {
|
for (u16 i = MAX_SYNC_OBJECTS - 1; i > 0; i--) {
|
||||||
if (syncObjects[i].o != NULL) { continue; }
|
if (syncObjects[i].o != NULL) { continue; }
|
||||||
if (syncObjects[i].reserved != 0) { continue; }
|
if (syncObjects[i].reserved != 0) { continue; }
|
||||||
syncObjects[i].reserved = clientPlayerIndex;
|
syncObjects[i].reserved = clientPlayerIndex;
|
||||||
|
@ -55,18 +55,16 @@ void network_send_reservation(void) {
|
||||||
|
|
||||||
void network_receive_reservation(struct Packet* p) {
|
void network_receive_reservation(struct Packet* p) {
|
||||||
assert(networkType == NT_CLIENT);
|
assert(networkType == NT_CLIENT);
|
||||||
int clientPlayerIndex = 1; // two-player hack
|
u8 clientPlayerIndex = 1; // two-player hack
|
||||||
|
|
||||||
// find all reserved objects
|
// find all reserved objects
|
||||||
u8 reservedObjs[RESERVATION_COUNT] = { 0 };
|
u8 reservedObjs[RESERVATION_COUNT] = { 0 };
|
||||||
packet_read(p, reservedObjs, sizeof(u8) * RESERVATION_COUNT);
|
packet_read(p, reservedObjs, sizeof(u8) * RESERVATION_COUNT);
|
||||||
|
|
||||||
for (int i = 0; i < RESERVATION_COUNT; i++) {
|
for (u16 i = 0; i < RESERVATION_COUNT; i++) {
|
||||||
int index = reservedObjs[i];
|
u16 index = reservedObjs[i];
|
||||||
printf(" %d", index);
|
|
||||||
if (index == 0) { continue; }
|
if (index == 0) { continue; }
|
||||||
if (syncObjects[index].o != NULL) { continue; }
|
if (syncObjects[index].o != NULL) { continue; }
|
||||||
syncObjects[index].reserved = clientPlayerIndex;
|
syncObjects[index].reserved = clientPlayerIndex;
|
||||||
}
|
}
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ static u8 generate_parent_id(struct Object* objects[], u8 onIndex) {
|
||||||
return (u8)o->parentObj->oSyncID;
|
return (u8)o->parentObj->oSyncID;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (u8 i = onIndex; i < onIndex; i--) {
|
for (u8 i = onIndex; i != (u8)-1; i--) {
|
||||||
if (o->parentObj == objects[i]) { return i; }
|
if (o->parentObj == objects[i]) { return i; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ void network_receive_spawn_objects(struct Packet* p) {
|
||||||
packet_read(p, &objectCount, sizeof(u8));
|
packet_read(p, &objectCount, sizeof(u8));
|
||||||
|
|
||||||
// check if remote spawn id has already been seen
|
// check if remote spawn id has already been seen
|
||||||
for (int i = 0; i < MAX_REMOTE_SPAWN_IDS; i++) {
|
for (u16 i = 0; i < MAX_REMOTE_SPAWN_IDS; i++) {
|
||||||
if (remoteSpawnIds[i] == remoteSpawnId) {
|
if (remoteSpawnIds[i] == remoteSpawnId) {
|
||||||
// we already saw this event!
|
// we already saw this event!
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "socket.h"
|
|
||||||
#include "../network.h"
|
#include "../network.h"
|
||||||
|
#include "socket.h"
|
||||||
|
|
||||||
int socket_bind(SOCKET sock, unsigned int port) {
|
int socket_bind(SOCKET sock, unsigned int port) {
|
||||||
struct sockaddr_in rxAddr;
|
struct sockaddr_in rxAddr;
|
||||||
|
@ -16,9 +16,9 @@ int socket_bind(SOCKET sock, unsigned int port) {
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int socket_send(SOCKET sock, struct sockaddr_in* txAddr, char* buffer, int bufferLength) {
|
int socket_send(SOCKET sock, struct sockaddr_in* txAddr, u8* buffer, u16 bufferLength) {
|
||||||
int txAddrSize = sizeof(struct sockaddr_in);
|
int txAddrSize = sizeof(struct sockaddr_in);
|
||||||
int rc = sendto(sock, buffer, bufferLength, 0, (struct sockaddr*)txAddr, txAddrSize);
|
int rc = sendto(sock, (char*)buffer, bufferLength, 0, (struct sockaddr*)txAddr, txAddrSize);
|
||||||
if (rc == SOCKET_ERROR) {
|
if (rc == SOCKET_ERROR) {
|
||||||
printf("%s sendto failed with error: %d\n", NETWORKTYPESTR, SOCKET_LAST_ERROR);
|
printf("%s sendto failed with error: %d\n", NETWORKTYPESTR, SOCKET_LAST_ERROR);
|
||||||
}
|
}
|
||||||
|
@ -26,11 +26,11 @@ int socket_send(SOCKET sock, struct sockaddr_in* txAddr, char* buffer, int buffe
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int socket_receive(SOCKET sock, struct sockaddr_in* rxAddr, char* buffer, int bufferLength, int* receiveLength) {
|
int socket_receive(SOCKET sock, struct sockaddr_in* rxAddr, u8* buffer, u16 bufferLength, u16* receiveLength) {
|
||||||
*receiveLength = 0;
|
*receiveLength = 0;
|
||||||
|
|
||||||
int rxAddrSize = sizeof(struct sockaddr_in);
|
int rxAddrSize = sizeof(struct sockaddr_in);
|
||||||
int rc = recvfrom(sock, buffer, bufferLength, 0, (struct sockaddr*)rxAddr, &rxAddrSize);
|
int rc = recvfrom(sock, (char*)buffer, bufferLength, 0, (struct sockaddr*)rxAddr, &rxAddrSize);
|
||||||
if (rc == SOCKET_ERROR) {
|
if (rc == SOCKET_ERROR) {
|
||||||
int error = SOCKET_LAST_ERROR;
|
int error = SOCKET_LAST_ERROR;
|
||||||
if (error != SOCKET_EWOULDBLOCK && error != SOCKET_ECONNRESET) {
|
if (error != SOCKET_EWOULDBLOCK && error != SOCKET_ECONNRESET) {
|
||||||
|
|
|
@ -9,8 +9,8 @@
|
||||||
|
|
||||||
SOCKET socket_initialize(void);
|
SOCKET socket_initialize(void);
|
||||||
int socket_bind(SOCKET sock, unsigned int port);
|
int socket_bind(SOCKET sock, unsigned int port);
|
||||||
int socket_send(SOCKET sock, struct sockaddr_in* txAddr, char* buffer, int bufferLength);
|
int socket_send(SOCKET sock, struct sockaddr_in* txAddr, u8* buffer, u16 bufferLength);
|
||||||
int socket_receive(SOCKET sock, struct sockaddr_in* rxAddr, char* buffer, int bufferLength, int* receiveLength);
|
int socket_receive(SOCKET sock, struct sockaddr_in* rxAddr, u8* buffer, u16 bufferLength, u16* receiveLength);
|
||||||
void socket_close(SOCKET sock);
|
void socket_close(SOCKET sock);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue