八、2008年3月12日
作者:青青子衿
email:[email protected]
1、 SendRaw ( char * szMsg ) 數據發送函數,將加密發送還是明文發送封裝起來
bool CIRC :: SendRaw ( char * szMsg )
{
if ( g_cMainCtrl . m_cBot . si_usessl . bValue ) //判斷是否使用ssl加密
{
//如果使用SSL加密協議,調用CSSLSocket 類的成員函數將消息發送出去
if ( m_csslSocket . Write ( szMsg , strlen ( szMsg ))< strlen ( szMsg ))
{
//如果發送失敗,
m_bJoined = false ; //加入頻道狀態設置爲false
m_bConnected = false ; //連接狀態設置爲false
xClose ( m_sSocket ); //關閉套接字
m_sSocket = INVALID_SOCKET ; //將套接字變量,置爲無效
g_cMainCtrl . m_cMac . ClearLogins (); //清空登錄信息列表
return false ;
}
else
{
//完成發送成功返回
return true ;
}
}
else
{
//使用明文發送數據
if ( xWrite ( m_sSocket , szMsg , strlen ( szMsg ))< strlen ( szMsg )) //send 函數
{
//如果發送失敗
m_bJoined = false ;
m_bConnected = false ;
xClose ( m_sSocket );
m_sSocket = INVALID_SOCKET ;
g_cMainCtrl . m_cMac . ClearLogins ();
return false ;
}
else
{
//發送成功
return true ;
}
}
}
2、 bool CIRC :: SendRawFormat ( const char * szFmt , ...) 函數
///////////////////////////////////////////////////////////////////
//
//函數功能:按照指定格式發送數據
//參數: const char *szFmt 發送數據的格式
// ... 具體數據的變量,參數個數不確定
//返回值: 如果發送成功返回true,否則返回false
//
////////////////////////////////////////////////////////////////////
bool CIRC :: SendRawFormat ( const char * szFmt , ...)
{
va_list va_alist ;
char formatbuf [8192];
va_start ( va_alist , szFmt );
vsnprintf ( formatbuf , sizeof ( formatbuf ), szFmt , va_alist ); va_end ( va_alist );
return SendRaw ( formatbuf );
}
3、 bool CIRC :: SendMsg ( bool bSilent , bool bNotice , char * szMsg , char * szDst ) 函數
///////////////////////////////////////////////////////////////////////////
//
//函數功能:發送消息
//參數: bool bSilent 標識是否處於靜默狀態
// bool bNotice 發送數據包的類型是否是Notice狀態,詳細瞭解Notice含義,參見IRC使用手冊
// char *szMsg 消息內容的buffer
// char *szDst 保存發送目標的字符串
//返回值: 發送成功返回true,失敗返回false
//
/////////////////////////////////////////////////////////////////////////////
bool CIRC :: SendMsg ( bool bSilent , bool bNotice , char * szMsg , char * szDst )
{
if ( bSilent ) //如果bot被設置爲靜默狀態,將不往外發送任何信息,直接返回
{
return false ;
}
CString sTheCmd ;
if ( bNotice ) //如果以NOTICE模式發送
{
//命令字符串賦值爲字符串NOTICE
sTheCmd . Assign ( "NOTICE" );
}
else
{
//否則賦值爲PRIVMSG
sTheCmd . Assign ( "PRIVMSG" );
}
CString sSendBuf ;
sSendBuf . Format ( "%s %s :%s/r/n" , sTheCmd . CStr (), szDst , szMsg ); //構造一個完整的IRC數據包
return SendRaw ( sSendBuf . Str ()); //發送數據包
}
4、 void CIRC :: Fail () 函數
/////////////////////////////////////////////////////////////////////////////
//
//函數功能:失敗處理
//參數: 無
//返回值: void
//
//////////////////////////////////////////////////////////////////////////////
void CIRC :: Fail ()
{
Disconnect (); //斷開網路連接
m_iFailCount ++; //連接失敗計數器加1
}
5、 void CIRC :: Disconnect () 函數
//////////////////////////////////////////////////////////////////////////////////
//
//函數功能:斷開連接
//參數: 無
//返回值: void
//
/////////////////////////////////////////////////////////////////////////////////
void CIRC :: Disconnect ()
{
m_bJoined = false ; //設置離開頻道狀態
m_bConnected = false ; //設置斷開連接狀態
xClose ( m_sSocket ); //關閉套接字
m_sSocket = INVALID_SOCKET ; //將套接字變量設置爲無效
g_cMainCtrl . m_cMac . ClearLogins (); //清空登錄列表
}