mirror of
https://github.com/tailix/libshmemq.git
synced 2025-02-17 15:45:41 -05:00
Rewrite examples
This commit is contained in:
parent
86a56387b7
commit
e4aea64e69
3 changed files with 22 additions and 67 deletions
|
@ -7,15 +7,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
static const size_t BUFFER1_SIZE = 200;
|
||||
static const long BUFFER1_MAGIC = 0xCAFEBABE;
|
||||
|
||||
struct Queue {
|
||||
size_t read_offset;
|
||||
|
||||
unsigned char data[];
|
||||
};
|
||||
|
||||
enum MessageType {
|
||||
FINISH,
|
||||
ONEBYTE,
|
||||
|
@ -23,10 +14,7 @@ enum MessageType {
|
|||
};
|
||||
|
||||
struct Message {
|
||||
long magic;
|
||||
size_t size;
|
||||
enum MessageType type;
|
||||
|
||||
unsigned char data[];
|
||||
};
|
||||
|
||||
|
|
|
@ -37,35 +37,18 @@ int main()
|
|||
assert(shmemq_error == SHMEMQ_ERROR_NONE);
|
||||
assert(shmemq != NULL);
|
||||
|
||||
struct Queue *const queue = (void*)shmemq->buffer;
|
||||
|
||||
printf("Initialize queues.\n");
|
||||
|
||||
queue->read_offset = 0;
|
||||
|
||||
printf("Main loop.\n");
|
||||
|
||||
while (running) {
|
||||
const struct Message *const message = (struct Message*)queue->data + queue->read_offset;
|
||||
const ShmemqFrame frame = shmemq_pop_start(shmemq);
|
||||
|
||||
if (message->magic != BUFFER1_MAGIC) {
|
||||
if (frame == NULL) {
|
||||
printf("No messages.\n");
|
||||
sleep(1);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (message->size > BUFFER1_SIZE - sizeof(struct Queue)) {
|
||||
printf("Message too big.\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (message->size > BUFFER1_SIZE - sizeof(struct Queue) - queue->read_offset) {
|
||||
printf("Buffer return.\n");
|
||||
queue->read_offset = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
queue->read_offset += message->size;
|
||||
const struct Message *const message = (struct Message*)frame->data;
|
||||
|
||||
switch (message->type) {
|
||||
case FINISH:
|
||||
|
@ -82,6 +65,13 @@ int main()
|
|||
printf("Invalid message.\n");
|
||||
running = false;
|
||||
}
|
||||
|
||||
shmemq_pop_end(shmemq, &shmemq_error);
|
||||
|
||||
if (shmemq_error != SHMEMQ_ERROR_NONE) {
|
||||
printf("Error: %u.\n", shmemq_error);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Destroy queue.\n");
|
||||
|
|
|
@ -28,31 +28,6 @@ int main()
|
|||
assert(shmemq_error == SHMEMQ_ERROR_NONE);
|
||||
assert(shmemq != NULL);
|
||||
|
||||
struct Queue *const queue = (void*)shmemq->buffer;
|
||||
|
||||
printf("Initialize queues.\n");
|
||||
|
||||
size_t buffer1_offset = queue->read_offset;
|
||||
|
||||
for (;;) {
|
||||
const struct Message *const message = (struct Message*)queue->data + buffer1_offset;
|
||||
|
||||
if (message->magic != BUFFER1_MAGIC) break;
|
||||
|
||||
if (message->size > BUFFER1_SIZE - sizeof(struct Queue)) {
|
||||
printf("Message too big.\n");
|
||||
goto finalize;
|
||||
}
|
||||
|
||||
if (message->size > BUFFER1_SIZE - sizeof(struct Queue) - buffer1_offset) {
|
||||
printf("Buffer return.\n");
|
||||
buffer1_offset = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
buffer1_offset += message->size;
|
||||
}
|
||||
|
||||
printf(
|
||||
"REPL commands:\n"
|
||||
" x - exit\n"
|
||||
|
@ -73,36 +48,38 @@ int main()
|
|||
break;
|
||||
}
|
||||
|
||||
struct Message *message = (struct Message*)queue->data + buffer1_offset;
|
||||
const ShmemqFrame frame = shmemq_push_start(shmemq);
|
||||
|
||||
struct Message *const message = (struct Message*)frame->data;
|
||||
|
||||
switch (chr) {
|
||||
case 'f':
|
||||
{
|
||||
const size_t size = sizeof(*message);
|
||||
buffer1_offset += size;
|
||||
message->type = FINISH;
|
||||
message->size = size;
|
||||
message->magic = BUFFER1_MAGIC;
|
||||
shmemq_push_end(shmemq, size, &shmemq_error);
|
||||
|
||||
if (shmemq_error != SHMEMQ_ERROR_NONE) goto finalize;
|
||||
}
|
||||
break;
|
||||
case '1':
|
||||
{
|
||||
const size_t size = sizeof(*message) + sizeof(unsigned char);
|
||||
buffer1_offset += size;
|
||||
*(unsigned char*)message->data = 123;
|
||||
message->type = ONEBYTE;
|
||||
message->size = size;
|
||||
message->magic = BUFFER1_MAGIC;
|
||||
shmemq_push_end(shmemq, size, &shmemq_error);
|
||||
|
||||
if (shmemq_error != SHMEMQ_ERROR_NONE) goto finalize;
|
||||
}
|
||||
break;
|
||||
case '0':
|
||||
{
|
||||
const size_t size = sizeof(*message) + strlen(nullstr) + 1;
|
||||
buffer1_offset += size;
|
||||
strcpy((char*)message->data, nullstr);
|
||||
message->type = NULLSTR;
|
||||
message->size = size;
|
||||
message->magic = BUFFER1_MAGIC;
|
||||
shmemq_push_end(shmemq, size, &shmemq_error);
|
||||
|
||||
if (shmemq_error != SHMEMQ_ERROR_NONE) goto finalize;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Reference in a new issue