Browse Source

Change server_exception from dvlnet_exception to PacketError

pull/6627/head
staphen 3 years ago committed by Anders Jenbo
parent
commit
bb83d527d2
  1. 3
      Source/dvlnet/tcp_client.cpp
  2. 43
      Source/dvlnet/tcp_server.cpp
  3. 8
      Source/dvlnet/tcp_server.h

3
Source/dvlnet/tcp_client.cpp

@ -61,9 +61,6 @@ int tcp_client::join(std::string addrstr)
for (auto i = 0; i < NoSleep; ++i) {
try {
poll();
} catch (const dvlnet_exception &e) {
SDL_SetError("Network error: %s", e.what());
return -1;
} catch (const std::runtime_error &e) {
SDL_SetError("%s", e.what());
return -1;

43
Source/dvlnet/tcp_server.cpp

@ -79,27 +79,25 @@ void tcp_server::HandleReceive(const scc &con, const asio::error_code &ec,
con->recv_buffer.resize(frame_queue::max_frame_size);
try {
while (con->recv_queue.PacketReady()) {
try {
tl::expected<std::unique_ptr<packet>, PacketError> pkt = pktfty.make_packet(con->recv_queue.ReadPacket());
if (!pkt.has_value()) {
Log("make_packet: {}", pkt.error().what());
tl::expected<std::unique_ptr<packet>, PacketError> pkt = pktfty.make_packet(con->recv_queue.ReadPacket());
if (!pkt.has_value()) {
Log("make_packet: {}", pkt.error().what());
DropConnection(con);
return;
}
if (con->plr == PLR_BROADCAST) {
if (tl::expected<void, PacketError> result = HandleReceiveNewPlayer(con, **pkt); !result.has_value()) {
Log("HandleReceiveNewPlayer: {}", result.error().what());
DropConnection(con);
return;
}
if (con->plr == PLR_BROADCAST) {
if (tl::expected<void, PacketError> result = HandleReceiveNewPlayer(con, **pkt); !result.has_value()) {
Log("HandleReceiveNewPlayer: {}", result.error().what());
DropConnection(con);
return;
}
} else {
con->timeout = timeout_active;
HandleReceivePacket(**pkt);
} else {
con->timeout = timeout_active;
if (tl::expected<void, PacketError> result = HandleReceivePacket(**pkt); !result.has_value()) {
Log("Network error: {}", result.error().what());
DropConnection(con);
return;
}
} catch (dvlnet_exception &e) {
Log("Network error: {}", e.what());
DropConnection(con);
return;
}
}
} catch (frame_queue_exception &e) {
@ -114,7 +112,7 @@ tl::expected<void, PacketError> tcp_server::HandleReceiveNewPlayer(const scc &co
{
auto newplr = NextFree();
if (newplr == PLR_BROADCAST)
throw server_exception();
return tl::make_unexpected(ServerError());
if (Empty()) {
tl::expected<const buffer_t *, PacketError> pktInfo = inPkt.Info();
@ -158,12 +156,12 @@ tl::expected<void, PacketError> tcp_server::HandleReceiveNewPlayer(const scc &co
return {};
}
void tcp_server::HandleReceivePacket(packet &pkt)
tl::expected<void, PacketError> tcp_server::HandleReceivePacket(packet &pkt)
{
SendPacket(pkt);
return SendPacket(pkt);
}
void tcp_server::SendPacket(packet &pkt)
tl::expected<void, PacketError> tcp_server::SendPacket(packet &pkt)
{
if (pkt.Destination() == PLR_BROADCAST) {
for (size_t i = 0; i < Players.size(); ++i)
@ -171,10 +169,11 @@ void tcp_server::SendPacket(packet &pkt)
StartSend(connections[i], pkt);
} else {
if (pkt.Destination() >= MAX_PLRS)
throw server_exception();
return tl::make_unexpected(ServerError());
if ((pkt.Destination() != pkt.Source()) && connections[pkt.Destination()])
StartSend(connections[pkt.Destination()], pkt);
}
return {};
}
void tcp_server::StartSend(const scc &con, packet &pkt)

8
Source/dvlnet/tcp_server.h

@ -27,9 +27,9 @@
namespace devilution::net {
class server_exception : public dvlnet_exception {
class ServerError : public PacketError {
public:
const char *what() const throw() override
const char *what() const override
{
return "Invalid player ID";
}
@ -77,8 +77,8 @@ private:
void StartReceive(const scc &con);
void HandleReceive(const scc &con, const asio::error_code &ec, size_t bytesRead);
tl::expected<void, PacketError> HandleReceiveNewPlayer(const scc &con, packet &pkt);
void HandleReceivePacket(packet &pkt);
void SendPacket(packet &pkt);
tl::expected<void, PacketError> HandleReceivePacket(packet &pkt);
tl::expected<void, PacketError> SendPacket(packet &pkt);
void StartSend(const scc &con, packet &pkt);
void HandleSend(const scc &con, const asio::error_code &ec, size_t bytesSent);
void StartTimeout(const scc &con);

Loading…
Cancel
Save