Search code examples
socketswebsocketsamsung-smart-tv

Using WebSockets on Samsung Smart TV


My requirement is to have a listening socket in my Samsung Smart TV app, in order to receive events from a device in the same local network.

I've been searching the web for methods to do that and I came across terms like Node.js, Socket.io, websocket. Even though i understand these terms in terms of web development (I think), I am unable to picture a method to open a listening socket in my Samsung Smart Tv App.

Just for the sake of playing around I wrote a TCP Server code on iOS using GCD Async Sockets and thought of connecting it to the smart tv and send a welcome message. This is the code on my smart tv -

//var wsUri = "wss://echo.websocket.org/";
var wsUri = "ws://192.168.1.116:9898/";
//var output;
var webSocketObj={};

webSocketObj.init = function()
{
    //output = document.getElementById("output");
    this.testWebSocket();
};

webSocketObj.testWebSocket = function()
{
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) { onOpen(evt); };
    websocket.onclose = function(evt) { onClose(evt); };
    websocket.onmessage = function(evt) { onMessage(evt); };
    websocket.onerror = function(evt) { onError(evt); };
};

  function onOpen(evt)
  {
    writeToScreen("CONNECTED");
    doSend("WebSocket rocks");
  }

  function onClose(evt)
  {
    writeToScreen("DISCONNECTED");
  }

  function onMessage(evt)
  {
    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>');
    websocket.close();
  }

  function onError(evt)
  {
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
  }

  function doSend(message)
  {
    writeToScreen("SENT: " + message); 
    websocket.send(message);
  }

  function writeToScreen(message)
  {
   /* var pre = document.createElement("p");
    pre.style.wordWrap = "break-word";
    pre.innerHTML = message;
    output.appendChild(pre);*/
      alert('SOCKET HELPER SAYS : '+message);
  }

I have a button and I'm calling webSocketObj.init() on the button click.

Logs of my didReadData of the server :

Client says : GET / HTTP/1.1

Log from SmartTv :

 [JS ALERT]:  Scenewebsocket.handleKeyDown(29443)
 [JS ERROR]:
File:           file://
Line No:        0
Error Detail:   
 [JS ALERT]:  SOCKET HELPER SAYS : DISCONNECTED

ALSO I tried echoing the message back to the Smart Tv from the server. And this time i got the logs

Client says : GET / HTTP/1.1
Client says : Upgrade: WebSocket
Client says : Connection: Upgrade
Client says : Host: 192.168.1.116:9898
Client says : Origin: file://
Client says : Sec-WebSocket-Key1: 1504l73  8Ew/J 4   ,L7W6
Client says : Sec-WebSocket-Key2: TK2   81d A64Bo7  118    0

I know i'm doing something horribly wrong...what is it? Pls help.


Solution

  • Have you tried socket.io server and client libraries?

    We have socket.io server on node.js, and TV can connect to it using socket.io-client library. On 2012 TV it uses websocket. On 2011 TV it uses XHR fallback.