admin 发表于 2013-6-21 10:15:01

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

AnyChat采用独立业务逻辑服务器来处理有关业务相关的事务,其中用户身份验证就属于其中一个业务逻辑的处理。首先看一下AnyChat平台业务逻辑处理的总体框架,如下图所示:
http://www.anychat.cn/faq/images/anychat/AnyChatServerSDK.jpg
其中,BusinessServer.exe是一个独立的应用程序,调用AnyChat Server SDK所提供的API接口,AnyChat Server SDK内部会采用IPC的方式与核心服务器建立联系,即:在处理业务逻辑时,不需要与核心服务器(AnyChatCoreServer.exe)建立直接的联系,核心服务器也不提供任何API接口供调用。
用户在AnyChat平台登录时,分两种情况:游客方式(只有用户名,密码为空)和正常方式(用户名、密码均不为空),下面分别对这两种方式的业务流程进行详细描述:

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


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


在业务服务器【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核心服务器内置用户登录业务逻辑




admin 发表于 2013-6-21 11:41:52

除了采用独立进程的业务服务器(BusinessServer.exe)来实现业务逻辑处理,AnyChat还支持一种更简洁的“SDK Filter Plus”工作模式,如下图所示:
http://www.anychat.cn/faq/images/anychat/SDKFilterPlus.jpg

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


admin 发表于 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即可。// 用户身份验证回调函数定义
DWORD CALLBACK VerifyUserCallBack(LPCTSTR lpUserName,LPCTSTR lpPassword, LPDWORD lpUserID, LPDWORD lpUserLevel, LPTSTR lpNickName,DWORD dwNCLen, LPVOID lpUserValue)
{
    *lpUserID = atoi(lpUserName);
    return 0;
}这样在客户端的登录消息【OnLoginSystem(userid=108, errorcode=0)】就是第三方平台的userid了。

lincy 发表于 2014-11-28 10:42:47

请问,客户登录后业务服务器是否可以自动创建和分配房间?

lincy 发表于 2014-11-28 10:44:44

有没有相关的API可供使用?

admin 发表于 2014-11-28 10:54:42

关于房间,请参考:http://bbs.anychat.cn/forum.php?mod=viewthread&tid=86

lincy 发表于 2014-11-28 10:58:18

admin 发表于 2014-11-28 10:54
关于房间,请参考:http://bbs.anychat.cn/forum.php?mod=viewthread&tid=86

好的,谢谢

liaoyoli 发表于 2015-1-27 00:58:32

hh:)呵呵呵呵呵

z289674881 发表于 2015-6-30 21:20:43

程序有没有电子白板功能呢?

佰锐科技-邵光清 发表于 2015-7-1 09:04:08

z289674881 发表于 2015-6-30 21:20
程序有没有电子白板功能呢?

您好,我们提供有相关的接口,可以利用桌面共享的接口去实现电子白板的功能的。
页: [1] 2
查看完整版本: 有关AnyChat平台用户身份验证与第三方平台集成的问题