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

📄 ircmain.cpp

📁 非常出名开源客户端下载的程序emule
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					int index1 = message.Find( "|" );
					if( index1 == -1 || index1 == message.GetLength() )
						return;
					int index2 = message.Find( "|", index1+1 );
					if( index2 == -1 || index1 > index2 )
						return;
					CString sverify = message.Mid(index1+1, index2-index1-1);
					if( verify != atoi(sverify))
						return;
					SetVerify();
					int counter = 0;
					if( message.Find( '|' ) != -1 ){
						index1 = message.Find( '|' );
						index2 = message.Find( '|', index1+1 );
						if( index1 >= index2 )
							return;
						sverify = message.Mid( index1 + 1, index2-index1-1 );
						CString temp = message.Mid( index1 + 1, index2-index1-1 );
						index1 = message.Find( ':', index2+1);
						if( index2 >= index1 )
							return;
						uint32 newClientID = atoi(message.Mid( index2 + 1, index1 - index2 -1));
						index2 = message.Find( '|', index1+1);
						if( index1 >= index2 || newClientID < 16777216 )
							return;
						uint32 newClientPort = atoi(message.Mid( index1 + 1, index2 - index1 -1));
						index1 = message.Find( ':', index2+1);
						if( index2 >= index1 )
							return;
						uint32 newClientServerIP = atoi(message.Mid( index2 + 1, index1 - index2 -1));
						index2 = message.Find( '|', index1+1);
						if( index1 >= index2 )
							return;
						uint32 newClientServerPort = atoi(message.Mid( index1 + 1, index2 - index1 -1));
						CString newClientFullIp;
						newClientFullIp.Format("%i.%i.%i.%i",(uint8)newClientID,(uint8)(newClientID>>8),(uint8)(newClientID>>16),(uint8)(newClientID>>24));
						theApp.friendlist->AddFriend( NULL, 0, newClientID, newClientPort, 0, source, 0);
					}
					return;
				}
			}
			else{
				m_pwndIRC->AddMessage( source, source, message);
				return;
			}
		}
	}
	if( command == "JOIN" ){
		if( source == nick ){
			m_pwndIRC->AddInfoMessage( target, GetResString(IDS_IRC_HASJOINED), source, target );
		return;
		}
		if( !theApp.glob_prefs->GetIrcIgnoreInfoMessage() )
			m_pwndIRC->AddInfoMessage( target, GetResString(IDS_IRC_HASJOINED), source, target );
		m_pwndIRC->NewNick( target, source );
		return;

	}
	if( command == "PART" ){
		CString test = nick;
		if ( source == nick ){
			m_pwndIRC->RemoveChannel( target );
			return;
		}
		m_pwndIRC->RemoveNick( target, source );
		if( !theApp.glob_prefs->GetIrcIgnoreInfoMessage() )
			m_pwndIRC->AddInfoMessage( target, GetResString(IDS_IRC_HASPARTED), source, target, message );
		return;
	}

	if( command == "TOPIC" ){
		m_pwndIRC->SetTitle( target, message );
		return;
	}

	if( command == "QUIT" ){
		m_pwndIRC->DeleteNickInAll( source, message );
		return;
	}

	if( command == "NICK" ){
		if( source == nick ){
			nick = target;
//			m_pwenIRC->SetNick( nick );
		}
		m_pwndIRC->ChangeAllNick( source, target );
		return;
	}

	if( command == "KICK" ){
		target2Index = message.Find(':');
		if( target2Index > 0 ){
			target2 = message.Mid( 1, target2Index - 2);
			message = message.Mid( target2Index + 1 );
		}
		if( target2 == nick ){
			m_pwndIRC->RemoveChannel( target );
			m_pwndIRC->AddStatus(  GetResString(IDS_IRC_WASKICKEDBY), target2, source, message );
			return;
		}
		m_pwndIRC->RemoveNick( target, target2 );
		if( !theApp.glob_prefs->GetIrcIgnoreInfoMessage() )
			m_pwndIRC->AddInfoMessage( target, GetResString(IDS_IRC_WASKICKEDBY), target2, source, message );
		return;
	}
	if( command == "MODE" ){
		commandIndex = message.Find( ' ', 1 );
		command = message.Mid( 1, commandIndex - 1 );
		command.Replace( "\004", "%" );
		target2 = message.Mid( commandIndex + 1 );
		m_pwndIRC->ParseChangeMode( target, source, command, target2 );
		return;
	}
	if( command == "NOTICE"){
		m_pwndIRC->NoticeMessage( source, message );
		return;
	}
	if( command == "001" ){
		m_pwndIRC->SetLoggedIn( true );
		if( theApp.glob_prefs->GetIRCListOnConnect() )
			ircsocket->SendString("list");
		if( theApp.glob_prefs->GetIrcUsePerform() )
			ParsePerform();
	}

	if( command == "321" ){
		m_pwndIRC->ResetServerChannelList();
		return;
	}

	if( command == "322"){
		CString chanName, chanNum, chanDesc;
		int chanNameIndex, chanNumIndex, chanDescIndex;
		chanNameIndex = message.Find( ' ' );
		chanNumIndex = message.Find( ' ', chanNameIndex + 1 );
		chanDescIndex = message.Find( ' ', chanNumIndex + 1);
		chanName = message.Mid( chanNameIndex + 1,  chanNumIndex - chanNameIndex - 1 );
		chanNum = message.Mid( chanNumIndex + 1, chanDescIndex - chanNumIndex - 1 );
		if( chanDescIndex > 0 ){
			chanDescIndex = message.Find( ' ', chanDescIndex+1 );
			if( chanDescIndex > 0)
				chanDesc = message.Mid( chanDescIndex );
			else
				chanDesc = "";
		}
		m_pwndIRC->AddChannelToList( chanName, chanNum, chanDesc );
		return;
	}
	if( command == "332" ){
		target2 = message.Mid( message.Find( '#' ), message.Find( ':' )-message.Find( '#' ) -1 );
		message = message.Mid( message.Find(':') + 1);
		m_pwndIRC->SetTitle( target2, message );
		m_pwndIRC->AddInfoMessage( target2, "* Channel Title: %s", message );
		return;
	}
	if( command == "353" ){
		int getNickChannelIndex = -1;
		CString getNickChannel;
		int getNickIndex = 1;
		CString getNick;
		int count = 0;
		VERIFY ( (getNickChannelIndex = rawMessage.Find(' ', targetIndex + 1)) != (-1) );
		getNickChannelIndex = rawMessage.Find(' ', targetIndex + 1);
		getNickIndex = rawMessage.Find( ' ', getNickChannelIndex + 3);
		getNickChannel = rawMessage.Mid( getNickChannelIndex + 2, getNickIndex - getNickChannelIndex - 2);
		getNickChannelIndex = rawMessage.Find( ':', getNickChannelIndex );
		getNickIndex = rawMessage.Find( ' ', getNickChannelIndex);
		rawMessage.Replace( "\004", "%" );
		while( getNickIndex > 0 ){
			count ++;
			getNick = rawMessage.Mid( getNickChannelIndex + 1, getNickIndex - getNickChannelIndex - 1);
			getNickChannelIndex = getNickIndex;
			m_pwndIRC->NewNick( getNickChannel, getNick );
			getNickIndex = rawMessage.Find( ' ', getNickChannelIndex + 1 );
		}
		return;
	}
	if( command == "433" ){
		if( !m_pwndIRC->GetLoggedIn() )
			Disconnect();
		m_pwndIRC->AddStatus(  GetResString(IDS_IRC_NICKUSED));
		return;
	}
	m_pwndIRC->AddStatus( message );
}

