之前使用了stomp设计了命令推送系统,现在需要将所有的需求设计出对应格式命令进行使用。
主持人使用接口来发送命令:
@RestController()
@RequestMapping("host")
public class HostController {
@Autowired
private HostService hostService;
/**
* @api {POST} /host/beginMeeting beginMeeting
* @apiVersion 1.0.0
* @apiGroup Host
* @apiName beginMeeting
* @apiParam {int} meetingId 会议的id
* @apiParamExample {json}
* {
* "meetingId":3
* }
* @apiSuccess (响应结果) {Number} code
* @apiSuccess (响应结果) {String} message
* @apiSuccess (响应结果) {Object} obj
* @apiSuccessExample 响应结果示例
* {"code":200,"message":"ok","obj":null}
*/
@PostMapping("beginMeeting")
Msg beginMeeting(int meetingId) {
if (hostService.startMeeting(meetingId)) {
return new Msg(200, "ok", null);
}
return new Msg(200, "something wrong, please reboot system", null);
}
/**
* @api {POST} /host/beginVote beginVote
* @apiVersion 1.0.0
* @apiGroup Host
* @apiName beginVote
* @apiParam (请求参数) {Number} voteId
* @apiParamExample 请求参数示例
* {
* "voteId":10231
* }
* @apiSuccess (响应结果) {Number} code
* @apiSuccess (响应结果) {String} message
* @apiSuccess (响应结果) {Object} obj
* @apiSuccessExample 响应结果示例
* {"code":200,"message":"ok","obj":{}}
*/
@PostMapping("beginVote")
Msg beginVote(@RequestParam int voteId) {
if (hostService.startVote(voteId)) {
return new Msg(200, "ok", null);
}
return new Msg(200, "something wrong, please reboot system", null);
}
/**
* @api {POST} /host/programLimit programLimit
* @apiVersion 1.0.0
* @apiGroup Host
* @apiName programLimit
* @apiParam (请求参数) {Number} mode
* @apiParamExample 请求参数示例
* {
* "mode":1
* }
* @apiSuccess (响应结果) {Number} code
* @apiSuccess (响应结果) {String} message
* @apiSuccess (响应结果) {Object} obj
* @apiSuccessExample 响应结果示例
* {"code":200,"message":"ok","obj":{"state":"open"}}
*/
@PostMapping("programLimit")
Msg programLimit(@RequestParam int mode) {
State state = hostService.changeMode(mode);
return new Msg(200, "ok", state);
}
/**
* @api {POST} /host/getVoteRes getVoteRes
* @apiVersion 1.0.0
* @apiGroup Host
* @apiName getVoteRes
* @apiParam (请求参数) {Number} voteId
* @apiParamExample 请求参数示例
* {"voteId":200}
* @apiSuccess (响应结果) {Number} code
* @apiSuccess (响应结果) {String} message
* @apiSuccess (响应结果) {Object} obj
* @apiSuccessExample 响应结果示例
* {"code":200,"message":"ok","obj":{"voteId":1,"res":[{"optionId":1,"number":1,"devices":["SDUPAD1(doge)"]},{"optionId":2,"number":1,"devices":["SDUPAD1(doge)"]},{"optionId":3,"number":0,"devices":[]}]}}
*/
@PostMapping("getVoteRes")
Msg getVoteRes(@RequestParam int voteId) {
return hostService.getVoteRes(voteId);
}
@PostMapping("closeVote")
Msg closeVote(@RequestParam int voteId) {
if (hostService.closeVote(voteId)) {
return new Msg(200, "ok", null);
}
return new Msg(200, "something wrong, please reboot system", null);
}
@PostMapping("closeMeeting")
Msg closeMeeting(int meetingId) {
hostService.closeMeeting(meetingId);
return new Msg(200, "closed", null);
}
@GetMapping("debug/cleanVote")
String cleanVote(int voteId) {
hostService.cleanVoteRes(voteId);
return "Onlydebug";
}
}
内部service处理时则使用内部频道将对应消息广播出去。
@Component
public class HostService {
static State state = new State();
@Autowired
private VoteService voteService;
@Autowired
private SimpMessageSendingOperations simpMessageSendingOperations;
@Autowired
private MeetingService meetingService;
public void sendMessage(Command cmd) {
simpMessageSendingOperations.convertAndSend("/topic/cmd", cmd);
}
public boolean startMeeting(int meetingId) {
sendMessage(new Command(0, "开始会议id: " + meetingId));
meetingService.changeMeetingState(meetingId, 1);
return true;
}
public boolean startVote(int voteId) {
sendMessage(new Command(4, "开始投票id: " + voteId));
voteService.changeVoteState(true, voteId);
return true;
}
public boolean closeVote(int voteId) {
sendMessage(new Command(5, "结束投票id: " + voteId));
voteService.changeVoteState(false, voteId);
return true;
}
public State changeMode(int mode) {
if (mode == 0) {
state.setState("open");
sendMessage(new Command(1, "腾讯会议开启"));
} else {
state.setState("close");
sendMessage(new Command(2, "腾讯会议关闭"));
}
return state;
}
public Msg getVoteRes(int voteId) {
return new Msg(200, "ok", voteService.getResultByVoteId(voteId));
}
public void cleanVoteRes(int voteId){
voteService.cleanRes(voteId);
}
public void closeMeeting(int meetingId){
meetingService.changeMeetingState(meetingId,2);
sendMessage(new Command(6, "结束会议id: " + meetingId));
}
}