//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================//

#ifndef INETWORK_H
#define INETWORK_H
#ifdef _WIN32
#pragma once
#endif

class IConnectionlessPacketHandler;

abstract_class INetwork
{
public:
	virtual	~INetwork( void ) {};

	virtual void Init( void ) = 0;
	virtual void Config (bool multiplayer);	
	virtual void IsMultiplayer( void ) = 0; // true = full MP mode, false = loopback SP mode
	virtual void IsEnabled( void ) = 0;	

	// shuts down Network, closes all UPD/TCP channels
	virtual void Shutdown( void ) = 0;

	// must be called each system frame to do any asynchronouse TCP stuff 
	virtual void RunFrame( double time ) = 0;

	virtual void ProcessSocket( netsrc_t sock, IConnectionlessPacketHandler * handler ) = 0;

	virtual void OutOfBandPrintf(netsrc_t sock, netadr_t &adr, PRINTF_FORMAT_STRING const char *format, ...) = 0;
	virtual void SendConnectionless(netsrc_t sock, netadr_t &adr, unsigned char * data, int length ) = 0;

	virtual void LogBadPacket(netpacket_t * packet) = 0;
	
	// Address conversion
	virtual bool StringToAdr ( const char *s, netadr_t *a) = 0;

	// Convert from host to network byte ordering
	virtual unsigned short HostToNetShort( unsigned short us_in );

	// and vice versa
	virtual unsigned short NetToHostShort( unsigned short us_in );
	

	
};


#endif // INETWORK_H