2017-01-23 3 views
0

У меня есть сервер, который через 10 секунд отправляет true. Что я могу сделать, чтобы приложение iOS подождало, пока оно не получит это истинное значение с сервера? 10 секунд не являются постоянными, мне нужно, чтобы приложение могло получать логическое значение независимо от того, сколько времени занимает сервер.Ждите сообщения, используя socket.io и Swift 3

Мое приложение будет использоваться для полива воды до тех пор, пока оно не достигнет определенной высоты, после чего оно уведомит вас на вашем телефоне, когда это будет сделано.

UPDATE (Дополнительная информация):

Ссылка для руководства я следующее: http://www.appcoda.com/socket-io-chat-app/

func getChatMessage(completionHandler: (messageInfo: [String: AnyObject]) -> Void) { 
    socket.on("newChatMessage") { (dataArray, socketAck) -> Void in 
     var messageDictionary = [String: AnyObject]() 
     messageDictionary["nickname"] = dataArray[0] as! String 
     messageDictionary["message"] = dataArray[1] as! String 
     messageDictionary["date"] = dataArray[2] as! String 

     completionHandler(messageInfo: messageDictionary) 
    } 
} 


override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.chatMessages.append(messageInfo) 
      self.tblChat.reloadData() 
      //    self.scrollToBottom() 
     }) 
    } 
} 

Я хочу сделать что-то очень похожее на это, которая постоянно получает письма с сервера и загружать их в вид. Однако этот код не работает с Swift 3/iOS 10, и я не могу найти документацию о том, как его обновить. Я попробовал просто вставить его в свой код и затем использовать рекомендованные исправления, чтобы попытаться заставить его работать, но это не так.

В конце концов, мой сервер будет размещен на Pi Zero, и мне нужно будет получить сообщение от Pi через сервер, чтобы вода достигла соответствующего уровня. Благодаря

+0

вы можете запускать таймер, который запускается каждые 1 секунду (или каждые 0,1 секунды или что-то еще), и отправлять предупреждение и заканчивать таймер, если true –

ответ

2

Результат:

IOS Исходный код:

После подключения к серверу.

socket.on("connect") { data, ack in 
    self.socket.emit("get-notified-water", "") 
} 

Сообщайте серверу, что вы хотите получить уведомление об уровне водяного бака.

self.socket.emit("get-notified-water", "") 

И тогда вы будете слушать уведомление здесь:

socket.on("notification-water") { data in 
    let levelTank = data.0.first as! Int 
    self.updateViewWithLevelTank(levelTank) 
} 

Примечание: Преднамеренно я не включил updateViewWithLevelTank реализацию функции, так как я хочу, чтобы вы сосредоточиться на важной части, которая соединяется с сервер и уведомление с уровнем водяного бака, кроме того, я не думаю, что сложно имитировать анимацию UIView.



сервера Исходный код:

setInterval будет вызывать анонимная функция пока levelTank не 100.

В которой анонимная функция, уведомляет клиента (гнездо iOS) levelTank y вызывается.

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

var port = 5000; 

io.on('connection', function(socket) { 

    socket.on('get-notified-water', function(data) { 
    var levelTank = 0; 
    var intervalTime = 500; 

    var intervalId = setInterval(function() { 
     levelTank += 10 
     socket.emit('notification-water', levelTank); 

     if (levelTank === 100) { 
     clearInterval(intervalId) 
     } 
    }, intervalTime); 
    }); 

}); 

http.listen(port, function() { 
    console.log('server up and running at %s port', port); 
}); 

Так дайте мне знать, если это работает для вашего дела или вам нужны дополнительные разъяснения моего примера, вероятно, я пропустил что-то, кто знает?;)

Смежные вопросы