// // IfishUDPBroadCastHelper.m // Ifish // // Created by imac on 16/9/12. // Copyright © 2016年 lianxiang. All rights reserved. // #import "IFishHotpotUDPHelper.h" #import "LxGetCurrentIp.h" #import "AppDelegate.h" #import "ConnectHotspotModel.h" #import "ResetDeviceModel.h" #import "RestartDeviceModel.h" #define K_ReSendTimeInterval 3 @interface IFishHotpotUDPHelper () { NSString * _ssidName; NSString *_pwd; } @end @implementation IFishHotpotUDPHelper + (IFishHotpotUDPHelper *)sharedInstance{ static IFishHotpotUDPHelper *sharedInstace = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstace = [[self alloc] init]; }); return sharedInstace; } - (instancetype)init { if (self = [super init]) { self.clientSocket = [[AsyncUdpSocket alloc] initWithDelegate:self]; UInt16 bindPort = 9954; NSError *error; [self.clientSocket enableBroadcast:YES error:&error]; //本地接收端口 [self.clientSocket bindToPort:bindPort error:&error]; [self.clientSocket receiveWithTimeout:-1 tag:0]; } return self; } - (void)broadCastHotspotConnectCommandWith:(NSString *)ssidName pwd:(NSString *)pwd { _ssidName = ssidName; _pwd = pwd; [self postmsg:@"命令已发出"]; [self sendConnectHotspotSoketdata]; } - (void)broadCastRestCommand { [self postmsg:@"命令已发出"]; [self sendRestSocketData]; } - (void)sendRestSocketData { NSString* hostS = @"192.168.4.1"; ResetDeviceModel *model = [ResetDeviceModel new]; NSString *request=[NSString stringWithFormat:@"%@", model.description]; NSData *data=[dataContorl stringToHexData:request]; UInt16 port = 333; [self.clientSocket sendData:data toHost:hostS port:port withTimeout:-1 tag:1]; } - (void)broadCastRestartCommand { [self postmsg:@"命令已发出"]; [self sendRestSocketData]; } - (void)sendRestartSocketData { NSString* hostS = @"192.168.4.1"; //120.55.190.56 服务器IP 指令中用 RestartDeviceModel *model = [RestartDeviceModel new]; NSString *request=[NSString stringWithFormat:@"%@", model.description]; NSData *data=[dataContorl stringToHexData:request]; UInt16 port = 333; [self.clientSocket sendData:data toHost:hostS port:port withTimeout:-1 tag:1]; } -(void)sendConnectHotspotSoketdata{ NSString* hostS = @"192.168.4.1"; //120.55.190.56 服务器IP 指令中用 ConnectHotspotModel *model = [ConnectHotspotModel new]; model.ssidName = _ssidName; model.pwd = _pwd; NSString *request=[NSString stringWithFormat:@"%@", model.description]; NSData *data=[dataContorl stringToHexData:request]; UInt16 port = 333; [self.clientSocket sendData:data toHost:hostS port:port withTimeout:-1 tag:1]; } -(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port { [self.loopTimer invalidate]; NSString* result = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; IFishUDPHelperBackMsgModel *model = [[IFishUDPHelperBackMsgModel alloc] initWithData:data]; if ([model.result isEqualToString:@"01"]) { if ([self.delegate respondsToSelector:@selector(udpHelperCommandExecutedSuccess:)]) { [self.delegate udpHelperCommandExecutedSuccess:model]; } } else { AppDelegate *app =(AppDelegate*)[UIApplication sharedApplication].delegate; [app.window makeToast:[NSString stringWithFormat:@"收到答复:%@", result]]; } return YES; } -(void)onUdpSocketDidClose:(AsyncUdpSocket *)sock{ [self.loopTimer invalidate]; NSLog(@"关闭"); } -(void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag{ NSLog(@"didSendData"); } -(void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error{ NSLog(@"dueToError%@",error); [self postmsg:error.localizedDescription]; [self.loopTimer invalidate]; } -(void)dealloc{ [self.clientSocket close]; [self.loopTimer invalidate]; } - (void)postmsg:(NSString *)msg { if ([self.delegate respondsToSelector:@selector(udpHelperMessage:)]) { [self.delegate udpHelperMessage:msg]; } } @end