package com.ices.yangengzhe.socket; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import com.ices.yangengzhe.service.api.IMessage; import com.ices.yangengzhe.service.persistence.IUserLogService; import com.ices.yangengzhe.socket.manager.OnLineUserManager; import com.ices.yangengzhe.socket.sender.MessageSender; import com.ices.yangengzhe.socket.sender.MessageParse; import com.ices.yangengzhe.util.Parse; import com.ices.yangengzhe.util.enums.OnlineStatus; import com.ices.yangengzhe.util.enums.ToClientMessageType; import com.ices.yangengzhe.util.enums.UserLogType; import com.ices.yangengzhe.util.factory.WebChatFactory; import com.ices.yangengzhe.util.pojo.SocketUser; import com.ices.yangengzhe.util.pojo.message.ToServerTextMessage; /** * webSocket服务器 * * @date 2017年1月22日 上午11:21:17 * @author yangengzhe */ @ServerEndpoint(value = "/websocket/{uid}", configurator = SocketConfigurator.class) public class webServer { private IUserLogService userLogService = (IUserLogService) WebChatFactory.beanFactory("userLogService"); private IMessage messageService = (IMessage) WebChatFactory.beanFactory("message"); @OnOpen public void open(Session session, @PathParam("uid") int uid) { SocketUser user = new SocketUser(); user.setSession(session); user.setUserId(uid); // 保存在线列表 WebChatFactory.createManager().addUser(user); userLogService.insertLog(user, UserLogType.LOGIN); print("当前在线用户:" + WebChatFactory.createManager().getOnlineCount()); print("缓存中的用户个数:" + new OnLineUserManager().getOnLineUsers().size()); //通知所有人 String message = MessageParse.ServiceOnlineStatus(uid, OnlineStatus.ONLINE); WebChatFactory.createManager().notifyOthers(user, message); } @OnMessage public void receiveMessage(String message, Session session) { if (message.startsWith("_online_user_")) { String uidStr = message.substring("_online_user_".length()); // 发送离线消息 MessageSender sender = new MessageSender(); sender.sendOfflineMessage(Integer.valueOf(uidStr)); return; }else if (message.startsWith("_unread_mesg_")) { String uidStr = message.substring("_unread_mesg_".length()); // 发送消息数量 String resultCount = Parse.getResultToString(ToClientMessageType.SERVICE_MESSAGE_COUNT, messageService.countUnreadMessage(Integer.valueOf(uidStr))); session.getAsyncRemote().sendText(resultCount); return; } ToServerTextMessage toServerTextMessage = WebChatFactory.createSerializer().toObject(message, ToServerTextMessage.class); System.out.println(2); // 得到接收的对象 MessageSender sender = new MessageSender(); sender.sendMessage(toServerTextMessage); } @OnError public void error(Throwable t) { print(t.getMessage()); } @OnClose public void close(Session session) { SocketUser user = new SocketUser(); user.setSession(session); user.setUserId(0); // 移除该用户 int uid = WebChatFactory.createManager().removeUser(user); user.setUserId(uid); userLogService.insertLog(user, UserLogType.LOGOUT); System.out.println("用户掉线" + uid); // print("当前在线用户:" + WebChatFactory.createManager().getOnlineCount()); // print("缓存中的用户个数:" + new OnLineUserManager().getOnLineUsers().size()); //通知所有人 String message = MessageParse.ServiceOnlineStatus(uid, OnlineStatus.OFFLINE); WebChatFactory.createManager().notifyOthers(user, message); } private void print(String msg) { System.out.println(msg); } }