Server.hpp

00001 
00002 //
00003 // SFML - Simple and Fast Multimedia Library
00004 // Copyright (C) 2007 Laurent Gomila (laurent.gom@gmail.com)
00005 //
00006 // This software is provided 'as-is', without any express or implied warranty.
00007 // In no event will the authors be held liable for any damages arising from the use of this software.
00008 //
00009 // Permission is granted to anyone to use this software for any purpose,
00010 // including commercial applications, and to alter it and redistribute it freely,
00011 // subject to the following restrictions:
00012 //
00013 // 1. The origin of this software must not be misrepresented;
00014 //    you must not claim that you wrote the original software.
00015 //    If you use this software in a product, an acknowledgment
00016 //    in the product documentation would be appreciated but is not required.
00017 //
00018 // 2. Altered source versions must be plainly marked as such,
00019 //    and must not be misrepresented as being the original software.
00020 //
00021 // 3. This notice may not be removed or altered from any source distribution.
00022 //
00024 
00025 #ifndef SFML_SERVER_HPP
00026 #define SFML_SERVER_HPP
00027 
00029 // Headers
00031 #include <SFML/Network/Selector.hpp>
00032 #include <SFML/System/Thread.hpp>
00033 #include <list>
00034 #include <limits>
00035 
00036 class sfIPAddress;
00037 class sfPacket;
00038 
00039 
00044 class SFML_API sfServer : private sfThread
00045 {
00046 public :
00047 
00052     virtual ~sfServer();
00053 
00061     void Start(unsigned short Port, std::size_t MaxClients = std::numeric_limits<std::size_t>::max());
00062 
00067     void Stop();
00068 
00076     void SendTo(sfSocketTCP Client, sfPacket& Packet);
00077 
00086     void SendToAll(sfPacket& Packet, sfSocketTCP* Exclude = NULL);
00087 
00094     void Disconnect(sfSocketTCP Client);
00095 
00096 private :
00097 
00102     virtual void Run();
00103 
00111     virtual void OnClientConnected(const sfIPAddress& Client, sfSocketTCP Socket);
00112 
00120     virtual void OnPacketReceived(sfSocketTCP Socket, sfPacket& Packet);
00121 
00128     virtual void OnClientDisconnected(sfSocketTCP Socket);
00129 
00131     // Member data
00133     sfSelectorTCP          mySelector;   
00134     std::list<sfSocketTCP> myClients;    
00135     unsigned short         myPort;       
00136     std::size_t            myMaxClients; 
00137     bool                   myIsRunning;  
00138 };
00139 
00140 
00141 #endif // SFML_SERVER_HPP