如何注册端点监听器?

时间:2015-11-17 08:52:41

标签: java grails groovy java-websocket

我正在使用grails 3.0.9,使用javax.websocket创建一个聊天应用程序。

这是我的代码......

`

    import grails.util.Environment

    import javax.servlet.ServletContext
    import javax.servlet.ServletContextEvent
    import javax.servlet.ServletContextListener
    import javax.websocket.server.ServerEndpoint
    import javax.websocket.server.ServerContainer
    import javax.websocket.OnMessage
    import javax.websocket.OnOpen
    import javax.websocket.OnClose
    import javax.websocket.OnError
    import javax.servlet.annotation.WebListener

    @WebListener
    @ServerEndpoint("/chatEndPoint")
    class ServerEndPointDemo implements ServletContextListener {

        @Override
        public void contextInitialized(ServletContextEvent event) {
            ServletContext servletContext = event.servletContext
            final ServerContainer serverContainer = servletContext.getAttribute("javax.websocket.server.ServerContainer")
            try {
                if (Environment.current == Environment.DEVELOPMENT) {
                    serverContainer.addEndpoint(ServerEndPointDemo)
                }
                println "--- we have a connection"
                int defaultMaxSessionIdleTimeout = 0 //config.timeout ?: 0
                serverContainer.defaultMaxSessionIdleTimeout = defaultMaxSessionIdleTimeout
            }
            catch (IOException e) {
                log.error e.message, e
            }
        }

        @Override
        public void contextDestroyed(ServletCo

ntextEvent event) {
    }


    @OnOpen
    public void  handleOpen(){
        println "is connecting"
    }
    @OnClose
    public void  handleClose(){
        println "closed lah!"
}
@OnMessage
public String handleMessage(String message){
    println "receiveed message from client = "+message
    return "my message~"
}
@OnError
public void  handleError(Throwable t){
    println "error ~"
    }
}

这是我的控制器..

chatController.groovy

package com.akiong.maintenance
class ChatController  {
    def index() {
    }
}

这是我的gsp

index.gsp中

<html>
<head>    
    <title>Chatting</title>
    <script language="javascript" type="text/javascript">
        var websocket;
        function init() {
            output = document.getElementById("output");
        }
        function send_echo() {
            var wsUri = "ws://localhost:8080/chatEndPoint";
            writeToScreen("Connecting to " + wsUri);
            websocket= new WebSocket(wsUri);
            websocket.onopen = function (evt) {
                writeToScreen("Connected !");
                doSend(textID.value);
            };
            websocket.onmessage = function (evt) {
                writeToScreen("Received message: " + evt.data);
                websocket.close();
            };
            websocket.onerror = function (evt) {
                writeToScreen('<span style="color: red;">ERROR:</span> '
                + evt.data);
                websocket.close();
            };
        }
        function showErrorInfo(e) {
            alert('Error connecting socket'+e);
        }

        function doSend(message) {
            websocket.send(message);
            writeToScreen("Sent message: " + message);
        }
        function writeToScreen(message) {
            var pre = document.createElement("p");
            pre.style.wordWrap = "break-word";
            pre.innerHTML = message;
            output.appendChild(pre);
        }
        window.addEventListener("load", init, false);
    </script>
</head>
<body>
    <h1>Echo Server</h1>
    <div style="text-align: left;">
        <form action="">
            <input onclick="send_echo()" value="Press to send"
                   type="button">
            <input id="textID" name="message" value="Hello Web Sockets"
                   type="text">
            <br>
        </form>
    </div>
    <div id="output"></div>
</body>
</html>

我不知道..我无法连接到终端...

我已经阅读了这个问题grails javax.websocket issues

但我使用grails 3.0.9,它看起来不同,因为在grails 3.0.9下没有一个带有“脚本”的文件夹

0 个答案:

没有答案
相关问题