龙少 发表于 2014-12-1 15:44:05

透明通道问题

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



这里的缓冲区怎么设置?

admin 发表于 2014-12-1 16:40:22

缓冲区可以是一个字节数组,或是一个字符串等,也可以是一块内存,传入首地址即可。

龙少 发表于 2014-12-1 21:26:12

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

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

客户端在哪里能够接收到数据

admin 发表于 2014-12-1 21:27:28

您好,请参考:如何使用缓冲区及文件传输功能?

龙少 发表于 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的数据获取出来?

admin 发表于 2014-12-1 22:35:43

您好,可参考C#的示例工程源代码,位于AnyChat for Windows SDK\src\client\c#目录下。

龙少 发表于 2014-12-1 22:45:19

admin 发表于 2014-12-1 22:35
您好,可参考C#的示例工程源代码,位于AnyChat for Windows SDK\src\client\c#目录下。

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

admin 发表于 2014-12-2 09:00:03

您好,代码位于AnyChat for Windows SDK\src\client\c#\AnyChatCallCenter\VideoChatClient\Login.cs里面,查找:TransBuffer即可。//透明通道回调
SystemSetting.TransBuffer_OnReceive = new TransBufferReceivedHandler(TransBuffer_CallBack);

……

//透明通道回调函数
public void TransBuffer_CallBack(int userId, IntPtr buf, int len, int userValue)
{
        try
        {
                if (hallForm != null)
                        hallForm.TransBuffer_CallBack(userId, buf, len, userValue);
        }
        catch (Exception ex)
        {
                Log.SetLog("VideoChat.Login.TransBuffer_CallBack       TransBuffer_CallBack:" + ex.Message.ToString());
        }
}

cfy880309 发表于 2015-8-2 10:32:49

源代码中hallForm.TransBuffer_CallBack是个空函数,在这个函数里写的代码不执行

admin 发表于 2015-8-2 10:51:01

您好,需要在客户端向服务器发数据(Userid=0)时,才会触发服务器的回调函数的!
页: [1]
查看完整版本: 透明通道问题