AnyChat技术支持论坛

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

作者: Crystal    时间: 2014-8-13 12:20
标题: ios 透明通道问题
本帖最后由 Crystal 于 2014-8-13 12:20 编辑

  1. - (void)viewDidLoad
  2. {
  3.     [super viewDidLoad];
  4.    
  5.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AnyChatNotifyHandler:) name:@"ANYCHATNOTIFY" object:nil];
  6.     anychat = [[AnyChatPlatform alloc] init];
  7.     anychat.transDataDelegate = self;
  8.     anychat.notifyMsgDelegate = self;
  9.     anychat.textMsgDelegate = self;
  10.     anychat.userInfoDelegate = self;
  11.     anychat.stateChangeDelegate = self;
  12.    
  13.     [AnyChatPlatform InitSDK:0];
  14. }

  15. -(void) buttonTap
  16. {
  17.     //省略 data的获取,data不为nil
  18.     int transResult = [AnyChatPlatform TransBuffer:_dwUserId :data ];
  19.     int exResult = [AnyChatPlatform TransBufferEx:_dwUserId :data :0 :0 :0];
  20. }

  21. // 透明通道回调函数
  22. - (void) OnAnyChatTransBufferCallBackint) dwUserid : (NSData*) lpBuf
  23. {
  24.     if (_dwUserId == dwUserid) {
  25.         NSLog(@"+++++++++++++++%@",lpBuf);
  26.     }
  27. }

  28. // 透明通道数据扩展回调函数
  29. - (void) OnAnyChatTransBufferExCallBackint) dwUserid : (NSData*) lpBuf : (int) wParam : (int) lParam : (int) dwTaskId
  30. {
  31.     int i = dwUserid;
  32. }

  33. // 文件传输回调函数
  34. - (void) OnAnyChatTransFileCallBackint) dwUserid : (NSString*) lpFileName : (NSString*) lpTempFilePath : (int) dwFileLength : (int) wParam : (int) lParam : (int) dwTaskId
  35. {
  36.     int i = dwUserid;
  37. }

  38. // SDK Filter 通信数据回调函数
  39. - (void) OnAnyChatSDKFilterDataCallBackNSData*) lpBuf
  40. {
  41.    int i = 0;
  42. }
复制代码
以上代码为调用透明通道的代码


但是并没有进入回调方法,是哪里出现问题了吗?

作者: Crystal    时间: 2014-8-13 12:22
当前viewcontroller中还实现了视频连接,文字消息的传送,以上代码仅为透明通道的调用
作者: 廖斌    时间: 2014-8-13 13:38
Crystal 发表于 2014-8-13 12:22
当前viewcontroller中还实现了视频连接,文字消息的传送,以上代码仅为透明通道的调用

transResult 返回值是多少?_dwUserId 是多少呢?if (_dwUserId == dwUserid) 表示什么含义,可以去掉?
作者: Crystal    时间: 2014-8-13 14:26
我只是想让进回调,_dwUserId 是不为空,并且存在用户的,transResult是等于0的
作者: admin    时间: 2014-8-13 14:29
您好,A调用TransBuffer(B, data)这个API接口向B发送透明通道数据时,只会触发B端的回调事件,不会触发A端的回调事件,注意一下。
作者: Crystal    时间: 2014-8-13 14:36
admin 发表于 2014-8-13 14:29
您好,A调用TransBuffer(B, data)这个API接口向B发送透明通道数据时,只会触发B端的回调事件,不会触发A端 ...

都不会触发的哦

作者: 廖斌    时间: 2014-8-13 14:42
Crystal 发表于 2014-8-13 14:36
都不会触发的哦

将“if (_dwUserId == dwUserid)”注释掉看看
作者: Crystal    时间: 2014-8-16 18:24
廖斌 发表于 2014-8-13 14:42
将“if (_dwUserId == dwUserid)”注释掉看看

没有触发方法会和方法体有关吗?
作者: admin    时间: 2014-8-18 09:39
您好,您可以尝试用BRAnyChatSDKDemo.exe向iOS平台发送一个TransBuffer指令,看iOS这边是否可以收到?
作者: 廖斌    时间: 2014-8-18 10:47
Crystal 发表于 2014-8-16 18:24
没有触发方法会和方法体有关吗?

没有关系。方法都没有触发的话,有可能两个原因:
一、发送问题。调试方法:ios发送,用接收没问题android端或pc端接收。
二、接收问题:调试方法:用接收没问题android端或pc端发送,ios接收。
作者: chenxs    时间: 2014-8-18 17:40
本帖最后由 chenxs 于 2014-8-18 17:44 编辑

