有关libeva的使用说明 - 登录和登出操作

Arch Linux上微信安装的保姆级教程:从Wine配置到字体美化,一次搞定所有坑 本文提供了一份详细的Arch Linux上安装微信的教程,涵盖从Wine配置到字体美化的全过程。通过步骤清晰的指南,帮助用户解决依赖配置、字体显示等常见问题,实现在Arch Linux上流畅运行微信的目标。 阅读详情

点击打开链接

有关libeva的使用说明 - 登录和登出操作

首先,需要简单说一下腾讯QQ2005beta1的登录过程。

第一步。向服务器索要登录令牌, 对应的libeva的封装类为RequestLoginTokenPacket
第二步。得到登录令牌后, 则尝试登录一个腾讯服务器。 登录包的对应封装为 LoginPacket
第三步。如果服务器返回的是, 登录回应包的封装为 LoginReplyPacket
   3。1 QQ_LOGIN_REPLY_OK(0x00): 则说明登录成功
   3。2 QQ_LOGIN_REPLY_REDIRECT(0x01):说明服务器要求你更改新的服务器重新登录
   3。3 QQ_LOGIN_REPLY_PWD_ERROR(0x05):你的密码错误
   3。4 其他未知码: 意义不大了,其实我们只要上面三种情况就够了

   
现在,给出一个大概的编码逻辑,   这里还是假定网络部分已经实现

这里假定一个方法叫做send(OutPacket *p),是发送数据包的。内容大体如下
[code:1]
void send(OutPacket *p){
    char *data = new char[MAX_PACKET_SIZE];
    int len = MAX_PACKET_SIZE;
    
    p.fill(data, &len);
    
    doSend(data, len); // 这里换成你发送数据的方法
    
    delete []data;
    delete p;  // 注意如果p在之外还要用,就不要删了
}
[/code:1]
在用户输入用户名和密码以后,我们需要首先设置libeva中Packet的QQ号,
和密码密钥(password key,就是对密码做2次md5后的字串, 细节可以参考“libeva使用说明-发送和接收”文档)
假如用户的 QQ号为12345, 密码为11111, 那么密码密钥就是d545c63da029385e7f46806156f8f51d,
我们假设密码密钥在一个char型的数组 md5Pwd中,数组长度为16(注意密码密钥长度总是16)。
[code:1]
Packet::setQQ(12345); // 设置QQ号
Packet::setPasswordKey(md5Pwd); // 设置密码密钥
Packet::setUDP(true); // 这里设置是UDP登录。 参数为false就是TCP登录
[/code:1]

完成了这些准备工作,我们就可以请求登录令牌了
[code:1]
RequestLoginTokenPacket *packet = new RequestLoginTokenPacket();
send(packet);
[/code:1]

这里说明一下,有关接收数据和判断数据的类型,在“libeva使用说明-发送和接收”
中已经说明,就不再重复了。

这里假定分析登录令牌的回复方法如下
[code:1]
void processRequestLoginTokenReply(const InPacket *in)
{
        RequestLoginTokenReplyPacket *packet = new RequestLoginTokenReplyPacket();
        packet->setInPacket(in);
        packet->parse(); // 解析一下就可以了, 这个类会自动设置好loginToken
        delete packet;   // 释放点内存,这是个好习惯
        
        doLogin();  // OK, 有了登录令牌,我们就可以登录了。
}
[/code:1]
[code:1]
void doLogin()
{
    send(new LoginPacket(QQ_LOGIN_MODE_NORMAL));  // 这就足够了, 够简单吧, 要是隐身登录,
                                                  // 参数换成QQ_LOGIN_MODE_INVISIBLE 就OK了
}
[/code:1]

现在我们来看看登录回应包的处理,
[code:1]
void processLoginReply(const InPacket *in)
{
        LoginReplyPacket *packet = new LoginReplyPacket();
        packet->setInPacket(in);
        if(!packet->parse()) {         // 我也不清楚是什么原因,有时候会出现解析失败,也许是网络的原因                               
                printf("parse error\n");  // 但是大家放心, 总会正确的, 多检查一下总是好的,^_^
                return;
        }
        switch(packet->getReplyCode())
        {
        case QQ_LOGIN_REPLY_OK:
                // 到这里的话,那就是登录成功, 恭喜你!
                break;
        case QQ_LOGIN_REPLY_REDIRECT:
                // 如果到这里,说明服务器要求你转到其他服务器登录
                // 登录服务器的IP通过 packet->getRedirectedIP() 来得到,
                //             这个IP是个以本地字节序排列在一个int里(4字节)
                // 服务器的端口通过 packet->getRedirectedPort() 来得到,
                //             这个就是一个short型, 16字节
                break;
        case QQ_LOGIN_REPLY_PWD_ERROR:
                // 如果到这里则,说明你密码错误,而且服务器会返回一个“密码错误”之类
                // 的字符串, 你可以printf出来, 注意所以服务器的字符串编码,如果没有
                // 特殊说明,都是GB编码, GBK, GB18030 都可以
                printf("password error:%s\n",packet->getReplyMessage().c_str());
                break;
        default:
                // 我还没有见过到这里的, 你要是到了这里,还请告诉我, ^_^
                printf("unknown reply code\n");
        }
}
[/code:1]

