Added more features needed for more complexe portocols

unix_test
anulax1225 ago%!(EXTRA string=1 year)
parent 7a0ef3aca8
commit 0ad9bedec5
  1. 13
      bakanet/src/bakanet/packet.h
  2. 16
      bakanet/src/bakanet/socket.cpp
  3. 4
      bakanet/src/bakanet/socket.h

@ -26,7 +26,7 @@ namespace Bk::Net {
template <typename T> template <typename T>
void push(const T* data, int size) void push(const T* data, int size)
{ {
for(int i = 0; i <= size; i++) push<T>(data[i]); for(int i = 0; i < size; i++) push<T>(data[i]);
} }
template <typename T> template <typename T>
@ -44,10 +44,19 @@ namespace Bk::Net {
std::unique_ptr<T[]> pull(int size) std::unique_ptr<T[]> pull(int size)
{ {
std::unique_ptr<T[]> data(new T[size]); std::unique_ptr<T[]> data(new T[size]);
for(int i = size; i >= 0; i--) data[i] = pull<T>(); for(int i = size - 1; i >= 0; i--) data[i] = pull<T>();
return data; return data;
} }
bool append_data(std::vector<char> data)
{
if (!data.size()) return false;
size_t i = payload.size();
payload.resize(i + data.size());
std::memcpy(payload.data() + i, data.data(), sizeof(char) * data.size());
return true;
}
std::vector<char> payload; std::vector<char> payload;
}; };
} }

@ -24,8 +24,10 @@ namespace Bk::Net {
bool Socket::init() bool Socket::init()
{ {
//Binding step //Binding step
if (bind(socket_id, (struct sockaddr*)&addr, sizeof(addr)) < 0) int status;
if ((status = bind(socket_id, (struct sockaddr*)&addr, sizeof(addr)) < 0))
{ {
perror("bind failed");
return false; return false;
} }
return true; return true;
@ -57,14 +59,14 @@ namespace Bk::Net {
return true; return true;
} }
void Socket::write(std::vector<char> packet) void Socket::send(std::vector<char> packet)
{ {
send(socket_id, packet.data(), packet.size(), 0); write(socket_id, packet.data(), packet.size());
} }
void Socket::write(Connection conn, std::vector<char> packet) void Socket::send(Connection conn, std::vector<char> packet)
{ {
send(conn, packet.data(), packet.size(), 0); write(conn, packet.data(), packet.size());
} }
std::vector<char> Socket::recv(int size) std::vector<char> Socket::recv(int size)
@ -72,7 +74,7 @@ namespace Bk::Net {
std::vector<char> buffer; std::vector<char> buffer;
buffer.resize(size); buffer.resize(size);
int status = read(socket_id, buffer.data(), buffer.size() - 1); int status = read(socket_id, buffer.data(), buffer.size() - 1);
return status ? buffer : std::vector<char>(0); return status > 0 ? buffer : std::vector<char>();
} }
std::vector<char> Socket::recv(Connection conn, int size) std::vector<char> Socket::recv(Connection conn, int size)
@ -80,6 +82,6 @@ namespace Bk::Net {
std::vector<char> buffer; std::vector<char> buffer;
buffer.resize(size); buffer.resize(size);
int status = read(conn, buffer.data(), buffer.size() - 1); int status = read(conn, buffer.data(), buffer.size() - 1);
return status ? buffer : std::vector<char>(0); return status > 0 ? buffer : std::vector<char>();
} }
} }

@ -28,8 +28,8 @@ namespace Bk::Net {
bool start(int cpt_conn); bool start(int cpt_conn);
Connection ack(); Connection ack();
bool conn(); bool conn();
void write(std::vector<char> packet); void send(std::vector<char> packet);
void write(Connection socket, std::vector<char> packet); void send(Connection socket, std::vector<char> packet);
std::vector<char> recv(int size); std::vector<char> recv(int size);
std::vector<char> recv(Connection socket, int size); std::vector<char> recv(Connection socket, int size);

Loading…
Cancel
Save