设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

透明通道问题

[复制链接]

5

主题

19

帖子

67

积分

注册会员

Rank: 2

积分
67
跳转到指定楼层
楼主
发表于 2014-12-1 15:44:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DWORD BRAS_TransBuffer(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen);
功能:透明通道传送缓冲区,向指定的用户传输缓冲区
返回值:0 表示成功,否则为出错代码
参数:
dwUserid: 目标用户编号,不能为-1
lpBuf: 缓冲区
dwLen:  缓冲区的大小
备注:
可以利用该方法实现自定义功能,缓冲区采用透明传输,效率与
BRAS_SendBufToRoom、BRAS_SendBufToUser 两个方法相同,只是触发客户端
的回调函数不同。



这里的缓冲区怎么设置?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
沙发
发表于 2014-12-1 16:40:22 | 只看该作者
缓冲区可以是一个字节数组,或是一个字符串等,也可以是一块内存,传入首地址即可。
回复 支持 反对

使用道具 举报

5

主题

19

帖子

67

积分

注册会员

Rank: 2

积分
67
板凳
 楼主| 发表于 2014-12-1 21:26:12 | 只看该作者
admin 发表于 2014-12-1 16:40
缓冲区可以是一个字节数组,或是一个字符串等,也可以是一块内存,传入首地址即可。

使用这个接口后public static extern int BRAS_TransBuffer(int dwUserId, byte[] lpBuf, int dwLen);

客户端在哪里能够接收到数据
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
地板
发表于 2014-12-1 21:27:28 | 只看该作者
回复 支持 反对

使用道具 举报

5

主题

19

帖子

67

积分

注册会员

Rank: 2

积分
67
5#
 楼主| 发表于 2014-12-1 22:23:38 | 只看该作者
admin 发表于 2014-12-1 21:27
您好,请参考:如何使用缓冲区及文件传输功能?

        private void button3_Click(object sender, EventArgs e)
        {
            int i;
            string userID = this.textBox1.Text.Trim();
            i = int.Parse(userID);

            string message = this.textBox2.Text.Trim();
            byte[] byteArray = System.Text.Encoding.Default.GetBytes(message);

            AnyChatServerSDK.BRAS_TransBuffer(i, byteArray, byteArray.Length);
                //public static extern int BRAS_SendBufToUser(int userId, byte[] buf, int len);
            //public static extern int BRAS_TransBuffer(int dwUserId, byte[] lpBuf, int dwLen);
        }在业务服务器这里触发了透明通道函数后      
   是不是在客户端  将触发这个函数  
        /// <summary>
        /// 透明通道数据回调函数定义
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="buf">缓冲区</param>
        /// <param name="len">缓冲区长度</param>
        /// <param name="userValue">附带信息</param>
        public delegate void TransBufferCallBack(int userId, IntPtr buf, int len, int userValue);  

那么就是不知道在这里怎么把   buf的数据获取出来?
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
6#
发表于 2014-12-1 22:35:43 | 只看该作者
您好,可参考C#的示例工程源代码,位于AnyChat for Windows SDK\src\client\c#目录下。
回复 支持 反对

使用道具 举报

5

主题

19

帖子

67

积分

注册会员

Rank: 2

积分
67
7#
 楼主| 发表于 2014-12-1 22:45:19 | 只看该作者
admin 发表于 2014-12-1 22:35
您好,可参考C#的示例工程源代码,位于AnyChat for Windows SDK\src\client\c#目录下。

方便的话把那段模块截个图       就是客户端接收的那个     实在是找不到   麻烦了
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
8#
发表于 2014-12-2 09:00:03 | 只看该作者
您好,代码位于AnyChat for Windows SDK\src\client\c#\AnyChatCallCenter\VideoChatClient\Login.cs里面,查找:TransBuffer即可。
  1. //透明通道回调
  2. SystemSetting.TransBuffer_OnReceive = new TransBufferReceivedHandler(TransBuffer_CallBack);

  3. ……

  4. //透明通道回调函数
  5. public void TransBuffer_CallBack(int userId, IntPtr buf, int len, int userValue)
  6. {
  7.         try
  8.         {
  9.                 if (hallForm != null)
  10.                         hallForm.TransBuffer_CallBack(userId, buf, len, userValue);
  11.         }
  12.         catch (Exception ex)
  13.         {
  14.                 Log.SetLog("VideoChat.Login.TransBuffer_CallBack       TransBuffer_CallBack:" + ex.Message.ToString());
  15.         }
  16. }
复制代码
回复 支持 反对

使用道具 举报

4

主题

17

帖子

74

积分

注册会员

Rank: 2

积分
74
9#
发表于 2015-8-2 10:32:49 | 只看该作者
源代码中hallForm.TransBuffer_CallBack是个空函数,在这个函数里写的代码不执行
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9108
10#
发表于 2015-8-2 10:51:01 | 只看该作者
您好,需要在客户端向服务器发数据(Userid=0)时,才会触发服务器的回调函数的!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 01:15 , Processed in 0.152906 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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