package com.fh.plugin.websocketInstantMsg; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; import java.net.URI; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Scanner; import net.sf.json.JSONObject; import org.java_websocket.WebSocket; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_17; import org.java_websocket.framing.Framedata; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.handshake.ServerHandshake; import org.java_websocket.server.WebSocketServer; public class TestClient extends WebSocketServer{ private List list = new ArrayList(); public TestClient(int port) throws UnknownHostException { super(new InetSocketAddress(port)); } public TestClient(InetSocketAddress address) { super(address); } /** * 触发连接事件 */ @Override public void onOpen( WebSocket conn, ClientHandshake handshake ) { //this.sendToAll( "new connection: " + handshake.getResourceDescriptor() ); //System.out.println("===" + conn.getRemoteSocketAddress().getAddress().getHostAddress()); list.add(conn); } /** * 触发关闭事件 */ @Override public void onClose( WebSocket conn, int code, String reason, boolean remote ) { list.remove(conn); } /** * 客户端发送消息到服务器时触发事件 */ @Override public void onMessage(WebSocket conn, String message){ for(WebSocket w:list){ if(w != conn){ w.send(message); } } } public void onFragment( WebSocket conn, Framedata fragment ) { } /** * 触发异常事件 */ @Override public void onError( WebSocket conn, Exception ex ) { try{ conn.close(0); }catch(Exception e){} list.remove(conn); } /** * 用户加入处理 * @param user */ public void userjoin(String user, WebSocket conn){ JSONObject result = new JSONObject(); result.element("type", "user_join"); result.element("user", ""+user+""); ChatServerPool.sendMessage(result.toString()); //把当前用户加入到所有在线用户列表中 String joinMsg = "{\"from\":\"[系统]\",\"content\":\""+user+"上线了\",\"timestamp\":"+new Date().getTime()+",\"type\":\"message\"}"; ChatServerPool.sendMessage(joinMsg); //向所有在线用户推送当前用户上线的消息 result = new JSONObject(); result.element("type", "get_online_user"); ChatServerPool.addUser(user,conn); //向连接池添加当前的连接对象 result.element("list", ChatServerPool.getOnlineUser()); ChatServerPool.sendMessageToUser(conn, result.toString()); //向当前连接发送当前在线用户的列表 } /** * 用户下线处理 * @param user */ public void userLeave(WebSocket conn){ // String user = ChatServerPool.getUserByKey(conn); boolean b = ChatServerPool.removeUser(conn); //在连接池中移除连接 // if(b){ // JSONObject result = new JSONObject(); // result.element("type", "user_leave"); // result.element("user", ""+user+""); // ChatServerPool.sendMessage(result.toString()); //把当前用户从所有在线用户列表中删除 // String joinMsg = "{\"from\":\"[系统]\",\"content\":\""+user+"下线了\",\"timestamp\":"+new Date().getTime()+",\"type\":\"message\"}"; // ChatServerPool.sendMessage(joinMsg); //向在线用户发送当前用户退出的消息 // } } public static void main( String[] args ) throws Exception { // WebSocketImpl.DEBUG = false; // int port = 8887; //端口 // ChatServer s = new ChatServer(port); // s.start(); //System.out.println( "服务器的端口" + s.getPort() ); testClient(); Scanner scanner = new Scanner(System.in); while(true){ String text = scanner.next(); if("close".equals(text.toLowerCase())){ try{ client.close(); }catch(Exception ex){ } break; } if("1".equals(text)){ System.out.println("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"server\",\"cmd\": \"login\",\"msg\": {}}"); client.send("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"server\",\"cmd\": \"login\",\"msg\": {}}"); }else if("2".equals(text)){ System.out.println("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"server\",\"cmd\": \"attend\",\"msg\":{\"list\": ['yw']}}"); client.send("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"server\",\"cmd\": \"attend\",\"msg\":{\"list\": ['yw']}}"); }else if("3".equals(text)){ System.out.println("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"teacher1\",\"cmd\": \"attend\",\"msg\":{\"list\": ['yw']}}"); client.send("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"teacher1\",\"cmd\": \"attend\",\"msg\":{\"list\": ['yw']}}"); }else{ System.out.println(text); client.send(text); } } } public static WebSocketClient client; public static void testClient() throws Exception{ client = new WebSocketClient(new URI("ws://120.78.57.84:8888/stw/echo"),new Draft_17()) { @Override public void onOpen(ServerHandshake arg0) { System.out.println("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"server\",\"cmd\": \"login\",\"msg\": {}}"); client.send("{\"from\":\"assistant1\",\"role\":\"assistant\",\"to\": \"server\",\"cmd\": \"login\",\"msg\": {}}"); } @Override public void onMessage(String arg0) { System.out.println(arg0); } @Override public void onError(Exception arg0) { arg0.printStackTrace(); System.out.println("发生错误已关闭"); } @Override public void onClose(int arg0, String arg1, boolean arg2) { System.out.println("链接已关闭"); } @Override public void onMessage(ByteBuffer bytes) { try { System.out.println(new String(bytes.array(),"utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }; client.connect(); } public static void send(byte[] bytes){ client.send(bytes); } }