diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2017-10-28 18:12:50 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2017-10-28 18:12:50 -0400 |
| commit | 61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396 (patch) | |
| tree | 7f828d9557aa28ffcb4c7a1b9b3e3326f3ad0170 /src/shared/lua_api/stream.cpp | |
| parent | 33e6b9627e6a46d388d46f2c5b4d15ba7e9f9904 (diff) | |
| download | brokengine-61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396.tar.gz brokengine-61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396.tar.bz2 brokengine-61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396.zip | |
Lots of updates
* Networking is finally working
* Started moveing physics into the shared domain
* Streams now have a readString() and writeString() method
* streams are passed to the lua context for networking
* Refactored cameras and physboxes to use metatables
* Finally wrote the pushvector3* and popvector3* methods
* Fixed a few crashes in ;main
* Deleted a lot of code
Diffstat (limited to 'src/shared/lua_api/stream.cpp')
| -rw-r--r-- | src/shared/lua_api/stream.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/shared/lua_api/stream.cpp b/src/shared/lua_api/stream.cpp new file mode 100644 index 0000000..3ec2394 --- /dev/null +++ b/src/shared/lua_api/stream.cpp @@ -0,0 +1,71 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "stream.hpp" + +char stx = 0x002; +char etx = 0x003; + +struct stream* stream_create(){ + struct stream* s = (struct stream*)malloc(sizeof(struct stream)); + s->length = 0; + s->data = (byte*)malloc(sizeof(byte)*0); + s->read = 0; + return s; +} +void stream_writeInt(struct stream* s, int number){ + long o = s->length; + s->length += sizeof(int); + s->data = (byte*)realloc(s->data,s->length); + int* ptr = (int*)(s->data + o); + *ptr = number; +} +int stream_readInt(struct stream* s){ + int* ptr = (int*)(s->data + s->read); + s->read += sizeof(int); + return *ptr; +} +void stream_writeData(struct stream* s, const char* d, int len){ + long o = s->length; + s->length += sizeof(char)*len; + s->data = (byte*)realloc(s->data,s->length); + char* ptr = (char*)(s->data + o); + memcpy(ptr,d,len); +} +void stream_readData(struct stream* s, int len, char* out){ + char* ptr = (char*)(s->data + s->read); + memcpy(out,ptr,len); + s->read += len; +} +void stream_writeString(struct stream* s, const char* str, size_t len){ + stream_writeData(s,str,len); + stream_writeData(s,"\0",1);//Null character +} +char* stream_readString(struct stream* s){ + char* ptr = (char*)(s->data + s->read); + s->read += strlen(ptr) + 1;//+1 for null character + return ptr; +} +void stream_writeDouble(struct stream* s, double number){ + long o = s->length; + s->length += sizeof(double); + s->data = (byte*)realloc(s->data,s->length); + double* ptr = (double*)(s->data + o); + *ptr = number; +} + +void stream_print(struct stream* s){ + printf("Length:%ld\nRead:%ld\nData starts at %p\nData:",s->length, s->read, s->data); + long i = 0; + byte* ptr = s->data; + while(i < s->length){ + printf("%4X",*(ptr + i)); + i++; + } + printf("\n"); +} + +void stream_free(struct stream* s){ + free(s->data); + free(s); +} |
