Openlaszlo WebSocket не работает

Я попытался подключить свое приложение openlaszlo к WebSocket Api. Но это не сработало. Я использовал JavaScript в файле lzx. тот же javascript работает как обычный HTML-файл. Но это не работает в файле lzx.

<class name="SpecialButton" extends="button" onclick="changeLabel()">
    <attribute name="changeToLabel" value="Clicked!" type="string"/>
    <method name="changeLabel">
        var newLabel = openFunction(this.changeToLabel);
        //this.setAttribute('text', newLabel);
        openSocket();
    </method>


</class>
<script> <![CDATA[
        var webSocket;
        var messages = "Hello Web Socket";

        function openFunction(arg){
            return arg+" done";
        }

        function openSocket() {
            // Ensures only one connection is open at a time
            if (webSocket !== undefined
                    && webSocket.readyState !== WebSocket.CLOSED) {
                writeResponse("WebSocket is already opened.");
                return;
            }
            // Create a new instance of the websocket
            webSocket = new WebSocket("ws://localhost:8888/HelloSocket/echo");
            //Debug.debug(WebSocket.CLOSED);
            /**
             * Binds functions to the listeners for the websocket.
             */
            webSocket.onopen = function(event) {
                // For reasons I can't determine, onopen gets called twice
                // and the first time event.data is undefined.
                // Leave a comment if you know the answer.
                if (event.data === undefined)
                    return;

                writeResponse(event.data);
            };

            webSocket.onmessage = function(event) {
                writeResponse(event.data);
            };

            webSocket.onclose = function(event) {
                writeResponse("Connection closed");
            };
        }

        /**
         * Sends the value of the text input to the server
         */
        function send() {
            var text = "Hello World!!";
            webSocket.send(text);
        }

        function closeSocket() {
            webSocket.close();
        }

        function writeResponse(textmessage) {
            //result.setAttribute("text", textmessage);
            this.setAttribute('text', textmessage);
        }
        ]]>
    </script>

<simplelayout axis="y" spacing="10"/>
<SpecialButton>Not clicked</SpecialButton>
<SpecialButton changeToLabel="Thank You!">Please click me!</SpecialButton>

Результат отладки приведен ниже:

ERROR @helloClass.lzx#72: reference to undefined variable 'webSocket'
ERROR @helloClass.lzx#78: call to undefined function 'WebSocket' 
ERROR @helloClass.lzx#83: reference to undefined variable 'webSocket' 
ERROR @helloClass.lzx#83: undefined object does not have a property 'onopen' 
ERROR @helloClass.lzx#93: reference to undefined variable 'webSocket' 
ERROR @helloClass.lzx#93: undefined object does not have a property 'onmessage' 
ERROR @helloClass.lzx#97: reference to undefined variable 'webSocket' 
ERROR @helloClass.lzx#97: undefined object does not have a property 'onclose' 

WebSocket Api не поддерживается в lzx или openlaszlo? Пожалуйста, предложите мне, как я буду подключать двухстороннюю связь в реальном времени. Заранее спасибо.

1 ответ

Openlaszlo поддерживает две формы общения в реальном времени:

Например, вот класс, который использует XMLSocket:

 <class name="ClientSocket" extends="node">
  <attribute name="host" />
  <attribute name="port" />
  <attribute name='xml_socket'/>
  <handler name="oninit">
    xml_socket = new XMLSocket();
    // connect the socket here:
    xml_socket.connect(host,port);
  </handler>
  <handler name='onData' reference='xml_socket' args='messageXML'>
   <![CDATA[
    ExternalInterface.call(‘handleServerMessageReceived',messageXML);
   ]]>
  </handler>    
 </class>

и пример этого:

<canvas>
 <ClientSocket id='serverPushSocket' host='localhost' port='20340'/>
</canvas>

Рекомендации

Другие вопросы по тегам