1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Convert WebSocket module to use PacketBuffer class

This commit is contained in:
Fabio Alessandrelli
2018-11-03 05:46:38 +01:00
parent 4847b5bff5
commit c066db4d59
17 changed files with 164 additions and 149 deletions

View File

@@ -32,11 +32,11 @@
#include "emws_peer.h"
#include "core/io/ip.h"
void EMWSPeer::set_sock(int p_sock) {
void EMWSPeer::set_sock(int p_sock, unsigned int p_in_buf_size, unsigned int p_in_pkt_size) {
peer_sock = p_sock;
in_buffer.clear();
queue_count = 0;
_in_buffer.resize(p_in_pkt_size, p_in_buf_size);
_packet_buffer.resize((1 << p_in_buf_size));
}
void EMWSPeer::set_write_mode(WriteMode p_mode) {
@@ -47,18 +47,10 @@ EMWSPeer::WriteMode EMWSPeer::get_write_mode() const {
return write_mode;
}
void EMWSPeer::read_msg(uint8_t *p_data, uint32_t p_size, bool p_is_string) {
if (in_buffer.space_left() < p_size + 5) {
ERR_EXPLAIN("Buffer full! Dropping data");
ERR_FAIL();
}
Error EMWSPeer::read_msg(uint8_t *p_data, uint32_t p_size, bool p_is_string) {
uint8_t is_string = p_is_string ? 1 : 0;
in_buffer.write((uint8_t *)&p_size, 4);
in_buffer.write((uint8_t *)&is_string, 1);
in_buffer.write(p_data, p_size);
queue_count++;
return _in_buffer.write_packet(p_data, p_size, &is_string);
}
Error EMWSPeer::put_packet(const uint8_t *p_buffer, int p_buffer_size) {
@@ -89,40 +81,28 @@ Error EMWSPeer::put_packet(const uint8_t *p_buffer, int p_buffer_size) {
Error EMWSPeer::get_packet(const uint8_t **r_buffer, int &r_buffer_size) {
if (queue_count == 0)
if (_in_buffer.packets_left() == 0)
return ERR_UNAVAILABLE;
uint32_t to_read = 0;
uint32_t left = 0;
uint8_t is_string = 0;
r_buffer_size = 0;
PoolVector<uint8_t>::Write rw = _packet_buffer.write();
int read = 0;
Error err = _in_buffer.read_packet(rw.ptr(), _packet_buffer.size(), &_is_string, read);
ERR_FAIL_COND_V(err != OK, err);
in_buffer.read((uint8_t *)&to_read, 4);
--queue_count;
left = in_buffer.data_left();
if (left < to_read + 1) {
in_buffer.advance_read(left);
return FAILED;
}
in_buffer.read(&is_string, 1);
_was_string = is_string == 1;
in_buffer.read(packet_buffer, to_read);
*r_buffer = packet_buffer;
r_buffer_size = to_read;
*r_buffer = rw.ptr();
r_buffer_size = read;
return OK;
};
int EMWSPeer::get_available_packet_count() const {
return queue_count;
return _in_buffer.packets_left();
};
bool EMWSPeer::was_string_packet() const {
return _was_string;
return _is_string;
};
bool EMWSPeer::is_connected_to_host() const {
@@ -143,9 +123,9 @@ void EMWSPeer::close(int p_code, String p_reason) {
}, peer_sock, p_code, p_reason.utf8().get_data());
/* clang-format on */
}
_is_string = 0;
_in_buffer.clear();
peer_sock = -1;
queue_count = 0;
in_buffer.clear();
};
IP_Address EMWSPeer::get_connected_host() const {
@@ -162,15 +142,12 @@ uint16_t EMWSPeer::get_connected_port() const {
EMWSPeer::EMWSPeer() {
peer_sock = -1;
queue_count = 0;
_was_string = false;
in_buffer.resize(16);
write_mode = WRITE_MODE_BINARY;
close();
};
EMWSPeer::~EMWSPeer() {
in_buffer.resize(0);
close();
};