NetLoopBack.cpp

Go to the documentation of this file.
00001 ////////////////////////////////////////////////////////////////////////////////
00002 //    Scorched3D (c) 2000-2009
00003 //
00004 //    This file is part of Scorched3D.
00005 //
00006 //    Scorched3D is free software; you can redistribute it and/or modify
00007 //    it under the terms of the GNU General Public License as published by
00008 //    the Free Software Foundation; either version 2 of the License, or
00009 //    (at your option) any later version.
00010 //
00011 //    Scorched3D is distributed in the hope that it will be useful,
00012 //    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 //    GNU General Public License for more details.
00015 //
00016 //    You should have received a copy of the GNU General Public License
00017 //    along with Scorched3D; if not, write to the Free Software
00018 //    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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 

Generated on Mon Feb 16 15:14:51 2009 for Scorched3D by  doxygen 1.5.3