A 发数据给B时,接收方B才会触发AnyChatTransDataDelegate代理里的方法,而A是不会 触发的。

我是B接收方,叫另外一个人A发文字数据来我B方触发代理方法可以显示到结果。具体代码共享一下,看楼主有没有少了那部分。

注意一点,发送方,设置编码是UTF8,那么接收方也要是UTF8解码,不然接收方不发送方编码不一会出现乱码。

头文件:
#import "AnyChatPlatform.h"
#import "AnyChatDefine.h"
#import "AnyChatErrorCode.h"

@interface ClassName : UIViewController<AnyChatNotifyMessageDelegate,AnyChatTransDataDelegate,NSCoding>

@property (nonatomic, retain) AnyChatPlatform *cxsAnyChatPlatform;
- (void)AnyChatNotifyHandler:(NSNotification*)notify;

实现文件:
- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AnyChatNotifyHandler:) name:@"ANYCHATNOTIFY" object:nil];
    [AnyChatPlatform InitSDK:0];

    //登录
    [AnyChatPlatform Connect: GetServerIP : GetServerPort];
    [AnyChatPlatform Login:UserName : Password];

    //设置代理
    cxsAnyChatPlatform = [[AnyChatPlatform alloc] init];
    cxsAnyChatPlatform.notifyMsgDelegate  = self;  //basis Delegate
    cxsAnyChatPlatform.transDataDelegate = self;
}

#pragma mark - AnyChatNotifyMessageDelegate 异步消息事件协议
// 连接服务器消息
- (void) OnAnyChatConnect:(BOOL) bSuccess{}
// 用户登陆消息
- (void) OnAnyChatLogin:(int) dwUserId : (int) dwErrorCode
{
    [AnyChatPlatform EnterRoom:1 :nil];
}
// 用户进入房间消息
- (void) OnAnyChatEnterRoom:(int) dwRoomId : (int) dwErrorCode{}
// 房间在线用户消息
- (void) OnAnyChatOnlineUser:(int) dwUserNum : (int) dwRoomId{}
// 用户进入房间消息
- (void) OnAnyChatUserEnterRoom:(int) dwUserId{}
// 用户退出房间消息
- (void) OnAnyChatUserLeaveRoom:(int) dwUserId{}
// 网络断开消息

- (void) OnAnyChatLinkClose:(int) dwErrorCode{}

#pragma mark - AnyChatTransDataDelegate  数据传输事件协议
// 透明通道回调函数
- (void) OnAnyChatTransBufferCallBack:(int) dwUserid : (NSData*) lpBuf{
   //NSLog(@"发送方的用户ID%i",dwUserid);
    if (lpBuf != nil) {
        NSString *aString = [[NSString alloc] initWithData:lpBuf encoding: NSUTF8StringEncoding];
        NSLog(@"发送的文件内容是%@",aString);        
    }
}
// 透明通dwUserid数
- (void) OnAnyChatTransBufferExCallBack:(int) dwUserid : (NSData*) lpBuf : (int) wParam : (int) lParam : (int) dwTaskId{}
// 文件传输回调函数
- (void) OnAnyChatTransFileCallBack:(int) dwUserid : (NSString*) lpFileName : (NSString*) lpTempFilePath : (int) dwFileLength : (int) wParam : (int) lParam : (int) dwTaskId{}
// SDK Filter 通信数据回调函数

- (void) OnAnyChatSDKFilterDataCallBack:(NSData*) lpBuf{}

//通知中心句柄
- (void)AnyChatNotifyHandler:(NSNotification*)notify
{
    NSDictionary* dict = notify.userInfo;
    [cxsAnyChatPlatform OnRecvAnyChatNotify:dict];
}


作者: Crystal    时间: 2014-9-3 11:43
chenxs 发表于 2014-8-18 17:40
A 发数据给B时,接收方B才会触发AnyChatTransDataDelegate代理里的方法,而A是不会 触发的。

我是B接收 ...

这些只有接收啊,没有发送数据的代码啊,A方代码呢
作者: chenxs    时间: 2014-9-3 12:55
本帖最后由 chenxs 于 2014-9-3 15:55 编辑

您好,在A方登录成功之后,就可以调用以下TransBuffer方法发了。

- (void) OnAnyChatLogin:(int) dwUserId : (int) dwErrorCode
{
        NSString *stext = [[NSString alloc] initWithFormat:@"中文发送"];
        NSData* sData = [stext dataUsingEncoding:NSUTF8StringEncoding];

        [AnyChatPlatform TransBuffer:userID :sData];        //发信息
}









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