根据以上设计原理,暂时不考虑安全,用户认证等问题,服务器端需要提供的http接口有:
1:用户登录接口
参数:deviecode,设备识别码,读取CPU或者硬盘序列号
返回:当前用户识别码和验证码
2:用户刷新验证码
参数:识别码,验证码
返回:新的验证码
3:心跳接口
参数:识别码,验证码
返回:如果有链接请求,返回链接的ip与端口
4:链接请求,接收链接请求,创建链接记录
参数:被控制端识别码,验证码
返回:如果成功,返回链接的ip与端口
表设计用户表:
表设计会话表:
http服务器端开发,使用eclipse,maven,springboot,mybatis,这些东西就比较过了,过程不表,贴上核心代码。
@RestController
@RequestMapping("/yk/")
public class IndexController extends BaseController {
@Autowired
UserService us;
@Autowired
SessionService ss;
Random rdm=new Random();
@RequestMapping("index")
public Object index() {
us.getMaxId();
return success("v1.0.0");
}
/**
* 设备码登录
* @param code
* @return
*/
@RequestMapping("login/{code}")
public Object login(@PathVariable String code) {
User u=us.getUserByDeviceCode(code);
if(u==null) {
int maxid=us.getMaxId()+1;
User u1=new User();
u1.setCode(rdm.nextInt(9999)+""+(1000+maxid));
u1.setCheckCode(rdm.nextInt(9999)+"");
u1.setDeviceCode(code);
us.insert(u1);
return success(u1);
}
return success(u);
}
/**
* 刷新验证码
* @param code
* @param pwd
* @return
*/
@RequestMapping("refresh/{code}/{pwd}")
public Object refrshCode(@PathVariable String code,@PathVariable String pwd) {
User u=new User();
u.setCheckCode(pwd);
u.setCode(code);
u=us.selectOne(u);
if(u!=null) {
u.setCheckCode(rdm.nextInt(9999)+"");
u.setLastOnLine(new Date());
us.onLine(u);
return success(u);
}
else return error("异常设备");
}
/***
* 设备心跳接口
* @param code
* @param pwd
* @return
*/
@RequestMapping("alive/{code}/{pwd}")
public Object alive(@PathVariable String code,@PathVariable String pwd) {
User u=new User();
u.setCheckCode(pwd);
u.setCode(code);
u=us.selectOne(u);
if(u!=null) {
u.setLastOnLine(new Date());
us.onLine(u);//更新
MySession session=ss.getByDeviceCode(u.getCode());//查看有没有链接请求
if(session!=null) {
//入股有链接请求
return success(session);//链接请求返回
}
return success(u);//返回
}
else {
return error("异常设备");
}
}
/**
* 请求链接
* @param code
* @param pwd
* @param mycode
* @return
*/
@RequestMapping("control/{code}/{pwd}")
public Object control(@PathVariable String code,@PathVariable String pwd,String mycode) {
User u=new User();
u.setCheckCode(pwd);
u.setCode(code);
u=us.selectOne(u);
if(u!=null) {
Long online=(long) 0;
if(u.getLastOnLine()!=null)online=u.getLastOnLine().getTime();//设备在线时间,毫秒
Long now=new Date().getTime();//当前时间毫秒
if((now-online)/1000>10) {
//10秒没有在线
return error(code+"没有在线");
}
MySession session=new MySession();
session.setControlCode(mycode);//控制端
session.setControledCode(code);//被控制端
session.setIp("127.0.0.1");//可以ip或者域名
session.setPort(3456);//链接端口
session.setStatus(0);//当前是0
ss.insert(session);//存储
return success(session);//链接请求返回
}
else {
return error("识别码或者验证错误");
}
}
}