Adds websocket-callback for all Item

This commit adds a callback which gets called on every
saved Item in the database, which prints JSON of that
Item-object to all connected websocket clients.
This commit is contained in:
Andreas Mieke 2017-01-19 19:49:53 +01:00
parent fc14acd76a
commit 0dacd3645e
3 changed files with 16 additions and 15 deletions

View file

@ -26,6 +26,8 @@ const (
Rejected
)
type updatecallback func(Item)
type Item struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
@ -53,8 +55,10 @@ type User struct {
}
var Db *gorm.DB
var cb updatecallback
func InitDb() {
func InitDb(callback updatecallback) {
cb = callback
var err error
Db, err = gorm.Open("postgres", config.C.DatabaseConnection)
if err != nil {
@ -65,3 +69,8 @@ func InitDb() {
Db.Model(&Item{}).AddForeignKey("user_id", "user(id)", "RESTRICT", "RESTRICT")
Db.AutoMigrate(&Item{}, &User{})
}
func (IT *Item) AfterSave(scope *gorm.Scope) (err error) {
go cb(*IT)
return
}

View file

@ -17,12 +17,11 @@ import (
func main() {
config.LoadConfig(os.Getenv("HOME") + "/.socialdragon.toml")
database.InitDb()
database.InitDb(SendUpdate)
c := cron.New()
c.AddFunc("@every 30s", snapchat.LoadNewSnaps)
c.AddFunc("@every 30s", instagram.LoadNewInstas)
c.AddFunc("@every 5s", sendNewPicture)
c.Start()
go twitter.LoadNewTweets()

View file

@ -36,19 +36,12 @@ func wsHandler(w http.ResponseWriter, r *http.Request) {
sockets = append(sockets[:pos], sockets[pos+1:]...)
}
func sendNewPicture() {
var ITs []database.Item
database.Db.Offset(lastID).Limit(1).Find(&ITs)
func SendUpdate(IT database.Item) {
for i, socket := range sockets {
for _, IT := range ITs {
err := socket.WriteJSON(IT)
if IT.ID > lastID {
lastID = IT.ID
}
if err != nil {
sockets = append(sockets[:i], sockets[i+1:]...)
continue
}
err := socket.WriteJSON(IT)
if err != nil {
sockets = append(sockets[:i], sockets[i+1:]...)
continue
}
}
}