八、2008年3月12日
作者:青青子衿
email:anzijin@sina.com
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 (); //清空登录列表
}