有没有办法让LG WebOS服务保持活力?

时间:2017-09-11 01:58:03

标签: javascript webos

我正在尝试按照官方文档在WebOS 3.0上创建JS service

我可以在JS服务和我的应用程序之间发送数据,但有时JS服务不会响应请求,如果它被闲置了20秒。我还试图增加超时per this。不幸的是,它似乎没有起作用。

这是我的代码

申请方

const request = webOS.service.request('luna://com.myapp.service', {
        method : 'fetch',
        parameters : { url, method, headers, body },
        onFailure : (err) => {
          reject(err)
        },
        onSuccess : (s) => {
          console.log('request success', s)
        },
        onComplete : (resp) => {
          const isSuccess = resp.data.status >= 200 && resp.data.status < 400
          var payload = {
            json : () => Promise.resolve(JSON.parse(resp.data.body)),
            ok : isSuccess,
            headers : resp.data.headers,
            status : resp.data.status,
            error : isSuccess
              ? null
              : resp.data.body
          }
          resolve(payload)
        }
      })
    })

服务方

var Service = require('webos-service')
var service = new Service('com.myapp.service')

service.register('fetch', function(message) {
var payload = message.payload
  if(!payload) {
    message.respond({
      returnValue : true,
      error : 'Message does not have a `payload`'
    })
    return
  }
  var url = payload.url,
      headers = payload.headers,
      method = payload.method,
      body = payload.body
  var request = http.request({
    method : method,
    hostname : URL.parse(url).hostname,
    path : URL.parse(url).path,
    headers : headers,
  }, function(res) {
    var data = ''
    res.on('data', function(chunk) { data+=chunk })
    res.on('end', function() {
      message.respond({
        returnValue : true,
        data : {
          status : res.statusCode,
          statusText : res.statusMessage,
          headers : res.headers,
          body : data,
        }
      })
    })
  })
  request.on('error', function(err) {
    console.log(err)
    message.respond({
      returnValue : true,
      error : err
    })
  })
  request.end()
})

1 个答案:

答案 0 :(得分:2)

我最近为LG智能电视编写了一个JavaScript应用程序,强烈建议使用 socket.io 进行客户端和服务器之间的所有通信。 最初让它起作用有点棘手,但是完美无缺。

以下是连接的外观......

    var socket = io("http://10.27.101.95");
    idUser = getCookie("idUser");   // Retrieved from device and set to cookie.

// ┌────────────────────────────────────────────────────────────────┐
// │   Socket.io: Connect/Emit                                      │

    socket.on('connect', function() {
        socket.emit("addUser", {
            "idUser": idUser
        });
        reconnectHideData = false;
    });

    // Hide data if server cannot be reached.
    var reconnectCount = 0;
    var reconnectHideData = false;
    socket.on('reconnect_error', function() {
        if (reconnectCount < 10 && reconnectHideData == false) {
            // console.log( '---=== Reconnect attempt: ' + reconnectCount + ' ===---' );
            setTimeout(function(){
                reconnectCount++;
            }, 3000);
        }
        if (reconnectCount == 10 && reconnectHideData == false) {
            // console.log( '-----===== Cleared Data =====-----' );
            $('.section ').addClass(' u-hide ');
            $('.greeting').addClass(' u-hide ');
            reconnectHideData = true;
            reconnectCount = 0;
        }
        else {
            return;
        }
    });

    // Necessary to trigger event to be emitted server side.
    setInterval(function(){
        socket.emit("reqData");
    }, 5000);

// └────────────────────────────────────────────────────────────────┘

之后,所有这一切都是处理和格式化返回的数据。