Mqtt协议IOS端移植2

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

MqttFramework.h

#import <Foundation/Foundation.h>#import "MQTTClient.h"#import "BusinessModuleProtocol.h"#import "BusinessFramework.h"#import "AppDelegate.h"@interface MqttFramework : NSObject<MQTTDelegate,BusinessModuleProtocol>{    BusinessFramework   *businessFrameworks_;}/** * @brief 单例模式的设置 * * @param [in] N/A * @param [out] N/A * @return void * @note */+(MqttFramework *)getMQttFrameInstance;/** * @brief 给mqtt服务器发送消息  暂时未做使用  待扩展 * * @param [in] N/A * @param [out] N/A * @return void * @note */+(void)publishMessage:(NSString *)message   withTopicType:(NSString *)topicType;/** * @brief 请求的结果处理 * * @param [in] N/A * @param [out] N/A * @return void * @note */-(void)requestResult:(NSString *)topic  withData:(id)resultData;/** * @brief 定义mqtt消息主题 * * @param [in] N/A * @param [out] N/A * @return void * @note */-(void)productTheme:(NSString *)theme;/** * @brief 重连mqtt服务器 * * @param [in] N/A * @param [out] N/A * @return void * @note */-(void)reconnectMqtt;@end


MqttFramework.m


#import "MqttFramework.h"#import "MQTTClient.h"#import "XmlAdept.h"#import "ASIFormDataRequest.h"@implementation MqttFramework/** * @brief  得到模块控制器的句柄单例 * * @param [in] N/A * @param [out] N/A * @return void * @note */static MqttFramework *mqttInstance = nil;+(MqttFramework*)getMQttFrameInstance{    @synchronized(self){if(mqttInstance==nil){mqttInstance=[[self alloc]init];        }}return mqttInstance;}#pragma  --mark  BusinessModuleProtocol  delegate- (int)initBusinessModule:(BusinessModuleInfo*)info{        info.businessModuleIdEX = @"MqttFrameWork";//    businessFrameworks_ = info.businessFramework;    return 0;}- (int)callBusinessProcessEX:(NSString *)capabilityId withMessageType:(NSString *)MessageType WithMessage:(id)messageVector{    NSLog(@"capabilityId = %@  topic = %@  messageVector = %@",capabilityId,MessageType,messageVector);        AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];MQTTClient   *mosq = [app mosquittoClient];        //    [mosq setHost:Mqtt_URL];//    [mosq connect];//    [mosq subscribe:@"nanode/red_led"];//  [mosq subscribe:@"nanode/green_led"];//    [mosq subscribe:@"iCombo"];//    [mosq subscribe:@"iPhone"];        //1.组装xml工作    //2.发送请求消息    //在此正式调用mqtt请求        NSString  *sendStr = [[NSString alloc] initWithData:[XmlAdept makeMqttXML:MessageType withDictionary:(NSDictionary *)messageVector] encoding:NSUTF8StringEncoding];    //    /****************去掉最后换行符********************/    int index = sendStr.length-1;    sendStr = [sendStr substringToIndex:index];    //  /*********************end*************************/    //    ASIFormDataRequest *formDataRequest = [ASIFormDataRequest requestWithURL:nil];    //NSString *messageEx = [formDataRequest encodeURL:sendStr];//    NSString *messageEx = [formDataRequest encodeURL:@"我家"];    //[mosq publishString:sendStr toTopic:@"iCombo" retain:YES];//    NSLog(@"%@",messageEx);    NSString *string = [NSString stringWithFormat:@"**%@**",sendStr];    NSLog(@"senderMesg = %@",string);    [mosq publishString:sendStr toTopic:@"iCombo" retain:NO];        return 0;}-(void)requestResult:(NSString *)topic  withData:(id)resultData{    NSLog(@"发送业务广播 给监听者");    [businessFrameworks_ broadcastBusinessNotifyEX:topic withInParam:resultData];}/** * @brief 定义mqtt消息主题 * * @param [in] N/A * @param [out] N/A * @return void * @note */-(void)productTheme:(NSString *)theme{    AppDelegate  *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];    MQTTClient *mosq = [app mosquittoClient];    NSUserDefaults   *ud = [NSUserDefaults standardUserDefaults];    if ([[ud objectForKey:@"host"] isEqualToString:@"no"])    {        [mosq setHost:Mqtt_URL];    }    else    {        [mosq setHost:[ud stringForKey:@"host"]];    }        //[mosq setHost:Mqtt_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 mosquittoClient];    NSUserDefaults   *ud = [NSUserDefaults standardUserDefaults];    if ([ud stringForKey:@"host"])    {        [mosq setHost:[ud stringForKey:@"host"]];    }    else    {        [mosq setHost:Mqtt_URL];    }    [mosq reconnect];   }#pragma --mark  mosquittoclientDelegate  - (void) didConnect:(NSUInteger)code{    if (code == 0)    {        NSLog(@"连接本地mosquito代理服务器返回码为:%d 连接mqtt成功",code);    }    else    {        NSLog(@"连接Mqtt服务器失败");    }    }- (void) didDisconnect{NSLog(@"mqtt disconnect!");}//处理各个主题对应的message- (void) didReceiveMessage: (NSString*)message topic:(NSString*)topic{NSLog(@"%@ => %@", topic, message);    //deal with diffrent message here:    //if   else  分支处理    //1.xml的解析工作    //将收到的消息处理后然后广播出去 接收者会根据主题处理自己的业务    NSArray   *resultArr = [[NSArray alloc]initWithObjects:message, nil];    NSArray   *list = [XmlAdept mqttParseMessageNode:resultArr];    NSString  *type = [[list objectAtIndex:0] objectForKey:@"type"];    [self requestResult:type withData:list];        }//publish后回调的messageId- (void) didPublish: (NSUInteger)messageId{    NSLog(@"send messageId = %d",messageId);}//定制一个主题- (void) didSubscribe: (NSUInteger)messageId grantedQos:(NSArray*)qos{    NSLog(@"messageId = %d grantedQos = %@",messageId,qos);}//取消一个主题- (void) didUnsubscribe: (NSUInteger)messageId{    NSLog(@"unsubscibe messageId = %d",messageId);}/** * @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 mosquittoClient];    [mosq publishString:message toTopic:topicType retain:NO];  //消息的retain类型设置为NO让其不在消息缓冲池中保留}-(void)dealloc{    [super dealloc];}@end



11 0
原创粉丝点击