From e33e19d0587146859d48a134ec9fd94e7b7ba5cd Mon Sep 17 00:00:00 2001 From: "FWoltermann@gmail.com" Date: Thu, 8 Dec 2011 14:53:40 +0000 Subject: Initial upload --- NetEx/NetClient.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 NetEx/NetClient.cpp (limited to 'NetEx/NetClient.cpp') diff --git a/NetEx/NetClient.cpp b/NetEx/NetClient.cpp new file mode 100644 index 0000000..4f831fb --- /dev/null +++ b/NetEx/NetClient.cpp @@ -0,0 +1,116 @@ +/* Project nGenEx + Destroyer Studios LLC + Copyright © 1997-2004. All Rights Reserved. + + SUBSYSTEM: NetEx.lib + FILE: NetClient.cpp + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Network Server Pump for HTTP Server +*/ + + +#include "MemDebug.h" +#include "NetClient.h" +#include "NetHost.h" +#include "NetLayer.h" +#include + +// +-------------------------------------------------------------------+ + +NetClient::NetClient(const NetAddr& server_addr) + : addr(server_addr), sock(0), delta(0), time(0), err(0) +{ +} + +NetClient::~NetClient() +{ + delete sock; +} + +// +--------------------------------------------------------------------+ + +bool +NetClient::Send(Text msg) +{ + if (msg.length() > 0) { + if (sock) + delete sock; + + sock = new(__FILE__,__LINE__) NetSock(addr, true); + delta = 0; + time = timeGetTime(); + + if (!sock) { + err = ERR_NOBUFS; + return false; + } + + err = sock->send(msg); + if (err < 0) { + err = NetLayer::GetLastError(); + return false; + } + + err = sock->shutdown_output(); + if (err < 0) { + err = NetLayer::GetLastError(); + return false; + } + + return true; + } + + else { + delete sock; + sock = 0; + } + + return false; +} + +Text +NetClient::Recv() +{ + Text response; + + if (sock) { + int ready = sock->select(); + + while (!ready && timeGetTime() - time < 2000) { + Sleep(5); + ready = sock->select(); + } + + if (ready) { + Text msg = sock->recv(); + + while (msg.length() > 0) { + response += msg; + msg = sock->recv(); + } + + delta = timeGetTime() - time; + } + + delete sock; + sock = 0; + } + + return response; +} + +Text +NetClient::SendRecv(Text msg) +{ + Text response; + + if (msg.length() > 0 && Send(msg)) { + response = Recv(); + } + + return response; +} -- cgit v1.1