package api import ( "omc/core" "omc/core/manage" "omc/core/parse" "omc/handle/service" "strconv" "github.com/aceld/zinx/ziface" "github.com/aceld/zinx/zlog" "github.com/aceld/zinx/znet" ) var ReqSyncAlarmMsgID uint32 = 3 var ReqSyncAlarmMsgType uint32 = 4 var ReqSyncAlarmMsgName string = "ackSyncAlarmMsg" // reqSyncAlarmMsg 消息同步 type ReqSyncAlarmMsg struct { znet.BaseRouter } // reqSyncAlarmMsg func (s *ReqSyncAlarmMsg) Handle(request ziface.IRequest) { // 消息处理 checker := []string{"reqId", "alarmSeq"} body, err := parse.RequestBodyDecode(request, checker) reqId := body.Data["reqId"] if err != nil || reqId == "" { zlog.Ins().ErrorF("inlaid message body %s", err.Error()) request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, err.Error(), "")) return } //管理模块 m := manage.GetManager(request.GetConnection().GetName()) if m == nil { zlog.Ins().ErrorF("server internal error") request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "server internal error", reqId)) return } // 检查用户是否登录 u := m.GetUserByPID(body.UID) if !u.LoginState { zlog.Ins().ErrorF("no permissions ") request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "no permissions", reqId)) return } alarmSeq, err := strconv.Atoi(body.Data["alarmSeq"]) if err != nil || alarmSeq < 1 { zlog.Ins().ErrorF("invalid alarmSeq of message body") request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "invalid alarmSeq", reqId)) return } //check alarmSeq 是否存在 neBind, _ := parse.ConvertBindFlag(m.BindFlag) alarmSeqCount := service.AlarmSeqCount(neBind.NeType, neBind.NeId, int64(alarmSeq)) if alarmSeqCount > 0 { if alarmSeqCount > 1000 { request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "over 1000 rows", reqId)) } else { // 发送更新上报的alarm seq m.UpdateAlarmSeq(int64(alarmSeq)) request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultSuccess(ReqSyncAlarmMsgName, "", reqId)) } return } zlog.Ins().ErrorF("not has of alarmSeq %d", alarmSeq) request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "alarmSeq does not exist", reqId)) }