NetMessagePool.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 
00022 #include <net/NetMessagePool.h>
00023 
00024 NetMessagePool *NetMessagePool::instance_ = 0;
00025 
00026 NetMessagePool *NetMessagePool::instance()
00027 {
00028         if (!instance_)
00029         {
00030                 instance_ = new NetMessagePool;
00031         }
00032         return instance_;
00033 }
00034 
00035 NetMessagePool::NetMessagePool() : messagePoolMutex_(0)
00036 {
00037         messagePoolMutex_ = SDL_CreateMutex();
00038 }
00039 
00040 NetMessagePool::~NetMessagePool()
00041 {
00042         SDL_DestroyMutex(messagePoolMutex_);
00043 }
00044 
00045 void NetMessagePool::addToPool(NetMessage *message)
00046 {
00047         SDL_LockMutex(messagePoolMutex_);
00048         messagePool_.push_back(message);
00049         SDL_UnlockMutex(messagePoolMutex_);
00050 }
00051 
00052 NetMessage *NetMessagePool::getFromPool(NetMessage::MessageType type,
00053         unsigned int destinationId,
00054         unsigned int ipAddress,
00055         unsigned int flags)
00056 {
00057         SDL_LockMutex(messagePoolMutex_);
00058 
00059         NetMessage *result = 0;
00060         if (messagePool_.empty())
00061         {
00062                 result = new NetMessage;
00063         }
00064         else
00065         {
00066                 result = messagePool_.front();
00067                 messagePool_.pop_front();
00068         }
00069         result->setDestinationId(destinationId);
00070         result->setIpAddress(ipAddress);
00071         result->setType(type);
00072         result->getBuffer().reset();
00073         result->setFlags(flags);
00074 
00075         SDL_UnlockMutex(messagePoolMutex_);
00076 
00077         return result;
00078 }

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