SessionController.java 3.47 KB
package com.bsth.web;

import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.bsth.socket.manager.MessageSessionManager;

@Controller
@RequestMapping("/session/*")
public class SessionController {
	
	private final static Logger log = LoggerFactory.getLogger(SessionController.class);
	
	@RequestMapping(value = "/")
	public @ResponseBody List<Map<String, Object>> allSession() {
		List<Map<String, Object>> result = new ArrayList<>();
		try {
			List<IoSession> sessions = MessageSessionManager.getInstance().getAllSession();
			if (sessions != null) {
				for (IoSession session : sessions) {
					Map<String, Object> map = new HashMap<>();
					InetSocketAddress remoteAddr = (InetSocketAddress)session.getRemoteAddress();
					InetSocketAddress localAddr = (InetSocketAddress)session.getLocalAddress();
					
					map.put("deviceId", session.getAttribute("deviceId"));
					map.put("remoteAddr", remoteAddr.getAddress().getHostAddress() + ":" + remoteAddr.getPort());
					map.put("localAddr", localAddr.getAddress().getHostAddress() + ":" + localAddr.getPort());
					map.put("isActive", session.isActive());
					map.put("lastIoTime", session.getLastIoTime());
					result.add(map);
				}
			}
		} catch (Exception e) {
			log.error("获取所有设备会话数据异常", e);
		}
		return result;
	}
	
	@RequestMapping(value = "/{deviceId}")
	public @ResponseBody Map<String, Object> session(@RequestParam Map<String, Object> map, @PathVariable("deviceId") String deviceId) {
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			IoSession session = MessageSessionManager.getInstance().getSession(deviceId);
			result.put("errCode", 0);
			if (session != null) {
				InetSocketAddress remoteAddr = (InetSocketAddress)session.getRemoteAddress();
				InetSocketAddress localAddr = (InetSocketAddress)session.getLocalAddress();
				
				result.put("deviceId", deviceId);
				map.put("remoteAddr", remoteAddr.getAddress().getHostAddress() + ":" + remoteAddr.getPort());
				map.put("localAddr", localAddr.getAddress().getHostAddress() + ":" + localAddr.getPort());
				result.put("isActive", session.isActive());
				result.put("lastIoTime", session.getLastIoTime());
			}
		} catch (Exception e) {
			result.put("errCode", 1);
			result.put("errMsg", "获取设备会话数据异常");
			log.error("获取设备会话数据异常", e);
		}
		return result;
	}
	
	@RequestMapping(value = "/offline/{deviceId}")
	public @ResponseBody Map<String, Object> offline(@RequestParam Map<String, Object> map, @PathVariable("deviceId") String deviceId) {
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			IoSession session = MessageSessionManager.getInstance().getSession(deviceId);
			result.put("errCode", 0);
			if (session != null) {
				result.put("deviceId", deviceId);
				result.put("errMsg", "掉线");
				session.closeNow();
			}
		} catch (Exception e) {
			result.put("errCode", 1);
			result.put("errMsg", "获取设备会话数据异常");
			log.error("刷新基础数据异常", e);
		}
		return result;
	}
}