www.pudn.com > simplec++codeforp2p.rar > wsys.cpp


// ------------------------------------------------
// File : wsys.cpp
// Date: 4-apr-2002
// Author: giles
// Desc: 
//		WSys derives from Sys to provide basic win32 functions such as starting threads.
//
// (c) 2002 peercast.org
// ------------------------------------------------
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// ------------------------------------------------


#include 
#include 
#include 
#include "win32/wsys.h"
#include "win32/wsocket.h"
#include "stats.h"
#include "peercast.h"
#include  
#include 
 
// ---------------------------------
WSys::WSys(HWND w)
{
	stats.clear();
	
	rndGen.setSeed(getTime());
	
	mainWindow = w;
	WSAClientSocket::init();

	rndSeed = rnd(); 
}
// --------------------------------- 
double WSys::getDTime() 
{ 
   struct _timeb timebuffer; 
 
   _ftime( &timebuffer ); 
 
   return (double)timebuffer.time+(((double)timebuffer.millitm)/1000); 
} 
// ---------------------------------
unsigned int WSys::getTime()
{
	time_t ltime;
	time( <ime );
	return ltime;
}

// ---------------------------------
ClientSocket *WSys::createSocket()
{
    return new WSAClientSocket();
}
// --------------------------------- 
void WSys::endThread(ThreadInfo *info) 
{ 
}              
// --------------------------------- 
void WSys::waitThread(ThreadInfo *info, int timeout) 
{ 
	switch(WaitForSingleObject((void *)info->handle, timeout)) 
	{ 
      case WAIT_TIMEOUT: 
          throw TimeoutException(); 
          break; 
	} 
} 
  

// ---------------------------------
bool	WSys::startThread(ThreadInfo *info)
{
	info->active = true; 
 
	typedef unsigned ( __stdcall *start_address )( void * ); 
 
	unsigned int threadID; 
	info->handle = (unsigned int)_beginthreadex( NULL, 0, (start_address)info->func, info, 0, &threadID );
	 
    if(info->handle == 0)  
		return false; 

	return true;

}
// ---------------------------------
void	WSys::sleep(int ms)
{
	Sleep(ms);
}

// ---------------------------------
void WSys::appMsg(long msg, long arg)
{
	//SendMessage(mainWindow,WM_USER,(WPARAM)msg,(LPARAM)arg);
}

// --------------------------------------------------
void WSys::callLocalURL(const char *str,int port)
{
	char cmd[512];
	sprintf(cmd,"http://localhost:%d/%s",port,str);
	ShellExecute(mainWindow, NULL, cmd, NULL, NULL, SW_SHOWNORMAL);
}

// ---------------------------------
void WSys::getURL(const char *url)
{
	if (mainWindow)
		if (strnicmp(url,"http://",7) || strnicmp(url,"mailto:",7))
			ShellExecute(mainWindow, NULL, url, NULL, NULL, SW_SHOWNORMAL);
}
// ---------------------------------
void WSys::exit()
{
	if (mainWindow)
		PostMessage(mainWindow,WM_CLOSE,0,0);
	else
		::exit(0);
}
// --------------------------------------------------
void WSys::executeFile(const char *file)
{
    ShellExecute(NULL,"open",file,NULL,NULL,SW_SHOWNORMAL);  
}