Mqtt协议IOS端移植3

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


转载于:https://www.cnblogs.com/gccbuaa/p/7214395.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java第三课,流程控制语句

流程控制语句条件语句:if语句:*if(条件 boolean类型){ true }*if(boolean表达式){true}else{false结果}*多重 if else if(){}else if(){}else *嵌套ifSwitch语句:*switch(表达式){ case…

在cli命令行上显示当前数据库,以及查询表的行头信息

在$HIVE_HOME/conf/hive-site.xml文件下加入以下配置文件 <property><name>hive.cli.print.header</name><value>true</value><description>Whether to print the names of the columns in query output.</description> </proper…

两点之间最短路径:弗洛伊德算法

弗洛伊德算法是计算无向有权图中两点间最短路径的算法&#xff0c;复杂度为O(n^3)。其思路是将两点间距离分为过&#xff08;指定的&#xff09;第三点或是不过&#xff0c;然后取它们的最小值&#xff0c;如此循环就可以得到两点之间真正的最小值。 void floyd() {for (int k …

最常用的JavaScript 事件

JavaScript 事件&#xff1a; 事件指的就是当某些组件执行了某些操作后&#xff0c;会触发某些代码的执行。 更多事件&#xff1a;https://www.w3school.com.cn/jsref/dom_obj_event.asp 常用的事件&#xff1a; 属性触发时机onabort图像加载被中断onblur元素失去焦点onchange…

Codevs 1025 选菜

1025 选菜 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题解题目描述 Description在小松宿舍楼下的不远处&#xff0c;有PK大学最不错的一个食堂——The Farmer’s Canteen&#xff08;NM食堂&#xff09;。由于该食堂的菜都很不错&#xff0c;价格也公道&#xff0c…

SAS笔记(2) RETAIN语句

本文重点&#xff1a; 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值。SUM语句和SET语句会自动RETAIN变量。1. RETAIN语句 1.1 Example 1 先来看看在DATA步不使用和使用RETAIN语句的差异 没有使用RETAIN: DATA WITHOUT_1;PUT "Before the INPUT statement: &…

Hive优化策略

hive优化目标 在有限的资源下&#xff0c;运行效率高。常见问题 数据倾斜、Map数设置、Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain select no,count(*) from testudf group by no; explain extended select no,count(*) from testudf group …

POJ 3268 Silver Cow Party (最短路径)

POJ 3268 Silver Cow Party &#xff08;最短路径&#xff09; Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidi…

GPU性能实时监测的实用工具

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

条件随机场-应用

今天介绍CRFs在中文分词中的应用 工具&#xff1a;CRF,可以去 https://taku910.github.io/crfpp/ 下载&#xff0c;训练数据和测试数据可以考虑使用bakeoff2005,这是链接 http://sighan.cs.uchicago.edu/bakeoff2005/ 首先需要了解一些概念 字标记法——统计分词模型常用的方法…

Codeforces-808D Array Division (multiset 折半???)

题目链接&#xff1a; http://codeforces.com/problemset/problem/808/D 题意: 给定一个数列&#xff0c;移动0或1个数字&#xff0c;使数列能从某个位置分开前后两半的和相等。 思路&#xff1a; from: http://www.cnblogs.com/robin1998/p/6864278.html 我们可以假想有个隔板…

Linq中dbSet 的查询

1.Find&#xff1a;按照关键字的ID号来查询&#xff08;速度快&#xff09; 如&#xff1a; ADShiTi aDShiTi db.ADShiTis.Find(id); 2.FirstOrDefault&#xff1a;根据部分条件查询&#xff0c;显示最前的一条 如&#xff1a;按照daCID进行查找&#xff0c;有&#xff0c…

AJAX详解教程

AJAX(Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML。本身不是一种新技术&#xff0c;而是多个技术综合。用于快速创建动态网页的技术。一般的网页如果需要更新内容&#xff0c;必需重新加载个页面。而 AJAX通过浏览器与服务器进行少量数据交换&#…

JSON转换工具

JSON的处理&#xff1a; JSON(JavaScript Object Notation)&#xff1a;是一种轻量级的数据交换格式。 它是基于 ECMAScript 规范的一个子集&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅…

如何获取codeforces的完整数据

推荐&#xff1a; 如何获取codeforces的完整数据&#xff1f;&#xff08;玄学方法&#xff09; http://www.cnblogs.com/Saurus/p/6220513.html转载于:https://www.cnblogs.com/cmyg/p/7232386.html

Vue与Element入门使用

Vue&#xff1a; Vue是一套构建用户界面的渐进式前端框架。只关注视图层&#xff0c;并且非常容易学习&#xff0c;还可以很方便的与其它库或已有项目整合。通过尽可能简单的API来实现响应数据的绑定和组合的视图组件。视图&#xff1a;负责页面渲染&#xff0c;主要由HTMLCSS构…

nRF51822 配对之device_manager_init 调用,以及保证 用户数据存储 的Flash 操作不与device manager 模块冲突...

昨天 遇到了一个烦心的问题&#xff0c;被老外客户怼了两句&#xff0c;恼火&#xff0c;很想发火&#xff0c;发现英文不够用&#xff0c;算了&#xff0c;就不跟直肠的鬼佬一般见识。说正事。 最近的一个nRF51822MT2503 钱包防丢项目&#xff0c;准备接近量产了。昨天做APP的…

表单的ajax填入问题

又是表单 今天的表单是用事件委托从table里面获得eventId&#xff0c;用get请求从后台获得json数据填入表单中 第一个执行的比较顺利&#xff0c;但当再添加一个事件之后&#xff0c;修改&#xff08;将数据填入表单&#xff09;功能竟然失灵了&#xff0c;然后各种找原因&…

Redis基础-下载安装配置

Nosql&#xff1a; NoSQL&#xff1a;即 Not-Only SQL&#xff08; 泛指非关系型的数据库&#xff09;&#xff0c;作为关系型数据库的补充。 作用&#xff1a; 应对基于海量用户和海量数据前提下的数据处理问题。 特征&#xff1a; 可扩容&#xff0c;可伸缩大数据量下高性能…

R学习-- 数组和矩阵

生成 4行5列的数组&#xff0c;逐列逐行赋值x array(1:20, dim c(4,5))依据已知向量生成二维数组i array(c(1:3,3:1,4:6,5:7), dimc(3,4))也能够调整行列顺序 &#xff08;3行4列变为4行3列&#xff09;i array (c(1:3,3:1,4:6,7:9), dimc(4,3))数组a元素作为索引值操作数组…