optimizing on packet buffering is hard
This commit is contained in:
parent
8152424c7a
commit
a949f596b8
8 changed files with 44 additions and 20 deletions
15
protocol
15
protocol
|
@ -1,22 +1,19 @@
|
||||||
PROTOCOL
|
PROTOCOL
|
||||||
|
|
||||||
this is almost a carbon copy of every other tcp/ip protocol i write
|
|
||||||
don't care enough to make it fancy
|
|
||||||
|
|
||||||
all numbers are packed unless stated otherwise
|
all numbers are packed unless stated otherwise
|
||||||
packed values are msb
|
packed values are msb
|
||||||
|
|
||||||
|
strings and blobs are prefixed with a packed ushort length
|
||||||
|
|
||||||
byte n is b.n
|
byte n is b.n
|
||||||
region n is r.n
|
region n is r.n
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
byte the zero: packet id
|
byte the zero: 0xDE
|
||||||
byte the one: region count
|
byte the one: 0xAD
|
||||||
for 0 <= n < b.1
|
byte the two: packet id
|
||||||
byte the byte after the previous byte byte:
|
byte the 3-6: total body length - uint
|
||||||
region length < 128: one byte
|
|
||||||
region length >= 128: two bytes, highest bit on msb always 1
|
|
||||||
|
|
||||||
byte the bytes after the header octet bytes bytes:
|
byte the bytes after the header octet bytes bytes:
|
||||||
raw body data shoved next to each other with no separation
|
raw body data shoved next to each other with no separation
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
#include "packet.h"
|
||||||
|
|
23
src/packet.h
23
src/packet.h
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef PACKET_H
|
||||||
|
#define PACKET_H
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "list.h"
|
||||||
|
|
||||||
|
#define PCK_ID_REGISTER 0
|
||||||
|
#define PCK_ID_LOGIN 1
|
||||||
|
#define PCK_ID_CHANGE_CTX 2
|
||||||
|
|
||||||
|
typedef struct packet_t packet_t;
|
||||||
|
struct packet_t {
|
||||||
|
uint8_t id;
|
||||||
|
uint32_t length;
|
||||||
|
uint8_t **regions;
|
||||||
|
const uint8_t *region_lengths;
|
||||||
|
uint8_t region_count;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -70,7 +70,6 @@ void queue_nodes_free(queue_t *queue) {
|
||||||
queue_node_t *ptr = queue->front, *next;
|
queue_node_t *ptr = queue->front, *next;
|
||||||
while(ptr != NULL) {
|
while(ptr != NULL) {
|
||||||
next = ptr->next;
|
next = ptr->next;
|
||||||
if(ptr->data != NULL)
|
|
||||||
free(ptr->data);
|
free(ptr->data);
|
||||||
|
|
||||||
free(ptr);
|
free(ptr);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
void server() {
|
void server() {
|
||||||
|
user_context_init();
|
||||||
server_context_start();
|
server_context_start();
|
||||||
|
|
||||||
socket_t *sock = sock_server_init("6770");
|
socket_t *sock = sock_server_init("6770");
|
||||||
|
@ -30,6 +31,8 @@ void server() {
|
||||||
printf("got %s\r\n", in);
|
printf("got %s\r\n", in);
|
||||||
|
|
||||||
server_context_stop();
|
server_context_stop();
|
||||||
|
user_context_free();
|
||||||
|
|
||||||
sock_stop(sock);
|
sock_stop(sock);
|
||||||
sock_free(sock);
|
sock_free(sock);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ struct {
|
||||||
user_t **users;
|
user_t **users;
|
||||||
} ctx;
|
} ctx;
|
||||||
|
|
||||||
void user_ctx_init() {
|
void user_context_init() {
|
||||||
ctx.active_users = list_init();
|
ctx.active_users = list_init();
|
||||||
ctx.users = (user_t**)malloc(MAX_CONNS * sizeof(user_t*));
|
ctx.users = (user_t**)malloc(MAX_CONNS * sizeof(user_t*));
|
||||||
|
|
||||||
|
@ -14,12 +14,11 @@ void user_ctx_init() {
|
||||||
ctx.users[i] = NULL;
|
ctx.users[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void user_ctx_free() {
|
void user_context_free() {
|
||||||
list_free(ctx.active_users);
|
list_free(ctx.active_users);
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < MAX_CONNS; ++i)
|
for(i = 0; i < MAX_CONNS; ++i)
|
||||||
if(ctx.users[i] != NULL)
|
|
||||||
free(ctx.users[i]);
|
free(ctx.users[i]);
|
||||||
|
|
||||||
free(ctx.users);
|
free(ctx.users);
|
||||||
|
|
|
@ -14,12 +14,14 @@ struct user_t {
|
||||||
pthread_mutex_t mx_out_packets;
|
pthread_mutex_t mx_out_packets;
|
||||||
|
|
||||||
socket_t *sock;
|
socket_t *sock;
|
||||||
uint16_t context_id;
|
uint16_t user_id, context_id;
|
||||||
uint16_t x, y;
|
uint16_t x, y;
|
||||||
};
|
};
|
||||||
|
|
||||||
void user_ctx_init();
|
void user_context_init();
|
||||||
|
|
||||||
void user_ctx_free();
|
|
||||||
|
|
||||||
|
void user_context_free();
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -54,7 +54,6 @@ void stack_nodes_free(stack_t *stack) {
|
||||||
stack_t *ptr = stack, *next;
|
stack_t *ptr = stack, *next;
|
||||||
while(ptr != NULL) {
|
while(ptr != NULL) {
|
||||||
next = ptr->next;
|
next = ptr->next;
|
||||||
if(ptr->data != NULL)
|
|
||||||
free(ptr->data);
|
free(ptr->data);
|
||||||
|
|
||||||
free(ptr);
|
free(ptr);
|
||||||
|
|
Loading…
Reference in a new issue