summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorJuan Manuel Tomás <jtomas1815@gmail.com>2020-08-02 03:50:26 -0300
committerJuan Manuel Tomás <jtomas1815@gmail.com>2020-08-03 23:56:03 -0300
commit4bbbfb8e8139e690ea084b72ccc2de71fdca1e08 (patch)
tree0ea15129b752d00f96c6a91e88ec303fd90d7860 /src/common
parent83ec165fddc5f9ee99a8e2aa75d188c45253a0fa (diff)
downloadjet-4bbbfb8e8139e690ea084b72ccc2de71fdca1e08.tar.gz
jet-4bbbfb8e8139e690ea084b72ccc2de71fdca1e08.zip
Simplify encoding and decoding
Diffstat (limited to 'src/common')
-rw-r--r--src/common/file.cpp4
-rw-r--r--src/common/ipc.cpp92
-rw-r--r--src/common/socket.cpp17
3 files changed, 76 insertions, 37 deletions
diff --git a/src/common/file.cpp b/src/common/file.cpp
index a9d8c2b..626f352 100644
--- a/src/common/file.cpp
+++ b/src/common/file.cpp
@@ -3,11 +3,9 @@
#include <sys/stat.h>
#include <fcntl.h>
-class File {
+struct File {
int descriptor;
- public:
-
File(const char *filepath, int flags) {
descriptor = open(filepath, flags);
}
diff --git a/src/common/ipc.cpp b/src/common/ipc.cpp
index d5a42e4..261b31f 100644
--- a/src/common/ipc.cpp
+++ b/src/common/ipc.cpp
@@ -1,7 +1,9 @@
#include <stdint.h>
+#define MESSAGE_SIZE 32
+
enum Operation {
- OP_NULL = 0,
+ OP_NULL,
OP_MOVE1,
OP_MOVE2,
OP_MOVE4,
@@ -11,32 +13,62 @@ enum Operation {
OP_SHOW
};
-void encode2(int16_t data, int8_t *message, size_t offset) {
- message[offset] = data & 0x00ff;
- message[offset + 1] = (data & 0xff00) >> 8;
-}
-
-int16_t decode2(int8_t *message, size_t offset) {
- return (int16_t)message[offset + 1] << 8 & 0xff00
- | (int16_t)message[offset] & 0x00ff;
-}
-
-void encode4(int32_t data, int8_t *message, size_t offset) {
- encode2( data & 0x0000ffff, message, offset);
- encode2((data & 0xffff0000) >> 16, message, offset + 2);
-}
-
-int32_t decode4(int8_t *message, size_t offset) {
- return (int32_t)decode2(message, offset + 2) << 16 & 0xffff0000
- | (int32_t)decode2(message, offset) & 0x0000ffff;
-}
-
-void encode8(int64_t data, int8_t *message, size_t offset) {
- encode4( data & 0x00000000ffffffff, message, offset);
- encode4((data & 0xffffffff00000000) >> 32, message, offset + 4);
-}
-
-int64_t decode8(int8_t *message, size_t offset) {
- return (int64_t)decode4(message, offset + 4) << 32 & 0xffffffff00000000
- | (int64_t)decode4(message, offset) & 0x00000000ffffffff;
-}
+struct Message {
+ uint8_t data[MESSAGE_SIZE] = {};
+ int offset = 0;
+
+ bool at_end() {
+ return data[offset] == 0;
+ }
+
+ void encode1(int8_t input) {
+ data[offset++] = input;
+ }
+
+ int8_t decode1() {
+ return data[offset++];
+ }
+
+ void encode2(int16_t input) {
+ data[offset++] = input >> 8;
+ data[offset++] = input;
+ }
+
+ int16_t decode2() {
+ int16_t result = data[offset++];
+ result <<= 8;
+ result |= data[offset++];
+ return result;
+ }
+
+ void encode4(int32_t input) {
+ for (int i = 3; i >= 0; i++) {
+ data[offset++] = input >> i * 8;
+ }
+ }
+
+ int32_t decode4() {
+ int32_t result = data[offset++];
+ for (int i = 0; i < 3; i++) {
+ result <<= 8;
+ result |= data[offset++];
+ }
+ return result;
+ }
+
+ void encode8(int64_t input) {
+ for (int i = 7; i >= 0; i++) {
+ data[offset++] = input >> i * 8;
+ }
+ }
+
+ int64_t decode8() {
+ int64_t result = data[offset++];
+ for (int i = 0; i < 7; i++) {
+ result <<= 8;
+ result |= data[offset++];
+ }
+ return result;
+ }
+};
+
diff --git a/src/common/socket.cpp b/src/common/socket.cpp
index 7eb4b46..7cd02e4 100644
--- a/src/common/socket.cpp
+++ b/src/common/socket.cpp
@@ -8,11 +8,9 @@
#define PORT 6969
-class Socket {
+struct Socket {
int descriptor;
- public:
-
Socket() {
descriptor = socket(AF_INET, SOCK_STREAM, 0);
}
@@ -60,14 +58,25 @@ class Socket {
::connect(descriptor, (sockaddr *) &addr, sizeof(sockaddr_in));
}
- size_t send(void *msg, size_t length) {
+ size_t send(const void *msg, size_t length) {
return write(descriptor, msg, length);
}
+ size_t send(Message &msg) {
+ size_t result = write(descriptor, msg.data, msg.offset);
+ msg.offset = 0;
+ return result;
+ }
+
size_t recv(void *msg, size_t length) {
return read(descriptor, msg, length);
}
+ size_t recv(Message &msg) {
+ msg.offset = 0;
+ return read(descriptor, msg.data, MESSAGE_SIZE);
+ }
+
~Socket() {
close(descriptor);
}