//----------------------------------------------------------------------------
// File: netabstract.h
//
// Desc: see main.cpp
//
// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved.
//-----------------------------------------------------------------------------
#ifndef _NETABSTRACT_H
#define _NETABSTRACT_H


#define SERVER_ID   1
enum { DISCONNNECT_REASON_UNKNOWN = 0, DISCONNNECT_REASON_CLIENT_OUT_OF_DATE };



//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
interface   INetServer
{
public:
    virtual ~INetServer() {} ;

    virtual HRESULT OnPacket( DWORD dwFrom, void* dwData, DWORD dwSize ) = 0;
    virtual void    OnAddConnection( DWORD dwID ) = 0;
    virtual void    OnRemoveConnection( DWORD dwID ) = 0;
    virtual void    OnSessionLost( DWORD dwReason ) = 0;
};





//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
interface   INetClient
{
public:
    virtual ~INetClient() {} ;

    virtual HRESULT OnPacket( DWORD dwFrom, void* dwData, DWORD dwSize ) = 0;
    virtual void    OnSessionLost( DWORD dwReason ) = 0;
};




//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
interface   IOutboundServer
{
public:
    virtual HRESULT SendPacket( DWORD dwTo, void* dwData, DWORD dwSize, 
                                BOOL dwGuaranteed, DWORD dwTimeout ) = 0;
    virtual HRESULT GetConnectionInfo( DWORD dwID, TCHAR* strConnectionInfo, DWORD dwBufLength ) = 0;
    virtual HRESULT RejectClient( DWORD dwID, HRESULT hrReason ) = 0;
};




//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
interface   IOutboundClient
{
public:
    virtual HRESULT SendPacket( void* dwData, DWORD dwSize, 
                                BOOL dwGuaranteed, DWORD dwTimeout ) = 0;
    virtual DWORD GetThroughputBPS() = 0;
    virtual DWORD GetRoundTripLatencyMS() = 0;
    virtual BOOL  IsSessionLost() = 0;
    virtual DWORD GetSessionLostReason() = 0;
    virtual HRESULT GetConnectionInfo( TCHAR* strConnectionInfo, DWORD dwBufLength ) = 0;
};



#endif
