Fix received callback, minor change to NetworkTest

This commit is contained in:
Stephen Seo 2019-03-06 13:23:22 +09:00
parent aab8cfe407
commit 4be79ace7c
3 changed files with 48 additions and 5 deletions

View file

@ -279,7 +279,11 @@ void UDPC_check_events(UDPC_Context *ctx)
{ {
UDPC_INTERNAL_PacketInfo *pinfo = UDPC_Deque_index_ptr( UDPC_INTERNAL_PacketInfo *pinfo = UDPC_Deque_index_ptr(
ctx->receivedPackets, sizeof(UDPC_INTERNAL_PacketInfo), x); ctx->receivedPackets, sizeof(UDPC_INTERNAL_PacketInfo), x);
ctx->callbackReceived(ctx->callbackReceivedUserData, pinfo->data, pinfo->size); ctx->callbackReceived(
ctx->callbackReceivedUserData,
pinfo->addr,
pinfo->data,
pinfo->size);
free(pinfo->data); free(pinfo->data);
} }
UDPC_Deque_clear(ctx->receivedPackets); UDPC_Deque_clear(ctx->receivedPackets);

View file

@ -39,14 +39,14 @@ typedef void (*UDPC_callback_connected)(void*, uint32_t);
*/ */
typedef void (*UDPC_callback_disconnected)(void*, uint32_t); typedef void (*UDPC_callback_disconnected)(void*, uint32_t);
/// (void *userData, char *packetData, uint32_t packetSize) /// (void *userData, uint32_t address, char *packetData, uint32_t packetSize)
/*! /*!
* The data pointed to by the packetData argument is to data internally managed * The data pointed to by the packetData argument is to data internally managed
* by the UDPC_Context. It will change every time this callback is called so do * by the UDPC_Context. It will change every time this callback is called so do
* not depend on it persisting. This means you should copy the data out of it * not depend on it persisting. This means you should copy the data out of it
* when the callback is invoked and work with the copied data. * when the callback is invoked and work with the copied data.
*/ */
typedef void (*UDPC_callback_received)(void*, char*, uint32_t); typedef void (*UDPC_callback_received)(void*, uint32_t, char*, uint32_t);
/// This struct should not be used outside of this library /// This struct should not be used outside of this library
typedef struct { typedef struct {

View file

@ -9,6 +9,7 @@ typedef struct
{ {
int isConnected; int isConnected;
int hasConnectedOnce; int hasConnectedOnce;
uint32_t addr;
} TestContext; } TestContext;
void printUsage() void printUsage()
@ -21,6 +22,7 @@ void conCallback(void *userdata, uint32_t addr)
TestContext *ctx = userdata; TestContext *ctx = userdata;
ctx->isConnected = 1; ctx->isConnected = 1;
ctx->hasConnectedOnce = 1; ctx->hasConnectedOnce = 1;
ctx->addr = addr;
printf("Connected callback called\n"); printf("Connected callback called\n");
} }
@ -31,8 +33,33 @@ void discCallback(void *userdata, uint32_t addr)
printf("Disconnected callback called\n"); printf("Disconnected callback called\n");
} }
void recCallback(void *userdata, char *data, uint32_t size) void recCallback(void *userdata, uint32_t addr, char *data, uint32_t size)
{ {
TestContext *ctx = userdata;
if(ctx->addr == addr && size == 7 && data[6] == '\0')
{
printf("Got %s\n", data);
}
}
void updateSendBuffer(uint32_t *index, char *buffer)
{
++(*index);
if(*index >= 26 * 26 * 26 * 26 * 26 * 26)
{
*index = 0;
}
uint32_t temp;
for(int x = 0; x < 6; ++x)
{
temp = 1;
for(int y = 0; y < x; ++y)
{
temp *= 26;
}
buffer[x] = (*index / temp) % 26 + 'a';
}
} }
int main(int argc, char** argv) int main(int argc, char** argv)
@ -44,6 +71,13 @@ int main(int argc, char** argv)
uint16_t listenPort = 0; uint16_t listenPort = 0;
TestContext testCtx = {0, 0}; TestContext testCtx = {0, 0};
uint32_t sendIndex = 0;
char sendBuffer[7] = {
'a', 'a', 'a',
'a', 'a', 'a',
'\0'
};
--argc; ++argv; --argc; ++argv;
while(argc > 0) while(argc > 0)
{ {
@ -99,7 +133,7 @@ int main(int argc, char** argv)
UDPC_set_logging_type(ctx, 4); UDPC_set_logging_type(ctx, 4);
UDPC_set_callback_connected(ctx, conCallback, &testCtx); UDPC_set_callback_connected(ctx, conCallback, &testCtx);
UDPC_set_callback_disconnected(ctx, discCallback, &testCtx); UDPC_set_callback_disconnected(ctx, discCallback, &testCtx);
UDPC_set_callback_received(ctx, recCallback, NULL); UDPC_set_callback_received(ctx, recCallback, &testCtx);
while(UDPC_get_error(ctx) == UDPC_SUCCESS) while(UDPC_get_error(ctx) == UDPC_SUCCESS)
{ {
if(isClient && testCtx.isConnected == 0) if(isClient && testCtx.isConnected == 0)
@ -108,6 +142,11 @@ int main(int argc, char** argv)
} }
if(isThreaded == 0) { UDPC_update(ctx); } if(isThreaded == 0) { UDPC_update(ctx); }
UDPC_check_events(ctx); UDPC_check_events(ctx);
if(testCtx.isConnected != 0 && UDPC_get_queue_send_available(ctx, testCtx.addr) > 0)
{
UDPC_queue_send(ctx, testCtx.addr, 0, sendBuffer, 7);
updateSendBuffer(&sendIndex, sendBuffer);
}
thrd_sleep(&(struct timespec){0, 16666666}, NULL); thrd_sleep(&(struct timespec){0, 16666666}, NULL);
if(testCtx.hasConnectedOnce != 0 && testCtx.isConnected == 0) if(testCtx.hasConnectedOnce != 0 && testCtx.isConnected == 0)
{ {