package service import ( json2 "encoding/json" "time" "github.com/IceWhaleTech/CasaOS/service/model" "github.com/IceWhaleTech/CasaOS/types" "github.com/gorilla/websocket" "gorm.io/gorm" ) type NotifyServer interface { GetLog(id string) model.AppNotify AddLog(log model.AppNotify) UpdateLog(log model.AppNotify) UpdateLogByCustomId(log model.AppNotify) DelLog(id string) GetList(c int) (list []model.AppNotify) MarkRead(id string, state int) } type notifyServer struct { db *gorm.DB } func (i notifyServer) GetList(c int) (list []model.AppNotify) { i.db.Where("class = ?", c).Where(i.db.Where("state = ?", types.NOTIFY_DYNAMICE).Or("state = ?", types.NOTIFY_UNREAD)).Find(&list) return } func (i *notifyServer) AddLog(log model.AppNotify) { i.db.Create(&log) } func (i *notifyServer) UpdateLog(log model.AppNotify) { i.db.Save(&log) } func (i *notifyServer) UpdateLogByCustomId(log model.AppNotify) { if len(log.CustomId) == 0 { return } i.db.Model(&model.AppNotify{}).Select("*").Where("custom_id = ? ", log.CustomId).Updates(log) } func (i *notifyServer) GetLog(id string) model.AppNotify { var log model.AppNotify i.db.Where("custom_id = ? ", id).First(&log) return log } func (i *notifyServer) MarkRead(id string, state int) { if id == "0" { i.db.Model(&model.AppNotify{}).Where("1 = ?", 1).Update("state", state) return } i.db.Model(&model.AppNotify{}).Where("id = ? ", id).Update("state", state) } func (i *notifyServer) DelLog(id string) { var log model.AppNotify i.db.Where("custom_id = ?", id).Delete(&log) } func SendMeg() { // for { // mt, message, err := ws.ReadMessage() // if err != nil { // break // } // notify := model.NotifyMssage{} // json2.Unmarshal(message, ¬ify) // if notify.Type == "read" { // service.MyService.Notify().MarkRead(notify.Data, types.NOTIFY_READ) // } // if notify.Type == "app" { // go func(ws *websocket.Conn) { for { list := MyService.Notify().GetList(types.NOTIFY_APP) json, _ := json2.Marshal(list) if len(list) > 0 { var temp []*websocket.Conn for _, v := range WebSocketConns { err := v.WriteMessage(1, json) if err == nil { temp = append(temp, v) } } WebSocketConns = temp for _, v := range list { MyService.Notify().MarkRead(v.Id, types.NOTIFY_READ) } } if len(WebSocketConns) == 0 { SocketRun = false } time.Sleep(time.Second * 2) } // }(ws) // } // } } func NewNotifyService(db *gorm.DB) NotifyServer { return ¬ifyServer{db: db} }