partial sync with network module changes

* SocketTCP/UDP -> TcpSocket
* Ftp.makeDirectory -> createDirectory
* some SocketSelector fixes
+ unfinished TcpListener

git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1514 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
trass3r 2010-04-20 19:51:48 +00:00
parent 1464a35711
commit eada18b7e5
7 changed files with 181 additions and 168 deletions

View file

@ -24,36 +24,29 @@
* source distribution.
*/
module dsfml.network.selector;
module dsfml.network.socketselector;
import dsfml.network.sockettcp;
import dsfml.network.socketudp;
import dsfml.network.tcpsocket;
import dsfml.network.udpsocket;
import dsfml.system.common;
/**
* Selector TCP allow reading from multiple sockets
* without blocking. It's a kind of multiplexer. Use SocketTCP or
* SocketUDP aliases.
* Multiplexer that allows to read from multiple sockets
*/
class Selector(T) : DSFMLObject
class SocketSelector : DSFMLObject
{
//Ensure type is correct
static if (!is(T : SocketTCP) && !is(T : SocketUDP))
static assert("Only SocketTCP and SocketUDP are valid for Selector.");
/**
* Default constructor
*/
this()
{
super(sfSelector_Create());
super(sfSocketSelector_Create());
}
override void dispose()
{
sfSelector_Destroy(m_ptr);
sfSocketSelector_Destroy(m_ptr);
}
/**
@ -66,7 +59,7 @@ class Selector(T) : DSFMLObject
{
if (!(socket.nativePointer in m_watchedSockets))
{
sfSelector_Add(m_ptr, socket.nativePointer);
sfSocketSelector_Add(m_ptr, socket.nativePointer);
m_watchedSockets[socket.nativePointer] = socket;
m_numSocketsWatched++;
}
@ -82,7 +75,7 @@ class Selector(T) : DSFMLObject
{
if (socket.nativePointer in m_watchedSockets)
{
sfSelector_Remove(m_ptr, socket.nativePointer);
sfSocketSelector_Remove(m_ptr, socket.nativePointer);
m_watchedSockets.remove(socket.nativePointer);
m_numSocketsWatched--;
}
@ -93,7 +86,7 @@ class Selector(T) : DSFMLObject
*/
void clear()
{
sfSelector_Clear(m_ptr);
sfSocketSelector_Clear(m_ptr);
foreach(key; m_watchedSockets.keys)
m_watchedSockets.remove(key);
m_numSocketsWatched = 0;
@ -112,7 +105,7 @@ class Selector(T) : DSFMLObject
*/
uint wait(float timeout = 0.f)
{
return sfSelector_Wait(m_ptr, timeout);
return sfSocketSelector_Wait(m_ptr, timeout);
}
/**
@ -128,63 +121,33 @@ class Selector(T) : DSFMLObject
*/
T GetSocketsReady(uint index)
{
return m_watchedSockets[sfSelector_GetSocketReady(m_ptr, index)];
return m_watchedSockets[sfSocketSelector_GetSocketReady(m_ptr, index)];
}
private:
size_t m_numSocketsWatched;
T[void*] m_watchedSockets;
// size_t m_numSocketsWatched;
// T[void*] m_watchedSockets;
// External ====================================================================
extern (C)
static extern(C)
{
typedef SFMLClass function() pf_sfSelector_Create;
typedef void function(SFMLClass) pf_sfSelector_Destroy;
typedef void function(SFMLClass, SFMLClass) pf_sfSelector_Add;
typedef void function(SFMLClass, SFMLClass) pf_sfSelector_Remove;
typedef void function(SFMLClass) pf_sfSelector_Clear;
typedef uint function(SFMLClass, float) pf_sfSelector_Wait;
typedef SFMLClass function(SFMLClass, uint) pf_sfSelector_GetSocketReady;
static pf_sfSelector_Create sfSelector_Create;
static pf_sfSelector_Destroy sfSelector_Destroy;
static pf_sfSelector_Add sfSelector_Add;
static pf_sfSelector_Remove sfSelector_Remove;
static pf_sfSelector_Clear sfSelector_Clear;
static pf_sfSelector_Wait sfSelector_Wait;
static pf_sfSelector_GetSocketReady sfSelector_GetSocketReady;
SFMLClass function() sfSocketSelector_Create;
void function(SFMLClass) sfSocketSelector_Destroy;
void function(SFMLClass, SFMLClass) sfSocketSelector_AddTcpListener;
void function(SFMLClass, SFMLClass) sfSocketSelector_AddTcpSocket;
void function(SFMLClass, SFMLClass) sfSocketSelector_AddUdpSocket;
void function(SFMLClass, SFMLClass) sfSocketSelector_RemoveTcpListener;
void function(SFMLClass, SFMLClass) sfSocketSelector_RemoveTcpSocket;
void function(SFMLClass, SFMLClass) sfSocketSelector_RemoveUdpSocket;
void function(SFMLClass) sfSocketSelector_Clear;
bool function(SFMLClass, float) sfSocketSelector_Wait;
bool function(SFMLClass, SFMLClass) sfSocketSelector_IsTcpListenerReady;
bool function(SFMLClass, SFMLClass) sfSocketSelector_IsTcpSocketReady;
bool function(SFMLClass, SFMLClass) sfSocketSelector_IsUdpSocketReady;
}
static this()
{
debug
DllLoader dll = DllLoader.load("csfml-network-d");
else
DllLoader dll = DllLoader.load("csfml-network");
static if (is (T : SocketTCP))
{
string symbol = "sfSelectorTCP";
}
else static if (is (T : SocketUDP))
{
string symbol = "sfSelectorUDP";
}
sfSelector_Add = cast(pf_sfSelector_Add)dll.getSymbol(symbol ~ "_Add");
sfSelector_Clear = cast(pf_sfSelector_Clear)dll.getSymbol(symbol ~ "_Clear");
sfSelector_Create = cast(pf_sfSelector_Create)dll.getSymbol(symbol ~ "_Create");
sfSelector_Destroy = cast(pf_sfSelector_Destroy)dll.getSymbol(symbol ~ "_Destroy");
sfSelector_GetSocketReady = cast(pf_sfSelector_GetSocketReady)dll.getSymbol(symbol ~ "_GetSocketReady");
sfSelector_Wait = cast(pf_sfSelector_Wait)dll.getSymbol(symbol ~ "_Wait");
sfSelector_Remove = cast(pf_sfSelector_Remove)dll.getSymbol(symbol ~ "_Remove");
}
}
/**
* alias of selector for TCP or UDP Socket.
*/
alias Selector!(SocketTCP) SelectorTCP;
/// ditto
alias Selector!(SocketUDP) SelectorUDP;
mixin(loadFromSharedLib2("csfml-network", "sfSocketSelector",
"Create", "Destroy", "AddTcpListener", "AddTcpSocket", "AddUdpSocket", "RemoveTcpListener", "RemoveTcpSocket", "RemoveUdpSocket",
"Clear", "Wait", "IsTcpListenerReady", "IsTcpSocketReady", "IsUdpSocketReady"));
}