⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osxapp.cpp

📁 P2P应用 : Peercast的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* *  osxapp.cpp *  PeerCast * *  Created by mode7 on Mon Apr 12 2004. *  Copyright (c) 2002-2004 peercast.org. All rights reserved. * */// ------------------------------------------------// 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 "osxapp.h"#include <string>enum {	 kChannelColumn   = 'CHAN'	,kBitRateColumn   = 'BITR'	,kStreamColumn    = 'STRM'	,kRelayColumn     = 'TRLY'	,kListenersColumn = 'LRLY'	,kStatusColumn    = 'STAT'	,kKeepColumn      = 'KEEP'		,kNumProps = 7};enum {	 kEventClassPeercast   = 'PEER'	,kEventStartChannel    = 'STRT'	,kEventUpdateChannel   = 'UPDT'	,kEventStopChannel     = 'STOP'	,kEventParamChanStatus = 'CSTA'	,kEventParamSystem	   = 'PSYS'	,typeChanStatus        = 'CSTA'};UInt32 propIDList[kNumProps] = {	kChannelColumn	,kBitRateColumn	,kStreamColumn	,kRelayColumn	,kListenersColumn	,kStatusColumn	,kKeepColumn};static const UInt32 kPeerCast_AppSignature = FOUR_CHAR_CODE('PCTT');static const UInt32 kPeerCast_TabControlID = 1000;static const char* skYPString = "http://yp.peercast.org/";static const ControlID skBumpButtonID		   = { 'RLBT', 1000 };static const ControlID skCommentButtonID	   = { 'RLBT', 1001 };static const ControlID skUpdateVersionButtonID = { 'PCST', 1007 };OSXPeercastApp::OSXPeercastApp( const char *appPath, const char *iniFilename, int argc, char* argv[]								,WindowRef window, const ControlID& dbControlID ): mIniFileName    (),mRelayBrowser    ( window, dbControlID, 					static_cast<DataBrowserItemDataProcPtr>(itemDataCallback), 					static_cast<DataBrowserItemNotificationProcPtr>(itemNotificationCallback) ),mWindowRef       ( window ),mUpTime		     ('PCST', 1001),mDirectConnections  ('PCST', 1002),mRelayConnections   ('PCST', 1003),mCinCoutConnections ('PCST', 1004),mPGNUConnections    ('PCST', 1005),mIncomingConnections('PCST', 1006),mChannelList		  ( ),mLock				  ( ),mTabControl		  ( kPeerCast_AppSignature, kPeerCast_TabControlID, window ),mAppEventHandler     ( OSXPeercastApp::appEventHandler ),mMainWindowHandler   ( OSXPeercastApp::mainWindowHandler ),mPeercastEventHandler( OSXPeercastApp::peercastEventHandler ),mAppPath             ( appPath ){	mIniFileName.set(iniFilename);		if (argc > 2)	{		if (strcmp(argv[1],"-inifile")==0)			mIniFileName.setFromString(argv[2]);	}		DataBrowserPropertyFlags flags;		mRelayBrowser.getPropertyFlags( kKeepColumn, &flags );		flags |= kDataBrowserPropertyIsEditable;		mRelayBrowser.setPropertyFlags( kKeepColumn, flags );		installAppEventHandler();	mTabControl.installHandler();	installWindowHandler( window );		installPeercastEventHandler( window );		enableNewVersionButton( false );}//------------------------------------------------------------------------OSStatus OSXPeercastApp::installAppEventHandler(){    static const EventTypeSpec appEvents[] =	{		{ kEventClassCommand, kEventCommandProcess }	};    return InstallApplicationEventHandler(  mAppEventHandler.eventHandler()										   ,GetEventTypeCount( appEvents )										   ,appEvents										   ,NULL										   ,NULL ); }//------------------------------------------------------------------------OSStatus OSXPeercastApp::installWindowHandler( WindowRef window ){	static const EventTypeSpec mainWindowEvents[] =	{		 { kEventClassCommand, kEventCommandProcess }		,{ kEventClassWindow,  kEventWindowActivated }	};	return InstallWindowEventHandler(  window									  ,mMainWindowHandler.eventHandler()							          ,GetEventTypeCount( mainWindowEvents )							          ,mainWindowEvents							          ,this							          ,NULL );}//------------------------------------------------------------------------OSStatus OSXPeercastApp::appEventHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ){	HICommand command;		OSStatus err = GetEventParameter(  inEvent									  ,kEventParamDirectObject									  ,typeHICommand									  ,NULL									  ,sizeof(HICommand)									  ,NULL									  ,&command );					  	if( err == noErr )	{		switch( command.commandID )		{			case FOUR_CHAR_CODE('PHLP'):				sys->getURL("http://www.peercast.org/help.php"); 				break;		}	}	return eventNotHandledErr;}//------------------------------------------------------------------------OSStatus OSXPeercastApp::mainWindowHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ){	HICommand command;	OSXPeercastApp *pOSXApp = static_cast<OSXPeercastApp*>( inUserData );		OSStatus err = GetEventParameter(  inEvent									  ,kEventParamDirectObject									  ,typeHICommand									  ,NULL									  ,sizeof(HICommand)									  ,NULL									  ,&command );									  	if( err == noErr )	{		switch( command.commandID )		{			case FOUR_CHAR_CODE('save'):				pOSXApp->saveSettings();				break;			case FOUR_CHAR_CODE('BUMP'):				pOSXApp->onBumpClicked();								break;			case FOUR_CHAR_CODE('CMNT'):				pOSXApp->onCommentClicked();				break;			case FOUR_CHAR_CODE('YPBT'):				{					char serverIP[256];					char buf[256];					servMgr->serverHost.toStr( serverIP );					sprintf( buf, "%s?host=%s", skYPString, serverIP );					sys->getURL( buf );				}				break;			case FOUR_CHAR_CODE('UPDT'):				{					sys->callLocalURL("admin?cmd=upgrade",servMgr->serverHost.port);				}				break;		}	}	return eventNotHandledErr;}//------------------------------------------------------------------------OSStatus OSXPeercastApp::installPeercastEventHandler( WindowRef theWindow ){	static const EventTypeSpec peercastEventTypes[] =	{		 { kEventClassPeercast, kEventStartChannel }		,{ kEventClassPeercast, kEventUpdateChannel }		,{ kEventClassPeercast, kEventStopChannel }	};		return InstallEventHandler(  GetApplicationEventTarget() 								,mPeercastEventHandler.eventHandler()								,GetEventTypeCount( peercastEventTypes )								,peercastEventTypes, this, NULL );}//------------------------------------------------------------------------void OSXPeercastApp::enableNewVersionButton( const Boolean visible ){		ControlRef newVerButton;	GetControlByID( mWindowRef, &skUpdateVersionButtonID, &newVerButton );			if( newVerButton != NULL )	{		SetControlVisibility( newVerButton, visible, true );		//Draw1Control( tabControl );	}}//------------------------------------------------------------------------void OSXPeercastApp::addChanStatus( TChanStatusPtr& chanStatus ){	const DataBrowserItemID itemID = reinterpret_cast<DataBrowserItemID>(chanStatus.get());	OSStatus err = mRelayBrowser.addItems( kDataBrowserNoItem, 1, &itemID, kChannelColumn );	if( err == noErr )	{		mChannelList.push_back( chanStatus );	}}//------------------------------------------------------------------------void OSXPeercastApp::updateChanStatus( ChanStatus& newStatus ){			TChannelList::iterator iter = findChannel( newStatus.getId() );		if( iter != mChannelList.end() )	{		TChanStatusPtr& chanStatus = *iter;					chanStatus->update( newStatus ); // copy new status		const DataBrowserItemID itemID = reinterpret_cast<DataBrowserItemID>(chanStatus.get());		OSStatus err = mRelayBrowser.updateItems( kDataBrowserNoItem, 1, &itemID, kChannelColumn, kDataBrowserNoItem );	}}//------------------------------------------------------------------------void OSXPeercastApp::removeChanStatus( GnuID& id ){	TChannelList::iterator iter = findChannel( id );		if( iter != mChannelList.end() ) 	{		const TChanStatusPtr& chanStatus = *iter;		const DataBrowserItemID itemID = reinterpret_cast<DataBrowserItemID>(chanStatus.get());		OSStatus err = mRelayBrowser.removeItems( kDataBrowserNoItem, 1, &itemID, kChannelColumn );				mChannelList.erase( iter ); // remove from list	}}//------------------------------------------------------------------------OSStatus OSXPeercastApp::peercastEventHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ){	switch( GetEventClass( inEvent ) )	{		case kEventClassPeercast:			{				OSXPeercastApp *pOSXApp = static_cast<OSXPeercastApp*>( inUserData );									switch( GetEventKind( inEvent ) )				{					case kEventStartChannel:						{							TChanXferPkt xferPkt;														OSStatus err = GetEventParameter( inEvent, kEventParamChanStatus,															  typeChanStatus, NULL,															  sizeof(TChanXferPkt), NULL,															  &xferPkt );							TChanStatusPtr chanStatus( xferPkt.mpData );							if( err != noErr )								return err;															pOSXApp->addChanStatus( chanStatus );						}						break;											case kEventUpdateChannel:						{							TChanXferPkt xferPkt;													OSStatus err = GetEventParameter( inEvent, kEventParamChanStatus, typeChanStatus, NULL, sizeof(TChanXferPkt), NULL, &xferPkt );														TChanStatusPtr chanStatus( xferPkt.mpData );														if( err != noErr )								return err;															if( chanStatus.get() != NULL )							{																	pOSXApp->updateChanStatus( *chanStatus );							}						}						break;											case kEventStopChannel:						{							GnuID chanId;														OSStatus err = GetEventParameter( inEvent, kEventParamChanStatus, typeChanStatus, NULL, sizeof(GnuID), NULL, &chanId );							if( err != noErr )								return err;															pOSXApp->removeChanStatus( chanId );						}						break;				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -