设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 5045|回复: 13
打印 上一主题 下一主题

客户端如何获得用户昵称

[复制链接]

6

主题

15

帖子

66

积分

注册会员

Rank: 2

积分
66
跳转到指定楼层
楼主
发表于 2014-6-17 15:15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Server端typedef DWORD (CALLBACK* BRAS_VerifyUser_CallBack)(IN LPCTSTR lpUserName,IN LPCTSTR lpPassword, OUT LPDWORD lpUserID, OUT LPDWORD lpUserLevel, OUT
LPTSTR lpNickName,IN DWORD dwNCLen, LPVOID lpUserValue)方法中设置用户昵称后,客户端通过什么方法获取昵称,使用客户端文档上说的getUsername发现不能正常获的昵称。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

249

主题

2967

帖子

9079

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9079
沙发
发表于 2014-6-17 15:27:06 | 只看该作者
您好,使用如下的API可以获取本地用户的昵称:
  1. // 查询用户名称
  2. BRAC_API DWORD BRAC_GetUserName(DWORD dwUserid, TCHAR* lpUserName, DWORD dwLen);
复制代码
,userid=-1即可。
回复 支持 反对

使用道具 举报

6

主题

15

帖子

66

积分

注册会员

Rank: 2

积分
66
板凳
 楼主| 发表于 2014-6-17 17:15:02 | 只看该作者
您好,在使用贵公司sdk时,        java版本业务server端方法中  public int OnAnyChatVerifyUserCallBack(String szUserName, String szPassword,
                        AnyChatVerifyUserOutParam outParam) 没有昵称设置参数,是否在java层屏蔽了,我现在需要设置昵称后,客户端能够得到昵称。
回复 支持 反对

使用道具 举报

0

主题

12

帖子

88

积分

注册会员

Rank: 2

积分
88
地板
发表于 2014-6-17 17:34:30 | 只看该作者
您好,您可以在public int OnAnyChatVerifyUserCallBack(String szUserName, String szPassword, AnyChatVerifyUserOutParam outParam) 方法中设置昵称,outParam.SetNickName(szUserName);
回复 支持 反对

使用道具 举报

6

主题

15

帖子

66

积分

注册会员

Rank: 2

积分
66
5#
 楼主| 发表于 2014-6-17 17:44:51 | 只看该作者
佰锐赵仙平 发表于 2014-6-17 17:34
您好,您可以在public int OnAnyChatVerifyUserCallBack(String szUserName, String szPassword, AnyChatVe ...

这是设置后发现终端获得的是用户登录的帐号,根本不是昵称呀!!
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9079

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9079
6#
发表于 2014-6-17 18:46:03 | 只看该作者
您好,请帖一下您在服务器端的代码,以及客户端的代码片段,我们帮您分析一下。
回复 支持 反对

使用道具 举报

6

主题

15

帖子

66

积分

注册会员

Rank: 2

积分
66
7#
 楼主| 发表于 2014-6-18 09:31:12 | 只看该作者
delphi 版 Server端 :

  1. function VerifyUser_CallBack(lpUserName,lpPassword:LPCTSTR;lpUserID,
  2.   lpUserLevel:LPDWORD;lpNickName:LPTSTR; dwNCLen:DWORD;lpUserValue:Pointer):DWORD;stdcall;
  3. var
  4.   DBOpt: TDBOpt;
  5.   strUserNC,strTemp: String;
  6. begin
  7.   TfrmMain.InsertLog('用户[' + lpUserName + ']请求登陆,开始对其身份进行验证');
  8.   DBOpt := TDBOpt.create(frmMain.ADOcon);
  9.   try
  10.     if DBOpt.VerifyUser(lpUserName,lpPassword,strUserNC) = False then
  11.     begin
  12.       TfrmMain.InsertLog('用户[' + lpUserName + ']身份验证失败' );
  13.       Result := 205;
  14.       Exit;
  15.     end;
  16.   finally
  17.     DBOpt.Free;
  18.   end;
  19.   nLonginCount := nLonginCount + 1;
  20.   lpUserID^ := nLonginCount;
  21.   lpUserLevel^ := 0;
  22.   ZeroMemory(@lpNickName,SizeOf(strUserNC));
  23.   lpNickName := PChar('yyp');
  24.   //dwNCLen := Length(strUserNC);
  25.   TfrmMain.InsertLog('用户[' + lpUserName + ']身份验证成功  [ID: '
  26.     + IntToStr(nLonginCount) + ' 用户: '+ lpUserName + ']');
  27.   Result := 0;
  28. end;
复制代码
客户端代码:
  1. procedure TfrmMain.OnGVClientLogin(var msg: TMessage);
  2. var
  3.   logstr:String;
  4.   dwUserID:longint;
  5.   username: array[0..30]of Char;
  6. begin
  7.   dwUserID :=longint(msg.WParam);
  8.   if(msg.LParam= 0) then
  9. begin
  10.     logstr:='登录服务器成功,自己的用户编号为;'+ inttostr(dwUserID);
  11.     dwUserID := -1;
  12.     ZeroMemory(@username,sizeof(username));
  13.   BRAC_GetUserName(dwUserID,username,sizeof(username));
  14.     BRAC_EnterRoom(1,0,0);
  15.     m_VideoID := dwUserID;
  16.   // 将用户的ID保存在第一个位置,否则在回调函数里面可能找不到绘制的位置
  17.   //m_iUserID[0]:=dwUserID;
  18. end else begin
  19.   logstr:=Format('登录服务器失败,出错代码为: %u ',[longint(msg.lParam)]);
  20.   end;
  21.   InsertLog(logstr);
  22. end;
复制代码
其中客户端调用getUserName(-1)仍然返回的是用户登录帐号
回复 支持 反对

使用道具 举报

6

主题

15

帖子

66

积分

注册会员

Rank: 2

积分
66
8#
 楼主| 发表于 2014-6-18 09:31:44 | 只看该作者
admin 发表于 2014-6-17 18:46
您好,请帖一下您在服务器端的代码,以及客户端的代码片段,我们帮您分析一下。

delphi 版 Server端 :function VerifyUser_CallBack(lpUserName,lpPasswordPCTSTR;lpUserID,
  lpUserLevelPDWORD;lpNickNamePTSTR; dwNCLenWORD;lpUserValueointer)WORD;stdcall;
var
  DBOpt: TDBOpt;
  strUserNC,strTemp: String;
begin
  TfrmMain.InsertLog('用户[' + lpUserName + ']请求登陆,开始对其身份进行验证');
  DBOpt := TDBOpt.create(frmMain.ADOcon);
  try
    if DBOpt.VerifyUser(lpUserName,lpPassword,strUserNC) = False then
    begin
      TfrmMain.InsertLog('用户[' + lpUserName + ']身份验证失败' );
      Result := 205;
      Exit;
    end;
  finally
    DBOpt.Free;
  end;
  nLonginCount := nLonginCount + 1;
  lpUserID^ := nLonginCount;
  lpUserLevel^ := 0;
  ZeroMemory(@lpNickName,SizeOf(strUserNC));
  lpNickName := PChar('yyp');
  //dwNCLen := Length(strUserNC);
  TfrmMain.InsertLog('用户[' + lpUserName + ']身份验证成功  [ID: '
    + IntToStr(nLonginCount) + ' 用户: '+ lpUserName + ']');
  Result := 0;
end;

客户端代码:
procedure TfrmMain.OnGVClientLogin(var msg: TMessage);
var
  logstr:String;
  dwUserID:longint;
  username: array[0..30]of Char;
begin
  dwUserID :=longint(msg.WParam);
  if(msg.LParam= 0) then
begin
    logstr:='登录服务器成功,自己的用户编号为;'+ inttostr(dwUserID);
    dwUserID := -1;
    ZeroMemory(@username,sizeof(username));
  BRAC_GetUserName(dwUserID,username,sizeof(username));
    BRAC_EnterRoom(1,0,0);
    m_VideoID := dwUserID;
  // 将用户的ID保存在第一个位置,否则在回调函数里面可能找不到绘制的位置
  //m_iUserID[0]:=dwUserID;
end else begin
  logstr:=Format('登录服务器失败,出错代码为: %u ',[longint(msg.lParam)]);
  end;
  InsertLog(logstr);
end;
其中客户端调用getUserName(-1)仍然返回的是用户登录帐号
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9079

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9079
9#
发表于 2014-6-18 09:44:29 | 只看该作者
您可以尝试一下:设置一个定时器,登录成功之后500ms再获取一下用户名,看是否为昵称?
回复 支持 反对

使用道具 举报

6

主题

15

帖子

66

积分

注册会员

Rank: 2

积分
66
10#
 楼主| 发表于 2014-6-18 11:17:58 | 只看该作者
admin 发表于 2014-6-18 09:44
您可以尝试一下:设置一个定时器,登录成功之后500ms再获取一下用户名,看是否为昵称?

        BRAS_VerifyUser_CallBack=procedure(lpUserName:LPCTSTR;lpPassword:LPCTSTR;lpUserID:LPDWORD;lpUserLevel:LPDWORD;lpNickName:LPTSTR;dwNCLen:DWORD;lpUserValue:Pointer);stdcall;   
该方法中设置pNickName后, 发现BRAS_OnUserLoginAction_CallBack=procedure(dwUserId:DWORD;szUserName:LPCTSTR;dwLevel:DWORD;szIpAddr:LPCTSTR;lpUserValue:Pointer);stdcall;  此方法参数szUserName仍为登录帐号。 而在java版本的Server端尝试正常。请你们帮忙解决一下到底是什么问题。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 21:08 , Processed in 0.145092 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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