///////////////////////////////////////////////////////////////////////////////
// Name:        socket.h
// Purpose:     c++ wrapper for wxSocket*
// Author:      Graciliano M. P.
// Modified by:
// Created:     06/03/2003
// RCS-ID:      
// Copyright:   (c) 2003 Graciliano M. P.
// Licence:     This program is free software; you can redistribute it and/or
//              modify it under the same terms as Perl itself
///////////////////////////////////////////////////////////////////////////////

#include "wx/socket.h"
#include "cpp/v_cback.h"

class wxPlSocketBase:public wxSocketBase
{
    WXPLI_DECLARE_DYNAMIC_CLASS( wxPlSocketBase );
    WXPLI_DECLARE_V_CBACK();
public:
    wxPlSocketBase( const char* package );
};

inline wxPlSocketBase::wxPlSocketBase( const char* package )
    : m_callback( "Wx::SocketBase" )
{
    m_callback.SetSelf( wxPli_make_object( this, package ), TRUE );
}

WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPlSocketBase , wxSocketBase );

///////////////////////////////////////////////////////////////////////////////

class wxPliSocketClient:public wxSocketClient
{
    WXPLI_DECLARE_DYNAMIC_CLASS( wxPliSocketClient );
    WXPLI_DECLARE_V_CBACK();
public:
    WXPLI_DEFAULT_CONSTRUCTOR( wxPliSocketClient, "Wx::SocketClient", TRUE );

    // this fixes the crashes, for some reason
    wxPliSocketClient( const char* package, long _arg1 )
        : wxSocketClient( _arg1 ),
          m_callback( "Wx::SocketClient" )
     {
         m_callback.SetSelf( wxPli_make_object( this, package ), TRUE );
     }
};

WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliSocketClient , wxSocketClient );

///////////////////////////////////////////////////////////////////////////////

class wxPlSocketServer:public wxSocketServer
{
    WXPLI_DECLARE_DYNAMIC_CLASS( wxPlSocketServer );
    WXPLI_DECLARE_V_CBACK();
public:
    wxPlSocketServer( const char* package , wxIPV4address _arg1 , long _arg2 );

    wxSocketBase* Accept(bool wait)
    {
        wxSocketBase* sock = new wxPlSocketBase( "Wx::SocketBase" );

        sock->SetFlags(GetFlags());

        if (!AcceptWith(*sock, wait))
        {
            sock->Destroy();
            sock = NULL;
        }

        return sock;
    }
};

inline wxPlSocketServer::wxPlSocketServer( const char* package , wxIPV4address _arg1 , long _arg2 )
    : wxSocketServer( _arg1 , _arg2 ),
      m_callback( "Wx::SocketServer" )
{
    m_callback.SetSelf( wxPli_make_object( this, package ), TRUE );
}

WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPlSocketServer , wxSocketServer );

///////////////////////////////////////////////////////////////////////////////

#if 0

class wxPliSocketEvent:public wxSocketEvent
{
    WXPLI_DECLARE_DYNAMIC_CLASS( wxPliSocketEvent );
    WXPLI_DECLARE_V_CBACK();
public:
    WXPLI_DEFAULT_CONSTRUCTOR( wxPliSocketEvent, "Wx::SocketEvent", TRUE );

    // this fixes the crashes, for some reason
    wxPliSocketEvent( const char* package, int _arg1 )
        : wxSocketEvent( _arg1 ),
          m_callback( "Wx::SocketEvent" )
     {
         m_callback.SetSelf( wxPli_make_object( this, package ), TRUE );
     }
};

WXPLI_IMPLEMENT_DYNAMIC_CLASS( wxPliSocketEvent , wxSocketEvent );

#endif

// Local variables: //
// mode: c++ //
// End: //