MSVC fixage for the new socket API

develop
Petr Mrázek 2012-03-15 22:05:33 +01:00
parent 52aca6e05a
commit c72fb76316
7 changed files with 53 additions and 35 deletions

@ -43,8 +43,10 @@ POSSIBILITY OF SUCH DAMAGE.
#include <fstream> #include <fstream>
#include <istream> #include <istream>
#include <string> #include <string>
#include <stdint.h>
#include "RemoteClient.h" #include "RemoteClient.h"
#include <ActiveSocket.h>
#include "MiscUtils.h" #include "MiscUtils.h"
#include <cstdio> #include <cstdio>
@ -88,24 +90,26 @@ void color_ostream_proxy::decode(CoreTextNotification *data)
RemoteClient::RemoteClient() RemoteClient::RemoteClient()
{ {
active = false; active = false;
socket = new CActiveSocket();
} }
RemoteClient::~RemoteClient() RemoteClient::~RemoteClient()
{ {
disconnect(); disconnect();
delete socket;
} }
bool DFHack::readFullBuffer(CSimpleSocket &socket, void *buf, int size) bool DFHack::readFullBuffer(CSimpleSocket *socket, void *buf, int size)
{ {
if (!socket.IsSocketValid()) if (!socket->IsSocketValid())
return false; return false;
char *ptr = (char*)buf; char *ptr = (char*)buf;
while (size > 0) { while (size > 0) {
int cnt = socket.Receive(size); int cnt = socket->Receive(size);
if (cnt <= 0) if (cnt <= 0)
return false; return false;
memcpy(ptr, socket.GetData(), cnt); memcpy(ptr, socket->GetData(), cnt);
ptr += cnt; ptr += cnt;
size -= cnt; size -= cnt;
} }
@ -132,13 +136,13 @@ bool RemoteClient::connect(int port)
if (port <= 0) if (port <= 0)
port = GetDefaultPort(); port = GetDefaultPort();
if (!socket.Initialize()) if (!socket->Initialize())
{ {
std::cerr << "Socket init failed." << endl; std::cerr << "Socket init failed." << endl;
return false; return false;
} }
if (!socket.Open((const uint8 *)"localhost", port)) if (!socket->Open((const uint8 *)"localhost", port))
{ {
std::cerr << "Could not connect to localhost:" << port << endl; std::cerr << "Could not connect to localhost:" << port << endl;
return false; return false;
@ -150,17 +154,17 @@ bool RemoteClient::connect(int port)
memcpy(header.magic, RPCHandshakeHeader::REQUEST_MAGIC, sizeof(header.magic)); memcpy(header.magic, RPCHandshakeHeader::REQUEST_MAGIC, sizeof(header.magic));
header.version = 1; header.version = 1;
if (socket.Send((uint8*)&header, sizeof(header)) != sizeof(header)) if (socket->Send((uint8*)&header, sizeof(header)) != sizeof(header))
{ {
std::cerr << "Could not send header." << endl; std::cerr << "Could not send header." << endl;
socket.Close(); socket->Close();
return active = false; return active = false;
} }
if (!readFullBuffer(socket, &header, sizeof(header))) if (!readFullBuffer(socket, &header, sizeof(header)))
{ {
std::cerr << "Could not read header." << endl; std::cerr << "Could not read header." << endl;
socket.Close(); socket->Close();
return active = false; return active = false;
} }
@ -168,7 +172,7 @@ bool RemoteClient::connect(int port)
header.version != 1) header.version != 1)
{ {
std::cerr << "Invalid handshake response." << endl; std::cerr << "Invalid handshake response." << endl;
socket.Close(); socket->Close();
return active = false; return active = false;
} }
@ -185,22 +189,22 @@ bool RemoteClient::connect(int port)
void RemoteClient::disconnect() void RemoteClient::disconnect()
{ {
if (active && socket.IsSocketValid()) if (active && socket->IsSocketValid())
{ {
RPCMessageHeader header; RPCMessageHeader header;
header.id = RPC_REQUEST_QUIT; header.id = RPC_REQUEST_QUIT;
header.size = 0; header.size = 0;
if (socket.Send((uint8_t*)&header, sizeof(header)) != sizeof(header)) if (socket->Send((uint8_t*)&header, sizeof(header)) != sizeof(header))
std::cerr << "Could not send the disconnect message." << endl; std::cerr << "Could not send the disconnect message." << endl;
} }
socket.Close(); socket->Close();
} }
bool RemoteClient::bind(color_ostream &out, RemoteFunctionBase *function, bool RemoteClient::bind(color_ostream &out, RemoteFunctionBase *function,
const std::string &name, const std::string &proto) const std::string &name, const std::string &proto)
{ {
if (!active || !socket.IsSocketValid()) if (!active || !socket->IsSocketValid())
return false; return false;
bind_call.reset(); bind_call.reset();
@ -227,7 +231,7 @@ bool RemoteClient::bind(color_ostream &out, RemoteFunctionBase *function,
command_result RemoteClient::run_command(color_ostream &out, const std::string &cmd, command_result RemoteClient::run_command(color_ostream &out, const std::string &cmd,
const std::vector<std::string> &args) const std::vector<std::string> &args)
{ {
if (!active || !socket.IsSocketValid()) if (!active || !socket->IsSocketValid())
{ {
out.printerr("In RunCommand: client connection not valid.\n"); out.printerr("In RunCommand: client connection not valid.\n");
return CR_FAILURE; return CR_FAILURE;
@ -278,7 +282,7 @@ bool RemoteFunctionBase::bind(color_ostream &out, RemoteClient *client,
return client->bind(out, this, name, proto); return client->bind(out, this, name, proto);
} }
bool DFHack::sendRemoteMessage(CSimpleSocket &socket, int16_t id, const MessageLite *msg, int *psz) bool DFHack::sendRemoteMessage(CSimpleSocket *socket, int16_t id, const MessageLite *msg, int *psz)
{ {
int size = msg->ByteSize(); int size = msg->ByteSize();
int fullsz = size + sizeof(RPCMessageHeader); int fullsz = size + sizeof(RPCMessageHeader);
@ -295,7 +299,7 @@ bool DFHack::sendRemoteMessage(CSimpleSocket &socket, int16_t id, const MessageL
if (!msg->SerializeToArray(data.get() + sizeof(RPCMessageHeader), size)) if (!msg->SerializeToArray(data.get() + sizeof(RPCMessageHeader), size))
return false; return false;
return (socket.Send(data.get(), fullsz) == fullsz); return (socket->Send(data.get(), fullsz) == fullsz);
} }
command_result RemoteFunctionBase::execute(color_ostream &out, command_result RemoteFunctionBase::execute(color_ostream &out,
@ -307,7 +311,7 @@ command_result RemoteFunctionBase::execute(color_ostream &out,
return CR_NOT_IMPLEMENTED; return CR_NOT_IMPLEMENTED;
} }
if (!p_client->socket.IsSocketValid()) if (!p_client->socket->IsSocketValid())
{ {
out.printerr("In call to %s::%s: invalid socket.\n", out.printerr("In call to %s::%s: invalid socket.\n",
this->proto.c_str(), this->name.c_str()); this->proto.c_str(), this->name.c_str());

@ -43,8 +43,10 @@ POSSIBILITY OF SUCH DAMAGE.
#include <fstream> #include <fstream>
#include <istream> #include <istream>
#include <string> #include <string>
#include <stdint.h>
#include "RemoteServer.h" #include "RemoteServer.h"
#include "PassiveSocket.h"
#include "PluginManager.h" #include "PluginManager.h"
#include "MiscUtils.h" #include "MiscUtils.h"
@ -250,7 +252,7 @@ void ServerConnection::connection_ostream::flush_proxy()
buffer.clear(); buffer.clear();
if (!sendRemoteMessage(*owner->socket, RPC_REPLY_TEXT, &msg)) if (!sendRemoteMessage(owner->socket, RPC_REPLY_TEXT, &msg))
{ {
owner->in_error = true; owner->in_error = true;
Core::printerr("Error writing text into client socket.\n"); Core::printerr("Error writing text into client socket.\n");
@ -267,7 +269,7 @@ void ServerConnection::threadFn(void *arg)
{ {
RPCHandshakeHeader header; RPCHandshakeHeader header;
if (!readFullBuffer(*me->socket, &header, sizeof(header))) if (!readFullBuffer(me->socket, &header, sizeof(header)))
{ {
out << "In RPC server: could not read handshake header." << endl; out << "In RPC server: could not read handshake header." << endl;
delete me; delete me;
@ -301,7 +303,7 @@ void ServerConnection::threadFn(void *arg)
// Read the message // Read the message
RPCMessageHeader header; RPCMessageHeader header;
if (!readFullBuffer(*me->socket, &header, sizeof(header))) if (!readFullBuffer(me->socket, &header, sizeof(header)))
{ {
out.printerr("In RPC server: I/O error in receive header.\n"); out.printerr("In RPC server: I/O error in receive header.\n");
break; break;
@ -318,7 +320,7 @@ void ServerConnection::threadFn(void *arg)
std::auto_ptr<uint8_t> buf(new uint8_t[header.size]); std::auto_ptr<uint8_t> buf(new uint8_t[header.size]);
if (!readFullBuffer(*me->socket, buf.get(), header.size)) if (!readFullBuffer(me->socket, buf.get(), header.size))
{ {
out.printerr("In RPC server: I/O error in receive %d bytes of data.\n", header.size); out.printerr("In RPC server: I/O error in receive %d bytes of data.\n", header.size);
break; break;
@ -363,7 +365,7 @@ void ServerConnection::threadFn(void *arg)
if (res == CR_OK && reply) if (res == CR_OK && reply)
{ {
if (!sendRemoteMessage(*me->socket, RPC_REPLY_RESULT, reply, &out_size)) if (!sendRemoteMessage(me->socket, RPC_REPLY_RESULT, reply, &out_size))
{ {
out.printerr("In RPC server: I/O error in send result.\n"); out.printerr("In RPC server: I/O error in send result.\n");
break; break;
@ -398,12 +400,14 @@ void ServerConnection::threadFn(void *arg)
ServerMain::ServerMain() ServerMain::ServerMain()
{ {
socket = new CPassiveSocket();
thread = NULL; thread = NULL;
} }
ServerMain::~ServerMain() ServerMain::~ServerMain()
{ {
socket.Close(); socket->Close();
delete socket;
} }
bool ServerMain::listen(int port) bool ServerMain::listen(int port)
@ -411,9 +415,9 @@ bool ServerMain::listen(int port)
if (thread) if (thread)
return true; return true;
socket.Initialize(); socket->Initialize();
if (!socket.Listen((const uint8 *)"127.0.0.1", port)) if (!socket->Listen((const uint8 *)"127.0.0.1", port))
return false; return false;
thread = new tthread::thread(threadFn, this); thread = new tthread::thread(threadFn, this);
@ -425,7 +429,7 @@ void ServerMain::threadFn(void *arg)
ServerMain *me = (ServerMain*)arg; ServerMain *me = (ServerMain*)arg;
CActiveSocket *client; CActiveSocket *client;
while ((client = me->socket.Accept()) != NULL) while ((client = me->socket->Accept()) != NULL)
{ {
new ServerConnection(client); new ServerConnection(client);
} }

@ -43,6 +43,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include <fstream> #include <fstream>
#include <istream> #include <istream>
#include <string> #include <string>
#include <stdint.h>
#include "RemoteClient.h" #include "RemoteClient.h"

@ -27,7 +27,9 @@ distribution.
#include "Export.h" #include "Export.h"
#include "ColorText.h" #include "ColorText.h"
#include "ActiveSocket.h" class CPassiveSocket;
class CActiveSocket;
class CSimpleSocket;
#include "CoreProtocol.pb.h" #include "CoreProtocol.pb.h"
@ -197,8 +199,8 @@ namespace DFHack
} }
}; };
bool readFullBuffer(CSimpleSocket &socket, void *buf, int size); bool readFullBuffer(CSimpleSocket *socket, void *buf, int size);
bool sendRemoteMessage(CSimpleSocket &socket, int16_t id, bool sendRemoteMessage(CSimpleSocket *socket, int16_t id,
const ::google::protobuf::MessageLite *msg, int *psz = NULL); const ::google::protobuf::MessageLite *msg, int *psz = NULL);
class DFHACK_EXPORT RemoteClient class DFHACK_EXPORT RemoteClient
@ -222,7 +224,7 @@ namespace DFHack
private: private:
bool active; bool active;
CActiveSocket socket; CActiveSocket * socket;
RemoteFunction<dfproto::CoreBindRequest,dfproto::CoreBindReply> bind_call; RemoteFunction<dfproto::CoreBindRequest,dfproto::CoreBindReply> bind_call;
RemoteFunction<dfproto::CoreRunCommandRequest> runcmd_call; RemoteFunction<dfproto::CoreRunCommandRequest> runcmd_call;

@ -28,7 +28,9 @@ distribution.
#include "RemoteClient.h" #include "RemoteClient.h"
#include "Core.h" #include "Core.h"
#include "PassiveSocket.h" class CPassiveSocket;
class CActiveSocket;
class CSimpleSocket;
namespace DFHack namespace DFHack
{ {
@ -236,7 +238,7 @@ namespace DFHack
}; };
class DFHACK_EXPORT ServerMain { class DFHACK_EXPORT ServerMain {
CPassiveSocket socket; CPassiveSocket *socket;
tthread::thread *thread; tthread::thread *thread;
static void threadFn(void *); static void threadFn(void *);

@ -1 +1 @@
Subproject commit 136181f067a0a5ed19a19c9f98eece41003fe372 Subproject commit 39ab58ccc2d898cb2aef13e46eccc9f645c7dc0f

@ -72,7 +72,12 @@ MACRO(DFHACK_PLUGIN)
ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES}) ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES})
IDE_FOLDER(${PLUGIN_NAME} "Plugins") IDE_FOLDER(${PLUGIN_NAME} "Plugins")
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} dfhack ${PLUGIN_LINK_LIBRARIES}) LIST(LENGTH PLUGIN_PROTOBUFS NUM_PROTO)
IF(NUM_PROTO)
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} dfhack protobuf-lite ${PLUGIN_LINK_LIBRARIES})
ELSE()
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} dfhack ${PLUGIN_LINK_LIBRARIES})
ENDIF()
IF(UNIX) IF(UNIX)
SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES SUFFIX .plug.so PREFIX "") SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES SUFFIX .plug.so PREFIX "")
SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES COMPILE_FLAGS "-include Export.h") SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES COMPILE_FLAGS "-include Export.h")