change queues, run exec speed optimizations
This commit is contained in:
@@ -4,13 +4,13 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "wsServer/include/ws.h"
|
||||
#include "ptQueue/inc/ptQueue.h"
|
||||
#include "ptQueue/inc/spsc.h"
|
||||
|
||||
typedef struct {
|
||||
ws_cli_conn_t clientId;
|
||||
uint8_t isAuthed;
|
||||
ptQueue* incomeQ;
|
||||
ptQueue* outcomeQ;
|
||||
queue_spsc_t* incomeQ;
|
||||
queue_spsc_t* outcomeQ;
|
||||
uint64_t connectedAt;
|
||||
uint32_t streamRegIterator;
|
||||
} ClientContext;
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
#include "pub/libhmmmm/config.h"
|
||||
|
||||
void freeMemSegConf(conf_mem_seg_t* memSegConf);
|
||||
void freeMemConf(conf_mem_t* memConf);
|
||||
// void freeMemSegConf(conf_mem_seg_t* memSegConf);
|
||||
// void freeMemConf(conf_mem_t* memConf);
|
||||
void freeConf(conf_dev_t* conf);
|
||||
void freeComposeId(char** id);
|
||||
uint8_t compareComposeId(char** idA, char** idB);
|
||||
// uint8_t compareComposeId(char** idA, char** idB);
|
||||
|
||||
#endif
|
||||
@@ -2,10 +2,12 @@
|
||||
#define __CONTEXT_H__
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "ptQueue/inc/ptQueue.h"
|
||||
#include "ptQueue/inc/spsc.h"
|
||||
#include "wsServer/include/ws.h"
|
||||
#include "ptQueue/inc/mpsc.h"
|
||||
|
||||
#include "linkedlist.h"
|
||||
#include "sized_ptr.h"
|
||||
@@ -16,8 +18,8 @@
|
||||
typedef struct {
|
||||
SizedPtr* bufs;
|
||||
uint8_t buffersCount;
|
||||
_Atomic (uint8_t) readRequestIdx;
|
||||
_Atomic (uint8_t) currWritingIdx;
|
||||
CACHE_ALIGN _Atomic (uint8_t) readRequestIdx;
|
||||
CACHE_ALIGN _Atomic (uint8_t) currWritingIdx;
|
||||
} OutgoingBuffers;
|
||||
|
||||
|
||||
@@ -43,12 +45,15 @@ typedef struct {
|
||||
// Cached DeviceIdMappingNotif broadcast message (sent to newly authed clients)
|
||||
uint8_t* deviceIdMappingMsg;
|
||||
size_t deviceIdMappingMsgLen;
|
||||
queue_mpsc_t* inMsgQueue;
|
||||
queue_spsc_t* outMsgQueue;
|
||||
} EmulContext;
|
||||
|
||||
|
||||
typedef struct {
|
||||
pthread_mutex_t registerMutex;
|
||||
ptQueue* regQueue;
|
||||
queue_spsc_t* regQueue;
|
||||
queue_mpsc_t* inMsgQueue;
|
||||
uint8_t* accessToken;
|
||||
EmulContext* emulContext;
|
||||
} ServerContext;
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "context.h"
|
||||
#include "ptQueue/inc/spsc.h"
|
||||
|
||||
void broadcastClients(EmulContext* emulContext, uint8_t* msg, size_t msgLen);
|
||||
void dispatchOutgoingMessage(OutgoingBuffers* outBufs, ws_cli_conn_t clientIdx, uint8_t* msg, size_t msgLen);
|
||||
void dispatchOutgoingMessage(queue_spsc_t* outMsgQueue, ws_cli_conn_t clientIdx, uint8_t* msg, size_t msgLen);
|
||||
|
||||
#endif
|
||||
@@ -7,7 +7,7 @@
|
||||
#include "proto/dial.h"
|
||||
#include "stream_reader.h"
|
||||
|
||||
void unregisterClientStream(EmulContext* emulContext, ClientContext* ctx, uint32_t regId);
|
||||
// static void unregisterClientStream(EmulContext* emulContext, ClientContext* ctx, uint32_t regId);
|
||||
void unregisterClientStreams(EmulContext* emulContext, ClientContext* ctx);
|
||||
|
||||
void handleIncomingStreamMessage(
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef __PROTO_MSG_H__
|
||||
#define __PROTO_MSG_H__
|
||||
|
||||
#include "client.h"
|
||||
#include "wsServer/include/ws.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
@@ -10,6 +11,7 @@
|
||||
typedef struct {
|
||||
uint8_t* data;
|
||||
size_t size;
|
||||
ClientContext* ctx;
|
||||
} FbMessage;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -32,11 +32,11 @@ typedef struct
|
||||
char** memsegNames;
|
||||
uint64_t* memsegShifts;
|
||||
uint64_t* memsegSizes;
|
||||
uint8_t* memsegCellSizes;
|
||||
uint64_t* memreadCellAddrs;
|
||||
uint8_t* memwriteWordLengths;
|
||||
uint8_t* memwriteCellSegments;
|
||||
uint64_t* memwriteCellAddrs;
|
||||
void** memwriteValues;
|
||||
uint64_t* memwriteValues;
|
||||
uint8_t memreadLen;
|
||||
uint8_t memwriteLen;
|
||||
} device_mem_t;
|
||||
@@ -87,10 +87,9 @@ typedef void (*ext_h_write_func)(uint64_t addr, void* rawCells, void* data, void
|
||||
} \
|
||||
__mem->memwriteCellAddrs[__mem->memwriteLen] = __addr; \
|
||||
__mem->memwriteCellSegments[__mem->memwriteLen] = __segno; \
|
||||
__mem->memwriteWordLengths[__mem->memwriteLen] = sizeof(__cell_t); \
|
||||
*((__cell_t*)__mem->memwriteValues[__mem->memwriteLen]) = (__cell_t)(__val); \
|
||||
/*__mem->memwriteWordLengths[__mem->memwriteLen] = sizeof(__cell_t);*/ \
|
||||
(__mem->memwriteValues[__mem->memwriteLen]) = (__cell_t)(__val); \
|
||||
__mem->memwriteLen += 1; \
|
||||
}
|
||||
|
||||
|
||||
#endif // ifndef __HMMMM_PUB_MEM_H__
|
||||
|
||||
Reference in New Issue
Block a user