zoukankan      html  css  js  c++  java
  • 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
    


  • 相关阅读:
    (转载)SAPI 包含sphelper.h编译错误解决方案
    C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)
    504. Base 7(LeetCode)
    242. Valid Anagram(LeetCode)
    169. Majority Element(LeetCode)
    100. Same Tree(LeetCode)
    171. Excel Sheet Column Number(LeetCode)
    168. Excel Sheet Column Title(LeetCode)
    122.Best Time to Buy and Sell Stock II(LeetCode)
    404. Sum of Left Leaves(LeetCode)
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7214395.html
Copyright © 2011-2022 走看看