aboutsummaryrefslogtreecommitdiff
path: root/src/shared/lua_api/stream.cpp
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-10-28 18:12:50 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-10-28 18:12:50 -0400
commit61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396 (patch)
tree7f828d9557aa28ffcb4c7a1b9b3e3326f3ad0170 /src/shared/lua_api/stream.cpp
parent33e6b9627e6a46d388d46f2c5b4d15ba7e9f9904 (diff)
downloadbrokengine-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.cpp71
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);
+}