登录上了不是就完事了, 大概没隔1分钟,还是要向腾讯汇报一下,你还“活着”,否则,
腾讯服务器就不理你了,呵呵
[code:1]
   send(new KeepAlivePacket()); // 这样就可以了, easy?
[/code:1]

对于上面的保持在线的回应包,没有多大用处, 里面就是目前腾讯服务器在线总人数,什么的。
[code:1]
void processKeepAliveReply( const InPacket * in )
{
        KeepAliveReplyPacket *packet = new KeepAliveReplyPacket();
        packet->setInPacket(in);
        packet->parse(); // 以上三步都是固定套路, 也许,我以后把这个写到一个方法里
        numOnlineUsers = packet->numOnlineUsers(); // 通过这个方法就可以得到当前在线总人数了
}
[/code:1]

最后再说一下登出操作, 最简单就是这个了, 登出操作时,腾讯服务器是不会
回复的,只要扔4个一样的登出包给服务器就搞定了
[code:1]
        for(int i=0; i<4; i++)
                send(new LogoutPacket());

        // 现在已经登出腾讯服务器了,我们需要清理整个登录和会话
        // 过程中用到的所有的Key
        Packet::clearAllKeys();
[/code:1]


ok, 总算说差不多了,现在大家,可以自己写一个简单地客户端了吧,呵呵
大家好运。^_^

最后     再补充一下, 大家需要用eva 0.3.0 pre版中的 libeva 才行, 否则,
不灵的,呵呵, 就是登录的时候直接登就可以了,不需要什么登录令牌。

eva 0.3.0 pre 在这里去找把
告别折腾!用yay和AUR在Arch Linux上三行命令安装原生体验的微信(附深度清理指南) 本文介绍了一种在Arch Linux上通过yay和AUR三行命令安装原生体验微信的高效方法,包括Deepin Wine、Electron和UOS原生三种方案的选择与安装指南。同时提供了深度清理与维护策略,帮助用户保持系统纯净,优化微信使用体验。 阅读详情

相关推荐

电源芯片TPS54560典型应用电路及设计详解

TPS54560 是一款配有集成型高侧 MOSFET 的 60V、5A DC-DC转换器,输入电压范围7-60V,输出电压可通过外部反馈电阻设置成略低于输入电压的任意值。**所以,**R5=31.25KΩ、R6:10KΩ(常用值)时,即可设置输出电压为 3.3V。**所以,**R5=140KΩ、R6:10KΩ(常用值)时,即可设置输出电压为12V。设计 TPS54560 的输出电压时,主要通过外部反馈电阻网络来设置输出电压。因此,输出 3.3V ,输入电压24V时推荐的电感值为 8µH 至 10µH。

weixin_42306872的博客 1万+

archLinux装微信两种方法以及问题解决办法

archlinux安装微信两种方法,以及修改权限导致无法进入系统

蓝元风 7603

张量分解浅谈(四 Tucker 分解)

学完了SVD算法之后,我们继续回到张量几大分解的学习上来,本期学习的主要内容是张量的 Tucker 分解 以及 前面的CP分解还留下一点没有说完,正好一并补齐!后面的公式我将采用颜色标记,红色代表必须掌握,蓝色尽量掌握! 在这之前先附一张图,包含了各种运算符号的名称含义,大部分是前面说过或者使用过的: Tensor decomposition一 . Tucker 分解公式介绍和原理二 . 张量的 n-Rank 一 . Tucker 分解公式介绍和原理 我们先来看一张被使用过很多次的Trucker 分解图

欢迎来到 豪哥 的博客 1万+

Manjaro/Arch Linux 原生微信安装

然后后面就自动安装好了。效果跟那啥系统,一样的。

yj363937的博客 6809

绑定压力的计算方法

