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
- Mqtt协议IOS端移植2
- Mqtt协议IOS端移植1
- Mqtt协议IOS端移植3
- iOS MQTT 协议应用
- MQTT协议(2)-MQTT 初次体验
- 初识MQTT协议(2)
- mqtt协议
- mqtt协议
- MQTT协议
- MQTT协议
- MQTT协议
- Mqtt协议
- mqtt协议
- MQTT协议
- MQTT协议
- MQTT协议
- MQTT协议
- MQTT协议
- 循环-21. 求交错序列前N项和(15)
- 关于CGAffineTransform
- Reverse Nodes in k-Group
- Oracle ADDM 自动诊断监视工具介绍
- 数组-14. 数字加密(15)
- Mqtt协议IOS端移植2
- Memento(eighthDay)
- .Net之路(十五)图解LoadRunner压力测试
- 字符串匹配神器----KMP算法
- Mqtt协议IOS端移植3
- 【OJ练习】三天打渔两天晒网
- HDU3247 Resource Archiver
- java的引用传递和值传递
- 关于更换手机字体