00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <net/NetLoopBack.h>
00022 #include <net/NetMessagePool.h>
00023 #include <common/Defines.h>
00024 #include <common/Logger.h>
00025
00026 static unsigned int ClientLoopBackID = 100001;
00027 static unsigned int ServerLoopBackID = 200002;
00028
00029 NetLoopBack::NetLoopBack(bool server)
00030 : loopback_(0), server_(server)
00031 {
00032 }
00033
00034 NetLoopBack::~NetLoopBack()
00035 {
00036 }
00037
00038 bool NetLoopBack::connect(const char *hostName, int portNo)
00039 {
00040 {
00041 NetMessage *message = NetMessagePool::instance()->
00042 getFromPool(NetMessage::ConnectMessage, ServerLoopBackID, 0);
00043 messageHandler_.addMessage(message);
00044 }
00045 {
00046 NetMessage *message = NetMessagePool::instance()->
00047 getFromPool(NetMessage::ConnectMessage, ClientLoopBackID, 0);
00048 loopback_->messageHandler_.addMessage(message);
00049 }
00050
00051 return true;
00052 }
00053
00054 void NetLoopBack::setLoopBack(NetLoopBack *loopback)
00055 {
00056 loopback_ = loopback;
00057 }
00058
00059 bool NetLoopBack::started()
00060 {
00061 return true;
00062 }
00063
00064 void NetLoopBack::setMessageHandler(NetMessageHandlerI *handler)
00065 {
00066 messageHandler_.setMessageHandler(handler);
00067 }
00068
00069 int NetLoopBack::processMessages()
00070 {
00071 return messageHandler_.processMessages();
00072 }
00073
00074 void NetLoopBack::disconnectAllClients()
00075 {
00076 Logger::log("Cannot disconnect all clients, they are local!");
00077 }
00078
00079 void NetLoopBack::disconnectClient(unsigned int client)
00080 {
00081 Logger::log(S3D::formatStringBuffer("Cannot disconnect client %i, they are local!", client));
00082 }
00083
00084 void NetLoopBack::sendMessageServer(NetBuffer &buffer,
00085 unsigned int flags)
00086 {
00087 sendMessageDest(buffer, ServerLoopBackID, flags);
00088 }
00089
00090 void NetLoopBack::sendMessageDest(NetBuffer &buffer,
00091 unsigned int destination, unsigned int flags)
00092 {
00093 DIALOG_ASSERT(loopback_);
00094 DIALOG_ASSERT(
00095 (server_ && destination == ClientLoopBackID) ||
00096 (!server_ && destination == ServerLoopBackID));
00097
00098 NetMessage *message = NetMessagePool::instance()->
00099 getFromPool(NetMessage::BufferMessage, server_?ServerLoopBackID:ClientLoopBackID, 0, flags);
00100 message->getBuffer().reset();
00101 message->getBuffer().addDataToBuffer(buffer.getBuffer(), buffer.getBufferUsed());
00102 loopback_->messageHandler_.addMessage(message);
00103 }
00104