设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 38844|回复: 12

有关AnyChat平台用户身份验证与第三方平台集成的问题

[复制链接]

249

主题

2967

帖子

9070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9070
发表于 2013-6-21 10:15:01 | 显示全部楼层 |阅读模式
AnyChat采用独立业务逻辑服务器来处理有关业务相关的事务,其中用户身份验证就属于其中一个业务逻辑的处理。首先看一下AnyChat平台业务逻辑处理的总体框架,如下图所示:

其中,BusinessServer.exe是一个独立的应用程序,调用AnyChat Server SDK所提供的API接口,AnyChat Server SDK内部会采用IPC的方式与核心服务器建立联系,即:在处理业务逻辑时,不需要与核心服务器(AnyChatCoreServer.exe)建立直接的联系,核心服务器也不提供任何API接口供调用。
用户在AnyChat平台登录时,分两种情况:游客方式(只有用户名,密码为空)和正常方式(用户名、密码均不为空),下面分别对这两种方式的业务流程进行详细描述:

a)游客方式:在调用客户端API接口【BRAC_Login】时只传入用户名,密码为空,则核心服务器(AnyChatCoreServer.exe)将分配一个userid,为负数,从-2开始依次加1,同时触发业务服务器的回调事件【OnUserLoginAction】,如下图所示: login_guest.jpg
可以在核心服务器的配置文件(AnyChatCoreServer.ini)中进行配置,开启(默认)或关闭游客登录模式。


b)正常方式:在调用客户端API接口【BRAC_Login】时传入用户名和密码,均不为空,则核心服务器(AnyChatCoreServer.exe)将不处理userid的分配逻辑,将会触发业务服务器的回调事件【OnVerifyUser】,由业务服务器在该回调事件中进行用户身份验证,分配userid,然后将用户身份验证结果(是否登录成功)返回给客户端,若用户身份验证成功,则还将触发业务服务器的回调事件【OnUserLoginAction】,如下图所示:

login_normal.jpg
在业务服务器【OnVerifyUser】回调函数中,所分配的userid,返回的errorcode,将体现在客户端的事件【OnLoginSystem(userid, errorcode)】参数中,所以业务服务器可以自定义errorcode来表示用户身份验证失败的原因。


关于数据库连接:核心服务器(AnyChatCoreServer.exe)是不需要连接数据库的,连接数据库在业务层处理,即由业务服务器自己连接数据库,在【OnVerifyUser】回调函数中查询数据库的信息,对用户身份进行验证,所以不论上层应用是连接的MSSQL、MySQL、DB2、Oracle或是NoSQL,对AnyChat平台来说,都是透明的。

常见问题分析:
1、用户登录时不能触发业务服务器的【OnVerifyUser】回调函数?
答:是否在登录时输入的密码为空?

2、用户登录时不能触发业务服务器的【OnUserLoginAction】回调函数?
答:是否正确部署了业务服务器,业务服务器是否与核心服务器建立了正常的通信联系?参考:AnyChat使用攻略之独立部署Windows视频服务器

3、用户登录时输入了用户名、密码,为什么返回的userid还是负数,还是游客模式登录?
答:这是核心服务器内置的业务逻辑,当业务服务器没有启动,或是业务服务器部署不正确时将默认以游客方式登录系统,参考:AnyChat核心服务器内置用户登录业务逻辑




回复

使用道具 举报

249

主题

2967

帖子

9070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9070
 楼主| 发表于 2013-6-21 11:41:52 | 显示全部楼层
除了采用独立进程的业务服务器(BusinessServer.exe)来实现业务逻辑处理,AnyChat还支持一种更简洁的“SDK Filter Plus”工作模式,如下图所示:


将业务逻辑封装在一个动态库中供核心服务器(AnyChatCoreServer.exe)调用。有关SDKFilterPlus的示例源代码可以在AnyChat for Windows SDK的【src\server\c++\SDKFilterPlus】目录下找到。
编译好动态库之后,在核心服务器配置文件(AnyChatCoreServer.ini)中进行配置:
  1. [Function Settings]
  2. SDKFilterPlus=SDKFilterPlus.dll
复制代码
然后保存配置文件,将编译好的动态库(SDKFilterPlus.dll,Linux下为:SDKFilterPlus.so)拷贝到服务器程序所在的当前目录下,最后重启核心服务器程序即可,会在核心服务器的日志文件(AnyChatCoreServer.log)中输出相关的加载信息。


回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9070
 楼主| 发表于 2013-6-21 12:02:12 | 显示全部楼层
若在AnyChat之外已经进行了一次用户身份验证,只是希望用AnyChat实现流媒体通信服务,而且不希望在业务服务器(BusinessServer.exe)上设计得太复杂,不希望连接数据库,则可以通过如下的方式巧妙的回避AnyChat的登录流程,而且还可保持userid与第三方平台一致。

如果在第三方平台上用户身份验证之后,获得的userid为108,则可以将userid转换为字符串“108”进行AnyChat平台登录,密码可以用任意字符串代替,不为空即可,如:BRAC_Login("108", "demo", 0);

在业务服务器的【OnVerifyUser】回调函数中将username字符串转换为整型值,传给userid,同时返回0即可。
  1. // 用户身份验证回调函数定义
  2. DWORD CALLBACK VerifyUserCallBack(LPCTSTR lpUserName,LPCTSTR lpPassword, LPDWORD lpUserID, LPDWORD lpUserLevel, LPTSTR lpNickName,DWORD dwNCLen, LPVOID lpUserValue)
  3. {
  4.     *lpUserID = atoi(lpUserName);
  5.     return 0;
  6. }
复制代码
这样在客户端的登录消息【OnLoginSystem(userid=108, errorcode=0)】就是第三方平台的userid了。
回复 支持 反对

使用道具 举报

26

主题

161

帖子

485

积分

中级会员

Rank: 3Rank: 3

积分
485
发表于 2014-11-28 10:42:47 | 显示全部楼层
请问,客户登录后业务服务器是否可以自动创建和分配房间?
回复 支持 反对

使用道具 举报

26

主题

161

帖子

485

积分

中级会员

Rank: 3Rank: 3

积分
485
发表于 2014-11-28 10:44:44 | 显示全部楼层
有没有相关的API可供使用?
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9070
 楼主| 发表于 2014-11-28 10:54:42 | 显示全部楼层
回复 支持 反对

使用道具 举报

26

主题

161

帖子

485

积分

中级会员

Rank: 3Rank: 3

积分
485
发表于 2014-11-28 10:58:18 | 显示全部楼层
admin 发表于 2014-11-28 10:54
关于房间,请参考:http://bbs.anychat.cn/forum.php?mod=viewthread&tid=86

好的,谢谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2015-1-27 00:58:32 | 显示全部楼层
hh呵呵呵呵呵
回复 支持 反对

使用道具 举报

1

主题

2

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2015-6-30 21:20:43 | 显示全部楼层
程序有没有电子白板功能呢?
回复 支持 反对

使用道具 举报

发表于 2015-7-1 09:04:08 | 显示全部楼层
z289674881 发表于 2015-6-30 21:20
程序有没有电子白板功能呢?

您好,我们提供有相关的接口,可以利用桌面共享的接口去实现电子白板的功能的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-3-29 21:50 , Processed in 0.151675 second(s), 29 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表