压强的公式为P=F/S,其中P为ACF要求的本压压强范围,S为受压面积,F为本压压头施加的力。绑定参数需要按线体按压头进行DOE确认,并使用DOE确认好的参数按压头重新绑定标识好送ACF厂商实测固化率、粒子变形的情况,避免绑定参数导致的异常,在绑定参数的设定过程中温度和时间可以使用仪器实测但绑定的压力则需要换算。工程上绑定压力换算的原则是:1、FPC属于柔性物料,柔性物料的受压面积按FPC绑定的受压面积=FPC绑定的长度。一、工程上FOG FPC本压压力换算(柔性材料以挤压的接触面积=受力面积)F=P。

weixin_53757859的博客 1533

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。

IT猿手 1367

Lutris 0.5.13 发布,开源游戏启动器

​ Lutris 是Linux平台上的一个开源游戏启动器,Lutris 通过将多个游戏平台,包括 Steam、GOG 和 Humble Bundle 等整合到一个统一的界面中,使其更容易在 Linux 上安装、启动和游玩游戏。 ​

llawliet0001的专栏 1483

Allegro如何用自带的功能将线段变成铜皮操作指导

在做PCB设计的时候,有时根据设计需要将线段变成铜皮,可以借助辅助工具来实现这一操作,但是Allegro自身也自带这个功能,如下图。勾选Delete original objects。如何用自带的功能将线段变成铜皮操作指导。勾选Convert to shape,需要把这段走线变成铜皮。

weixin_54787054的博客 2946

Eva开发文档1 ---------- libeva 类描述

点击打开链接 Eva开发文档1 ---------- libeva 类描述 ============================= 借鉴了 openq 和 lumaqq 的很多东西。 在包解析的思路上,基本遵循了 lumaqq 的方案, 类命名上,也基本按照 lumaqq 的类命名方式。 目前 libeva 还没有完全完工, 但是基本的框架是有了,为了方便大家扩...

weixin_34192816的博客 148

Unity零基础到入门 ☀️| 近万字教程 对 Unity 中的 动画系统基础 全面解析+实战演练,你确定要错过吗?

Unity动画系统,Animation,Animator。 本文对Unity中的动画系统基础做了一个全面解析,还包括实战演练。近万字教程让你对Unity的动画系统有一个系统的了解,敬请品尝!

努力前行,总会成为自己心中的那道光 9万+

华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体

2503_91057718的博客 46

archlinux微信安装

请注意,这里的字体名称必须与你在Wine环境中安装的字体名称匹配。如果没有找到,请右键单击空白区域,选择“新建”>“字符串值”,并将其命名为“Font”。要运行WeChat,你需要指定前面创建的Wine前缀并运行安装在其中的WeChat程序。首先,安装微软雅黑字体。接下来,创建一个新的Wine前缀(一个独立的Wine环境)替换为你喜欢的路径。这将创建一个新的32位Wine环境。点击“确定”以保存设置,然后关闭注册表编辑器。为你在前面步骤中创建的Wine前缀路径。文件夹中,可以使用命令也可以直接手动复制。

maxiaovivi的博客 2697

分布式计算Ray框架面试题及参考答案

动态任务图执行引擎是一种能够根据任务之间的依赖关系和运行时的实际情况,动态构建和执行任务图的系统。在 Ray 中,动态任务图执行引擎允许任务在运行时根据数据可用性、计算资源状态等因素,灵活地决定后续任务的执行顺序和方式。对于 AI 应用来说,其往往具有动态性的特点。例如,在深度学习模型的训练过程中,可能需要根据训练的结果动态调整下一轮训练的参数、数据增强方式或者模型结构。动态任务图执行引擎可以很好地支持这些动态需求。它能够根据 AI 应用中各个任务的实时输出和依赖关系,动态地生成和调整任务图。

大模型大数据攻城狮的专栏 1350

Archlinux安装deepin版微信和QQ,看我就够了

请耐心看完我在Archlinux上安装deepin版的微信、QQ

qq_48804275的博客 4822

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

archlinux安装详细过程(不用翻墙, 中文输入法, 企业微信, 微信等常用软件安装)

本文详细介绍了在Arch Linux上搭建办公环境的完整流程。主要内容包括:1)从官网下载ISO镜像并制作启动盘;2)安装步骤详解,包括配置国内镜像源、磁盘分区、用户设置和桌面环境选择;3)安装yay包管理器来管理AUR软件;4)解决VM和输入法相关问题;5)美化KDE桌面主题;6)设置磁盘自动挂载;7)安装办公软件和配置环境变量。文章还提供了AUR包提交的基本方法,为使用者提供了从系统安装到日常使用的一站式指导。

Veng的博客 3981

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【精品教程】Linux系统中运行windows软件,安装Bottles中间的坑

Linux系统中运行windows软件需要用到的Bottles容器

liurugongzi123的博客 3044

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

