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

📄 osxapp.cpp

📁 P2P应用 : Peercast的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}			break;	}		return eventNotHandledErr;}//------------------------------------------------------------------------void OSXPeercastApp::initAPP(){	mTabControl.updateSettings();//	showStationStats();}//------------------------------------------------------------------------void OSXPeercastApp::notifyMessage( ServMgr::NOTIFY_TYPE type, const char *message ){	switch( type )	{		case ServMgr::NT_UPGRADE:			{				enableNewVersionButton(true);			}			break;					case ServMgr::NT_PEERCAST:			break;	}}//------------------------------------------------------------------------void OSXPeercastApp::channelStart(ChanInfo *pChanInfo){	if( Channel *pChannel = chanMgr->findChannelByID( pChanInfo->id ) )	{		CEvent peercastEvent( kEventClassPeercast,  kEventStartChannel );				TChanStatusPtr chanStatus( new ChanStatus( *pChannel ) );				if( chanStatus.get() != NULL )		{			chanStatus->update( *pChannel );						TChanXferPkt xferPkt( chanStatus.release() );						peercastEvent.setParameter( kEventParamChanStatus, typeChanStatus, sizeof(TChanXferPkt), &xferPkt );			peercastEvent.postToQueue( GetMainEventQueue(), kEventPriorityHigh );		}	}}//------------------------------------------------------------------------void OSXPeercastApp::channelUpdate(ChanInfo *pChanInfo ){	if( Channel *pChannel = chanMgr->findChannelByID( pChanInfo->id ) )	{		CEvent peercastEvent( kEventClassPeercast, kEventUpdateChannel );				TChanStatusPtr chanStatus( new ChanStatus( *pChannel ) );				//if( chanStatus.valid() )		if( chanStatus.get() != NULL )		{			chanStatus->update( *pChannel );						TChanXferPkt xferPkt( chanStatus.release() );						peercastEvent.setParameter( kEventParamChanStatus, typeChanStatus, sizeof(TChanXferPkt), &xferPkt );			peercastEvent.postToQueue( GetMainEventQueue(), kEventPriorityHigh );		}	}}//------------------------------------------------------------------------void OSXPeercastApp::channelStop(ChanInfo *pChanInfo){	if( Channel *pChannel = chanMgr->findChannelByID( pChanInfo->id ) )	{		CEvent peercastEvent( kEventClassPeercast,  kEventStopChannel );				peercastEvent.setParameter( kEventParamChanStatus, typeChanStatus, sizeof(GnuID), &pChanInfo->id );		peercastEvent.postToQueue( GetMainEventQueue(), kEventPriorityHigh );	}}//------------------------------------------------------------------------OSStatus setItemDataText( DataBrowserItemDataRef itemData, const char* text ){	if( CFStringRef controlText = CFStringCreateWithFormat( NULL, NULL, CFSTR("%s"), text ) )	{			OSStatus err = SetDataBrowserItemDataText( itemData, controlText );		CFRelease( controlText );			return err;	}		return noErr;}//------------------------------------------------------------------------OSStatus setItemDataInteger( DataBrowserItemDataRef itemData, const int value ){	if( CFStringRef controlText = CFStringCreateWithFormat( NULL, NULL, CFSTR("%d"), value ) )	{			OSStatus err = SetDataBrowserItemDataText( itemData, controlText );		CFRelease( controlText );			return err;	}		return noErr;}//------------------------------------------------------------------------OSStatus OSXPeercastApp::itemDataCallback( ControlRef browser, 						   DataBrowserItemID itemID,						   DataBrowserPropertyID property,						   DataBrowserItemDataRef itemData,						   Boolean changeValue ){	char workBuffer[64];	OSStatus status = noErr;		if( !changeValue )	{		ChanStatus *pChanStatus = reinterpret_cast<ChanStatus *>(itemID);					switch( property )		{			case kChannelColumn:				return setItemDataText( itemData, pChanStatus->getName().c_str() );			case kBitRateColumn:				return setItemDataInteger( itemData, pChanStatus->getBitrate() );							case kStreamColumn:				return setItemDataText( itemData, pChanStatus->getStreamType().c_str() );							case kRelayColumn:				{					sprintf( workBuffer, "%d / %d", pChanStatus->totalListeners(), pChanStatus->totalRelays() );					return setItemDataText( itemData, workBuffer );				}							case kListenersColumn:				{					sprintf( workBuffer, "%d / %d", pChanStatus->localListeners(), pChanStatus->localRelays() );					return setItemDataText( itemData, workBuffer );				}							case kStatusColumn:				return setItemDataText( itemData, pChanStatus->getStatus().c_str() );							case kKeepColumn:				return	SetDataBrowserItemDataButtonValue( itemData, pChanStatus->stayConnected() ? kThemeButtonOn : kThemeButtonOff );		}	}	else	{		ChanStatus *pChanStatus = reinterpret_cast<ChanStatus *>(itemID);		switch( property )		{			case kKeepColumn:				{					ThemeButtonValue buttonValue;					status = GetDataBrowserItemDataButtonValue( itemData, &buttonValue );											if( status == noErr )					{						pChanStatus->stayConnected() = (buttonValue==kThemeButtonOn);						Channel *pChannel = chanMgr->findChannelByID( pChanStatus->getId() );									if( pChannel )						{							pChannel->stayConnected = pChanStatus->stayConnected();						}										}					return SetDataBrowserItemDataButtonValue( itemData, buttonValue );				}				break;		}				}	return errDataBrowserPropertyNotSupported;}OSStatus OSXPeercastApp::redisplayInfo(){	showStationStats();		return noErr;}void OSXPeercastApp::showStationStats(){	if( !servMgr || !chanMgr )		return;			char workBuffer[256];	String upTimeString;		upTimeString.setFromStopwatch(servMgr->getUptime());	mUpTime.setText( mWindowRef, upTimeString.cstr() );		mDirectConnections.setIntValue( mWindowRef, servMgr->numStreams( Servent::T_DIRECT, true ) );	mRelayConnections.setIntValue( mWindowRef, servMgr->numStreams( Servent::T_RELAY, true ) );		sprintf( workBuffer, "%d / %d", servMgr->numConnected(Servent::T_CIN), servMgr->numConnected(Servent::T_COUT) );	mCinCoutConnections.setText( mWindowRef, workBuffer );	mPGNUConnections.setIntValue( mWindowRef, servMgr->numConnected(Servent::T_PGNU) );	mIncomingConnections.setIntValue( mWindowRef, servMgr->numActive(Servent::T_INCOMING));}void OSXPeercastApp::handleButtonEvent( TButtonCallback fButtonCallback ){	if( Handle selectedItems = NewHandle(0) )	{		OSStatus err = mRelayBrowser.getItems( kDataBrowserNoItem, false, kDataBrowserItemIsSelected, selectedItems );				if( err == noErr )		{			const UInt32 numSelectedItems = GetHandleSize(selectedItems) / sizeof(DataBrowserItemID);						if( numSelectedItems > 0 )			{				(*this.*fButtonCallback)( selectedItems, numSelectedItems );			}		}				DisposeHandle( selectedItems );	}}void OSXPeercastApp::commentClicked( const Handle selectedItems, const UInt32 numSelectedItems ){	char strId[128];	char urlBuf[256];		const DataBrowserItemID *pItemIDList = reinterpret_cast<const DataBrowserItemID *>(selectedItems[0]);	for(int chIndex=0; chIndex<numSelectedItems; ++chIndex)	{		ChanStatus *pChannel = reinterpret_cast<ChanStatus*>(static_cast<DataBrowserItemID>(pItemIDList[chIndex]));				if( pChannel )		{			String channelName;			channelName.set( pChannel->getName().c_str(), String::T_ASCII );			channelName.convertTo( String::T_ESC );			pChannel->getId().toStr( strId );						sprintf( urlBuf, "%schat.php?cid=%s&cn=%s", skYPString, strId, channelName.cstr() );			sys->getURL( urlBuf );		}	}}void OSXPeercastApp::bumpClicked( const Handle selectedItems, const UInt32 numSelectedItems ){	const DataBrowserItemID *pItemIDList = reinterpret_cast<const DataBrowserItemID *>(selectedItems[0]);	for(int chIndex=0; chIndex<numSelectedItems; ++chIndex)	{		ChanStatus *pChanStatus = reinterpret_cast<ChanStatus*>(static_cast<DataBrowserItemID>(pItemIDList[chIndex]));				if( pChanStatus )		{			mLock.on();			Channel *pChannel = chanMgr->findChannelByID( pChanStatus->getId() );						if( pChannel )			{				pChannel->bump = true;			}			mLock.off();		}	}}void OSXPeercastApp::itemNotificationCallback( ControlRef browser,												  DataBrowserItemID itemID,												  DataBrowserItemNotification message ){	OSStatus status = noErr;		WindowRef window = GetControlOwner( browser );		switch( message )	{		case kDataBrowserItemSelected:			{				ControlRef bumpButton;				ControlRef commentButton;								GetControlByID( window, &skBumpButtonID, &bumpButton );				GetControlByID( window, &skCommentButtonID, &commentButton );								if( bumpButton )				{									EnableControl( bumpButton );				}								if( commentButton )				{					EnableControl( commentButton );				}			}			break;					case kDataBrowserItemDeselected:			{				UInt32 numSelected;				GetDataBrowserItemCount( browser, kDataBrowserNoItem, false, kDataBrowserItemIsSelected, &numSelected );								if( numSelected == 0 )				{					ControlRef bumpButton;					ControlRef commentButton;									GetControlByID( window, &skBumpButtonID, &bumpButton );					GetControlByID( window, &skCommentButtonID, &commentButton );									if( bumpButton )					{										DisableControl( bumpButton );					}									if( commentButton )					{						DisableControl( commentButton );					}				}			}			break;	}}

⌨️ 快捷键说明

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