AnyChat技术支持论坛

标题: 透明通道问题 [打印本页]

作者: 龙少    时间: 2014-12-1 15:44
标题: 透明通道问题
DWORD BRAS_TransBuffer(DWORD dwUserid, LPBYTE lpBuf, DWORD dwLen);
功能:透明通道传送缓冲区,向指定的用户传输缓冲区
返回值:0 表示成功,否则为出错代码
参数:
dwUserid: 目标用户编号,不能为-1
lpBuf: 缓冲区
dwLen:  缓冲区的大小
备注:
可以利用该方法实现自定义功能,缓冲区采用透明传输,效率与
BRAS_SendBufToRoom、BRAS_SendBufToUser 两个方法相同,只是触发客户端
的回调函数不同。



这里的缓冲区怎么设置?


作者: admin    时间: 2014-12-1 16:40
缓冲区可以是一个字节数组,或是一个字符串等,也可以是一块内存,传入首地址即可。
作者: 龙少    时间: 2014-12-1 21:26
admin 发表于 2014-12-1 16:40
缓冲区可以是一个字节数组,或是一个字符串等,也可以是一块内存,传入首地址即可。

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

客户端在哪里能够接收到数据
作者: admin    时间: 2014-12-1 21:27
您好,请参考:如何使用缓冲区及文件传输功能?
作者: 龙少    时间: 2014-12-1 22:23
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的数据获取出来?
作者: admin    时间: 2014-12-1 22:35
您好,可参考C#的示例工程源代码,位于AnyChat for Windows SDK\src\client\c#目录下。
作者: 龙少    时间: 2014-12-1 22:45
admin 发表于 2014-12-1 22:35
您好,可参考C#的示例工程源代码,位于AnyChat for Windows SDK\src\client\c#目录下。

方便的话把那段模块截个图       就是客户端接收的那个     实在是找不到   麻烦了
作者: admin    时间: 2014-12-2 09:00
您好,代码位于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. }
复制代码

作者: cfy880309    时间: 2015-8-2 10:32
源代码中hallForm.TransBuffer_CallBack是个空函数,在这个函数里写的代码不执行
作者: admin    时间: 2015-8-2 10:51
您好,需要在客户端向服务器发数据(Userid=0)时,才会触发服务器的回调函数的!




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3