antipro 发表于 2006-8-30 09:29:13

请yunfan解惑,接收的消息类型

我大概看了一下EvaPacketManager::processReceiveIM()这个函数
有几个地方不明白,在switch里面
case QQ_RECV_IM_TO_BUDDY:是来自好友的消息,这里为什么没有操作
另外还有几个case也没有操作,比如
case QQ_RECV_IM_CREATE_QUN:
case QQ_RECV_IM_ADDED_TO_QUN:
case QQ_RECV_IM_DELETED_FROM_QUN:
case QQ_RECV_IM_REQUEST_JOIN_QUN:
case QQ_RECV_IM_APPROVE_JOIN_QUN:
是没有完成还是不需要反应,这些case是指的哪些情况。

yunfan 发表于 2006-8-30 10:34:21

Re: 请yunfan解惑,接收的消息类型

我大概看了一下EvaPacketManager::processReceiveIM()这个函数
有几个地方不明白,在switch里面
case QQ_RECV_IM_TO_BUDDY:是来自好友的消息,这里为什么没有操作
另外还有几个case也没有操作,比如
case QQ_RECV_IM_CREATE_QUN:
case QQ_RECV_IM_ADDED_TO_QUN:
case QQ_RECV_IM_DELETED_FROM_QUN:
case QQ_RECV_IM_REQUEST_JOIN_QUN:
case QQ_RECV_IM_APPROVE_JOIN_QUN:
是没有完成还是不需要反应,这些case是指的哪些情况。

8O , 你看看这个

switch(A){
case 1:
    process1();
    break;
case 2:   
    process2();
    break;
default:
}



switch(A){
case 1:
case 2:
    process12();
    break;
default:
}

有什么区别。 :?

antipro 发表于 2006-8-30 10:50:36

哦,我明白了,是我疏忽了,没有 break下面的过程也会被执行,谢谢yunfan。

antipro 发表于 2006-8-30 11:00:07

还有一个登录令牌的问题,最新版的eva
void EvaMain::slotConnectReady( )
{
packetManager->doLogin();
}
也就是直接登录了,你在介绍libeva登录方法的时候,过程是
EvaPacketManager::doRequestLoginToken()
得到返回后再
EvaPacketManager::processRequestLoginTokenReply()
最后才是
EvaPacketManager::doLogin()

你又说只在3.0pre里才行,我是这么理解的,后面的版本已经不需要登录令牌了,是协议变动了么?我没找到这个步骤。

antipro 发表于 2006-8-30 11:15:28

我写的eva工作过程,图的次序放错了

yunfan 发表于 2006-8-30 11:49:35

不是的, 登录令牌是需要的, 但是只用获取一次。

如果登录是中转的情况, 那么直接登录就可以了, 不用再次获取登录令牌。

antipro 发表于 2006-8-30 12:59:19

谢谢,我找到这个步骤了。
void EvaPacketManager::doLogin()
{
if(! Packet::isLoginTokenSet())//这就是要求登录令牌吧
{
    doRequestLoginToken();
    return;
}
unsigned char mode = QQ_LOGIN_MODE_INVISIBLE;
if(user->getStatus() == EvaUser::Eva_Online)
    mode = QQ_LOGIN_MODE_NORMAL;
Packet::setPasswordKey((unsigned char *)(user->getMd5Password()));
connecter->append(new LoginPacket(mode));
}

yunfan 发表于 2006-8-30 13:15:03

恩, 对的。
页: [1]
查看完整版本: 请yunfan解惑,接收的消息类型