wxWidgets/include/wx/net.h
1999-10-01 22:42:17 +00:00

162 lines
6.1 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: wx/net.h
// Purpose: Network related wxWindows classes and functions
// Author: Vadim Zeitlin
// Modified by:
// Created: 07.07.99
// RCS-ID: $Id$
// Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_NET_H
#define _WX_NET_H
#if wxUSE_DIALUP_MANAGER
// ----------------------------------------------------------------------------
// A class which groups functions dealing with connecting to the network from a
// workstation using dial-up access to the net. There is at most one instance
// of this class in the program accessed via GetDialUpManager().
// ----------------------------------------------------------------------------
/* TODO
*
* 1. more configurability for Unix: i.e. how to initiate the connection, how
* to check for online status, &c.
* 2. add a "long Dial(long connectionId = -1)" function which asks the user
* about which connection to dial (this may be done using native dialogs
* under NT, need generic dialogs for all others) and returns the identifier
* of the selected connection (it's opaque to the application) - it may be
* reused later to dial the same connection later (or use strings instead of
* longs may be?)
* 3. add an async version of dialing functions which notify the caller about
* the progress (or may be even start another thread to monitor it)
* 4. the static creation/accessor functions are not MT-safe - but is this
* really crucial? I think we may suppose they're always called from the
* main thread?
*/
class WXDLLEXPORT wxDialUpManager
{
public:
// get the pointer to the global wxDialUpManager object
static wxDialUpManager *Get()
{
if ( !ms_dialUpManager )
{
ms_dialUpManager = Create();
}
return ms_dialUpManager;
}
// could the dialup manager be initialized correctly? If this function
// returns FALSE, no other functions will work neither, so it's a good idea
// to call this function and check its result before calling any other
// wxDialUpManager methods
virtual bool IsOk() const = 0;
// virtual dtor for any base class
virtual ~wxDialUpManager() { }
// operations
// ----------
// the simplest way to initiate a dial up: this function dials the given
// ISP (exact meaning of the parameter depends on the platform), returns
// TRUE on success or FALSE on failure and logs the appropriate error
// message in the latter case.
virtual bool Dial(const wxString& nameOfISP,
const wxString& username,
const wxString& password) = 0;
// hang up the currently active dial up connection
virtual bool HangUp() = 0;
// online status
// -------------
// returns TRUE if the computer is connected to the network: under Windows,
// this just means that a RAS connection exists, under Unix we check that
// the "well-known host" (as specified by SetWellKnownHost) is reachable
virtual bool IsOnline() = 0;
// sometimes the built-in logic for determining the online status may fail,
// so, in general, the user should be allowed to override it. This function
// allows to forcefully set the online status - whatever our internal
// algorithm may think about it.
virtual void SetOnlineStatus(bool isOnline = TRUE) = 0;
// set misc wxDialUpManager options
// --------------------------------
// enable automatical checks for the connection status and sending of
// wxEVT_DIALUP_CONNECTED/wxEVT_DIALUP_DISCONNECTED events. The interval
// parameter is only for Unix where we do the check manually: under
// Windows, the notification about the change of connection status is
// instantenous.
//
// Returns FALSE if couldn't set up automatic check for online status.
virtual bool EnableAutoCheckOnlineStatus(size_t nSeconds = 60) = 0;
// disable automatic check for connection status change - notice that the
// wxEVT_DIALUP_XXX events won't be sent any more neither.
virtual void DisableAutoCheckOnlineStatus() = 0;
// under Unix, the value of well-known host is used to check whether we're
// connected to the internet. It's unused under Windows, but this function
// is always safe to call. The default value is www.yahoo.com.
virtual void SetWellKnownHost(const wxString& hostname) = 0;
private:
friend class WXDLLEXPORT wxApp;
// only for wxApp usage: clean up.
static void Delete()
{
if ( ms_dialUpManager )
{
delete ms_dialUpManager;
ms_dialUpManager = (wxDialUpManager *)NULL;
}
}
// this function should create and return the object of the
// platform-specific class derived from wxDialUpManager. It's implemented
// in the platform-specific source files.
static wxDialUpManager *Create();
// the unique instance of this class
static wxDialUpManager *ms_dialUpManager;
};
// ----------------------------------------------------------------------------
// DIALUP events processing
// ----------------------------------------------------------------------------
// the event class for the dialup events
class WXDLLEXPORT wxDialUpEvent : public wxEvent
{
public:
wxDialUpEvent(bool isConnected) : wxEvent(isConnected)
{
SetEventType(isConnected ? wxEVT_DIALUP_CONNECTED
: wxEVT_DIALUP_DISCONNECTED);
}
// is this a CONNECTED or DISCONNECTED event?
bool IsConnectedEvent() const { return m_id != 0; }
};
// the type of dialup event handler function
typedef void (wxObject::*wxDialUpEventFunction)(wxDialUpEvent&);
// macros to catch dialup events
#define EVT_DIALUP_CONNECTED(func) { wxEVT_DIALUP_CONNECTED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxDialUpEventFunction) & func, NULL},
#define EVT_DIALUP_DISCONNECTED(func) { wxEVT_DIALUP_DISCONNECTED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxDialUpEventFunction) & func, NULL},
#endif // wxUSE_DIALUP_MANAGER
#endif // _WX_NET_H