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 }
1.5.3