探索游戏历史的宝库:Lutris——您的全能游戏平台

探索游戏历史的宝库:Lutris——您的全能游戏平台 lutrisLutris desktop client in Python / PyGObject项目地址:https://gitcode.com/gh_mirrors/lu/lutris Lutris 是一个强大的开源游戏平台,它允许您在各种操作系统上安装和运行来自各个时代和平台的游戏。通过整合现有的模拟器、引擎重实现和兼容层,Lutri...

gitblog_00089的博客 913

Lutris游戏平台配置全攻略:从零搭建Linux游戏环境

Lutris是一款专为Linux系统设计的开源游戏平台管理工具,它通过统一的界面整合了多种游戏来源和运行环境。该平台的核心优势在于能够无缝管理原生Linux游戏、Windows游戏(通过Wine/Proton)、模拟器游戏以及各大游戏商店的游戏库。 [![Lutris平台标识](https://raw.gitcode.com/gh_mirrors/lu/lutris/raw/b85f5afd2d

gitblog_00297的博客 1097

探索高效沟通新维度——在Arch Linux及其衍生版上无缝运行微信

探索高效沟通新维度——在Arch Linux及其衍生版上无缝运行微信 去发现同类优质开源项目:https://gitcode.com/ 在追求个性化的Linux世界中,尤其是在Arch Linux这样的极客乐园,有一款强大的即时通讯工具显得尤为重要。现在,借助开源项目deepin-wine-wechat-arch,你可以在Arch Linux及其衍生版上顺畅地运行微信,享受与Windows平台无异...

gitblog_00052的博客 1042

ubuntu18.04 安装和卸载 flatpak、bottles

ubuntu18.04安装和卸载flatpak、bottles

float_stone的博客 4289

Lutris游戏平台完整指南:让所有游戏在Linux上畅玩无阻

Lutris是一款革命性的开源游戏平台,专为Linux系统打造,它能够让你在Linux上轻松运行Windows游戏、复古游戏模拟器以及原生Linux游戏。无论你是游戏爱好者还是新手玩家,Lutris都能提供简单统一的游戏管理体验,彻底改变你在Linux上的游戏方式。🎮 ## 💻 为什么选择Lutris游戏平台 **多平台游戏统一管理** - Lutris最大的优势在于它能够将来自不同平台的

gitblog_00200的博客 1072

Lutris 开源游戏平台常见问题解决方案

Lutris 是一个开源的游戏平台,旨在帮助玩家安装和游玩来自不同年代和平台的游戏。它通过集成现有的模拟器、引擎重构和兼容层,提供了一个中央界面来管理并启动游戏。Lutris 支持从 Humble Bundle、GOG 到 Steam 等多个游戏服务,使用户的数字游戏库易于访问。其主干代码采用 Python 编写,并依赖于多种技术和工具。 ### 主要编程语言: - **Python**:作为主...

gitblog_00558的博客 1470

archlinux安装QQ微信

工作与生活中还是很难离开QQ和微信这两款软件的,那么想把archlinux作为主力系统的用户,应该如果安装QQ和微信呢? 开启 32 位支持库与 ArchLinuxCN 支持库 vim /etc/pacman.conf 去掉[multilib]一节中两行的注释,来开启 32 位库支持。 在文档结尾处加入下面的文字,来开启 ArchLinuxCN 源。 [archlinuxcn] Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch 修改后的文件末尾

lxyoucan的博客 7302

终极指南:Lutris游戏平台在Linux上的完美安装与配置

还在为Linux上玩游戏发愁吗?🤔 今天我要向你推荐一个游戏神器——Lutris!这个开源平台能让你在Linux上轻松玩转各种游戏,无论是原生Linux游戏、Windows游戏还是模拟器游戏,统统不在话下。 ## 为什么选择Lutris?🎯 Lutris就像你的游戏管家,帮你搞定所有复杂的配置工作。想象一下,只需要点击几下,就能安装和运行来自Steam、GOG、Epic Games Sto

gitblog_00967的博客 892

【亲测免费】 Bottles 开源项目安装与使用指南

Bottles 的GitHub仓库遵循标准的开源软件组织结构。尽管具体的目录结构在不同版本间可能会有微调,以下是一个典型结构的概述: ``` Bottles/ ├── LICENSE # 许可证文件,说明软件使用的版权协议(GPLv3) ├── README.md # 项目简介,快速了解项目的核心功能和开发状态 ├── CONTRIBUTING.md # 贡献者...

gitblog_00635的博客 1454
上一篇: Eva开发文档1 ---------- libeva 类描述
下一篇: 输不起慢的代价,赢不了休息的时间
Qicz
博客等级 码龄16年 56粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值