Cześć.
Do testów korzystam z Chrome'a który to ma.
Znalazłem inny tutorial, ale znowu nie działa, używa jQuery, niby javascript działa, ale znowu nic się nie dzieje.
index.html:
<html>
<head>
<meta name="description" content="HTML5 WebSocket Chat" />
<meta name="keywords" content="HTML5,WebSocket,JavaScript" />
<meta name="author" content="Andy Moncsek" />
<meta charset="UTF-8" />
<title>Hello world</title>
<script type="text/javascript" charset="utf-8" src="js/jquery-1.3.2.js"></script>
<link type="text/css" rel="stylesheet" href="css/style.css" />
<script type="text/javascript">
var ws;
$(document).ready(
function() {
ws = new WebSocket("ws://localhost:8080/chat/send");
ws.onopen = function(event) {
}
ws.onmessage = function(event) {
var $textarea = $('#messages');
$textarea.val($textarea.val() + event.data + "\n");
$textarea.animate({
scrollTop : $textarea.height()
}, 1000);
}
ws.onclose = function(event) {
}
});
function sendMessage() {
var message = $('#username').val() + ":" + $('#message').val();
ws.send(message);
$('#message').val('');
}
</script>
</head>
<body>
<div id="body">
<div id="menu">
<p class="welcome">
Welcome,<input id="username" value="anonymous" />
</p>
<div style="clear: both"></div>
</div>
<div id="chatbox">
<textarea id="messages" rows="16" cols="48" readonly="readonly"></textarea>
</div>
<form name="message" action="">
<input name="usermsg" type="text" id="message" size="63" /> <input
type="button" name="submitmsg" value="Send..."
onclick="sendMessage();" />
</form>
</div>
</body>
</html>
do tego mam klasę serwletu i klasę gniazdka.
package pl.black007;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketServlet;
public class ChatServlet extends WebSocketServlet {
private static final long serialVersionUID = -105191886483239820L;
private final Set<ChatSocket> sockets = new CopyOnWriteArraySet<ChatSocket>();
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("ChatServlet doGET!");
getServletContext().getNamedDispatcher("default").forward(request,
response);
}
@Override
public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
System.out.println("ChatServlet doGET!");
return new ChatSocket(sockets);
}
}
package pl.black007;
import java.io.IOException;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.jetty.websocket.WebSocket;
public class ChatSocket implements WebSocket.OnTextMessage {
private static final Logger logger = Logger.getLogger(ChatSocket.class);
private final Set<ChatSocket> sockets;
private Connection conn;
public ChatSocket(Set<ChatSocket> sockets) {
System.out.println("ChatSocket constructor!");
this.sockets = sockets;
}
@Override
public void onClose(int closeStatus, String message) {
System.out.println("ChatSocket close!!");
sockets.remove(this);
}
@Override
public void onOpen(Connection connection) {
System.out.println("ChatSocket open!");
sockets.add(this);
this.conn = connection;
}
@Override
public void onMessage(String message) {
System.out.println("ChatSocket message!");
for (ChatSocket socket : sockets) {
try {
socket.conn.sendMessage(message);
} catch (IOException e) {
logger.error(e, e);
}
}
}
}
I jestem w ciemnej d...
Nie wiem, co jest nie tak.
W outpucie w eclipsie nie wypisują mi się te sysouty... :/