package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
@Controller
@RequestMapping("/home")
@SessionAttributes("uname")
public class ViewController {
@RequestMapping("/list")
public String cc(ModelMap model){
return "index";
}
@RequestMapping("/room")
public String h(ModelMap model,String uname,String roomid){
model.put("uname",uname);
model.put("roomid", roomid);
return "room";
}
}
package com.controller;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
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 net.sf.json.JSONObject;
@ServerEndpoint("/websocket/{info}")
public class WebSocketService {
private static SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//创建时间格式对象
//concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketService对象。
//创建一个房间的集合,用来存放房间
private static ConcurrentHashMap> roomList = new ConcurrentHashMap>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
//重新加入房间的标示;
private int rejoin = 0;
/*static {
roomList.put("room1", new ConcurrentHashMap());
roomList.put("room2", new ConcurrentHashMap());
}*/
/**
* 用户接入
* @param param 连接websocket服务器时穿的参数
* @param session 会话
*/
@OnOpen
public void onOpen(@PathParam(value = "info") String param,Session session){
System.err.println("登录时候穿的参数"+param.toString());
this.session = session;
String flag = param.split("[|]")[0]; //标识
String member = param.split("[|]")[1];//成员名
if(roomList.get(member)==null){//判断房间列表中是否有此次的房间名称
roomList.put(member, new ConcurrentHashMap());//如果没有将房间添加到房间列表中
}
//判断标志位是不是加入房间
if(flag.equals("join")){
String user = param.split("[|]")[2]; //截取用户名
//调用加入房间的方法,传入房间名称和用户名称
joinRoom(member,user);
}
}
/**
* 加入房间
* @param member 房间号
*