📄 ircmain.cpp
字号:
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 + -