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 给mqttserver发送消息 临时未做使用 待扩展
*
* @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 重连mqttserver
*
* @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 重连mqttserver
*
* @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代理server返回码为:%d 连接mqtt成功",code);
}
else
{
NSLog(@"连接Mqttserver失败");
} } - (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 给mqttserver发送消息 对外接口
*
* @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

Mqtt协议IOS端移植2的更多相关文章

  1. Mqtt协议IOS端移植3

    ServerMqFramework.h #import "MqttFramework.h" @interface ServerMqFramework : MqttFramework ...

  2. Mqtt协议IOS移植完1

    MQTTClient.h #import <Foundation/Foundation.h> @protocol MQTTDelegate <NSObject> /** * @ ...

  3. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  4. MQTT协议学习及实践(Linux服务端,Android客户端的例子)

    前言 MQTT(Message Queuing Telemetry Transport),是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提 ...

  5. mqtt协议实现 java服务端推送功能(一)安装

    最近有个新需求,需要通过java服务端把信息推送到mqtt服务器上,安卓和ios端从mqtt服务器上获取信息实现推送. 1. 本地需要安装Mosquitto服务器  http://mosquitto. ...

  6. MQTT 协议学习:008-在STM32上移植MQTT

    前言 通过前面了解MQTT有关概念.分析了有关的报文,我们对于这个协议也有了更深的认识.但纸上谈来终觉浅,绝知此事要躬行. 本文参考:<STM32+W5500+MQTT+Android实现远程数 ...

  7. mqtt协议实现 java服务端推送功能(三)项目中给多个用户推送功能

    接着上一篇说,上一篇的TOPIC是写死的,然而在实际项目中要给不同用户 也就是不同的topic进行推送 所以要写活 package com.fh.controller.information.push ...

  8. mqtt协议实现 java服务端推送功能(二)java demo测试

    上一篇写了安装mosQuitto和测试,但是用cmd命令很麻烦,有没有一个可视化软件呢? 有,需要在google浏览器下载一个叫MQTTLens的插件 打开MQTTLens后界面如下: 打开conne ...

  9. 基于MQTT协议进行应用开发

    官方协议有句如下的话来形容MQTT的设计思想: "It is designed for connections with remote locations where a "sma ...

随机推荐

  1. 元素类型 “meta” 必须由匹配的结束标记 “” 终止

    报错 org.xml.sax.SAXParseException: 元素类型 “meta” 必须由匹配的结束标记 “” 终止 系统自动创建 <meta charset="UTF-8&q ...

  2. 洛谷 P3955 图书管理员【模拟/思维】

    题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那 ...

  3. 牛客nowcoder Noip提高组第四场

    https://www.nowcoder.com/acm/contest/175#question A-动态点分治 Description CJK 是一个喜欢数据结构的同学.一天他看到 BZOJ 40 ...

  4. 后门构建工具Backdoor Factory

    后门构建工具Backdoor Factory   在渗透测试中,后门程序帮助渗透测试人员在目标机器上执行各种预期的操作.例如,它可以建立从目标主机到攻击机的网络连接,方便渗透测试人员控制目标主机.Ka ...

  5. 【poj1149】 pigs 网络流最大流问题

    描述 Description 尼克在一家养猪场工作,这家养猪场共有M间锁起来的猪舍,由于猪舍的钥匙都给了客户,所以尼克没有办法打开这些猪舍,客户们从早上开始一个接一个来购买生猪,他们到达后首先用手中的 ...

  6. [ZJb417]区间众数

    题目大意: 给定一个长度为$n(1\leq n\leq10^5)$的正整数序列$s(1\leq s_i\leq n)$,对于$m(1\leq m\leq10^)$次询问$l,r$,每次求区间$[s_l ...

  7. 分布式协调服务Zookeeper

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  8. PHP生成GUID的函数

    GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生 ...

  9. nginx静态文件访问404

    在http模块下加入下面的代码 server { listen 80; server_name 192.168.1.249; #本机ip #access_log logs/host.access.lo ...

  10. JAVA常见算法题(十八)

    package com.xiaowu.demo; /** * 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人,以抽签决定比赛名单. 有人向队员打听比赛的名单:a说他不和x比 ...