void CIrcMain::SendLogin(){
	ircsocket->SendString(user);
	CString temp = "NICK " + nick;
	ircsocket->SendString(temp);
}

void CIrcMain::ParsePerform(){
	CString rawPerform = theApp.glob_prefs->GetIrcPerformString();
	int index = 0;
	CString nextPerform;
	while( rawPerform.Find('|') != -1 ){
		index = rawPerform.Find( '|' );
		nextPerform = rawPerform.Left( index );
		nextPerform.TrimLeft( ' ' );
		if( nextPerform.Left(1) == '/' )
			nextPerform = nextPerform.Mid(1);
		if (nextPerform.Left(3) == "msg")
			nextPerform = CString("PRIVMSG") + nextPerform.Mid(3);
		if( (nextPerform.Left(16)).CompareNoCase( "PRIVMSG nickserv"  )== 0){
			nextPerform = CString("ns") + nextPerform.Mid(16);
		}
		if( (nextPerform.Left(16)).CompareNoCase( "PRIVMSG chanserv" )== 0){
			nextPerform = CString("cs") + nextPerform.Mid(16);
		}
		ircsocket->SendString( nextPerform );
		rawPerform = rawPerform.Mid( index+1 );
	}
	if( !rawPerform.IsEmpty() ){
		rawPerform.TrimLeft( ' ' );
		if( rawPerform.Left(1) == '/' )
			rawPerform = rawPerform.Mid(1);
		if (rawPerform.Left(3) == "msg")
			rawPerform = CString("PRIVMSG") + rawPerform.Mid(3);
		if( (rawPerform.Left(16)).CompareNoCase( "PRIVMSG nickserv"  )== 0){
			rawPerform = CString("ns") + rawPerform.Mid(16);
		}
		if( (rawPerform.Left(16)).CompareNoCase( "PRIVMSG chanserv" )== 0){
			rawPerform = CString("cs") + rawPerform.Mid(16);
		}
		if( !rawPerform.IsEmpty() )
			ircsocket->SendString( rawPerform );
	}
}

void CIrcMain::Connect(){
	ircsocket = new CIrcSocket(this);
	nick = (CString)theApp.glob_prefs->GetIRCNick();
	nick.Replace(".", "");
	nick.Replace(" ", "");
	nick.Replace(":", "");
	nick.Replace("/", "");
	nick.Replace("@", "");
	nick = nick.Left(20);
	version = "eMule" + (CString)CURRENT_VERSION_LONG + (CString)Irc_Version;
	user = "USER " + nick + " 8 * :" + version;
	ircsocket->Create();
	ircsocket->Connect();
}

void CIrcMain::Disconnect(bool isshuttingdown){
	ircsocket->Close();
	delete ircsocket;
	if( !isshuttingdown )
		m_pwndIRC->SetConnectStatus(false);
}

void CIrcMain::SetConnectStatus( bool connected ){
	m_pwndIRC->SetConnectStatus( connected );
}

int CIrcMain::SendString( CString send ){
	return ircsocket->SendString(send);
}

⌨️ 快捷键说明

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