Mqtt协议IOS端移植3

来源:互联网 发布:网络用户的行为分析 编辑:程序博客网 时间:2024/06/14 00:14

ServerMqFramework.h

#import "MqttFramework.h"@interface ServerMqFramework : MqttFramework/** * @brief  得到模块控制器的句柄单例 * * @param [in] N/A * @param [out] N/A * @return void * @note */+(ServerMqFramework*)getMQttServerFrameInstance;- (int)callBusinessProcessEX:(NSString *)capabilityId withMessageType:(NSString *)MessageType WithMessage:(id)messageVector withTopic:(NSString *)topic;@end


ServerMqFramework.m


#import "ServerMqFramework.h"#import "getMacAddress.h"@implementation ServerMqFramework/** * @brief  得到模块控制器的句柄单例 * * @param [in] N/A * @param [out] N/A * @return void * @note */static ServerMqFramework *mqttInstance = nil;+(ServerMqFramework*)getMQttServerFrameInstance{    @synchronized(self){if(mqttInstance==nil){mqttInstance=[[self alloc]init];        }}return mqttInstance;}#pragma  --mark  BusinessModuleProtocol  delegate- (int)initBusinessModule:(BusinessModuleInfo*)info{        info.businessModuleIdEX = @"MqttServerFrameWork";//    businessFrameworks_ = info.businessFramework;    return 0;}//指定发送到远程的响应接收者的主题   (实现宏观上的点对点传输)  //2012/11/30   modify- (int)callBusinessProcessEX:(NSString *)capabilityId withMessageType:(NSString *)MessageType WithMessage:(id)messageVector withTopic:(NSString *)topic{    NSLog(@"server capabilityId = %@  topic = %@  messageVector = %@",capabilityId,MessageType,messageVector);        AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];MQTTClient   *serverMQTTClient = [app serverMqClient];                   NSString  *sendStr = [[NSString alloc] initWithData:[XmlAdept makeMqttXML:MessageType withDictionary:(NSDictionary *)messageVector] encoding:NSUTF8StringEncoding];        //    /****************去掉最后换行符********************/    int index = sendStr.length-1;    sendStr = [sendStr substringToIndex:index];        NSString *string = [NSString stringWithFormat:@"**%@**",sendStr];    NSLog(@"server senderMesg = %@",string);    [serverMQTTClient publishString:sendStr toTopic:topic retain:NO];        return 0;}-(void)requestResult:(NSString *)topic  withData:(id)resultData{    NSLog(@"远程mq服务器发送业务广播 给监听者");    [businessFrameworks_ broadcastBusinessNotifyEX:topic withInParam:resultData];}/** * @brief 定义mqtt消息主题 * * @param [in] N/A * @param [out] N/A * @return void * @note */-(void)productTheme:(NSString *)theme{        NSLog(@"server theme = %@",theme);    AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];    MQTTClient *mosq = [app serverMqClient];    [mosq setHost:Mqtt_Server_URL];          [mosq connect];    [mosq subscribe:theme];}/** * @brief 重连mqtt服务器 * * @param [in] N/A * @param [out] N/A * @return void * @note */-(void)reconnectMqtt{    AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];    MQTTClient *mosq = [app serverMqClient];       [mosq setHost:Mqtt_Server_URL];        [mosq reconnect];    }#pragma --mark  mosquittoclientDelegate- (void) didConnect:(NSUInteger)code{    if (code == 0)    {        NSLog(@"连接远程Mqtt服务器返回码为:%d 连接mqtt成功",code);    }    else    {        NSLog(@"连接远程Mqtt服务器失败");    }    }- (void) didDisconnect{NSLog(@"Server mqtt disconnect!");    AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];    MQTTClient *mosq = [app serverMqClient];    //断开后自动重连    //3g或wifi任一可达就重连    if ([Common IsEnable3G] || [Common IsEnableWIFI])    {        [mosq reconnect];   //远程MQTT服务器端重连        NSString  *serverTheme = getMacAddress();        [mosq subscribe:serverTheme]; //重新订阅主题    }    }//处理各个主题对应的message- (void) didReceiveMessage: (NSString*)message topic:(NSString*)topic{NSLog(@" serverMqtt %@ => %@", topic, message);      NSArray   *resultArr = [[NSArray alloc]initWithObjects:message, nil];    NSArray   *list = [XmlAdept mqttParseMessageNode:resultArr];    NSString  *type = [[list objectAtIndex:0] objectForKey:@"type"];        [self requestResult:type withData:list];        }/** * @brief 给远程mqtt服务器发送消息   对外接口 * * @param [in] N/A * @param [out] N/A * @return void * @note */+(void)publishMessage:(NSString *)message   withTopicType:(NSString *)topicType{    AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];MQTTClient *mosq = [app serverMqClient];    [mosq publishString:message toTopic:topicType retain:NO];  //消息的retain类型设置为NO让其不在消息缓冲池中保留}-(void)dealloc{    [super dealloc];}@end


8 0
原创粉丝点击