cwtch/server/server_instance.go

43 lines
1.1 KiB
Go
Raw Normal View History

2018-03-09 20:44:13 +00:00
package server
import (
"git.mascherari.press/cwtch/protocol"
"git.mascherari.press/cwtch/server/listen"
"git.mascherari.press/cwtch/storage"
"github.com/s-rah/go-ricochet/application"
"github.com/s-rah/go-ricochet/channels"
)
2018-03-14 22:23:35 +00:00
type Instance struct {
2018-03-09 20:44:13 +00:00
rai *application.ApplicationInstance
ra *application.RicochetApplication
msi storage.MessageStoreInterface
}
2018-03-14 22:23:35 +00:00
func (si *Instance) Init(rai *application.ApplicationInstance, ra *application.RicochetApplication, msi storage.MessageStoreInterface) {
2018-03-09 20:44:13 +00:00
si.rai = rai
si.ra = ra
si.msi = msi
}
2018-03-14 22:23:35 +00:00
func (si *Instance) HandleFetchRequest() []*protocol.GroupMessage {
2018-03-09 20:44:13 +00:00
return si.msi.FetchMessages()
}
// HandleGroupMessage
2018-03-14 22:23:35 +00:00
func (si *Instance) HandleGroupMessage(gm *protocol.GroupMessage) {
2018-03-09 20:44:13 +00:00
si.msi.AddMessage(*gm)
go si.ra.Broadcast(func(rai *application.ApplicationInstance) {
rai.Connection.Do(func() error {
channel := rai.Connection.Channel("im.cwtch.server.listen", channels.Inbound)
if channel != nil {
cslc, ok := channel.Handler.(*listen.CwtchServerListenChannel)
if ok {
cslc.SendGroupMessage(gm)
}
}
return nil
})
})
}