/ *
* * description ( "" ) .
* * copyright ( ' open - im , www . open - im . io ' ) .
* * author ( "fg,Gordon@open-im.io" ) .
* * time ( 2021 / 3 / 22 15 : 33 ) .
* /
package push
import (
fcm "OpenIM/internal/push/fcm"
"OpenIM/internal/push/getui"
jpush "OpenIM/internal/push/jpush"
"OpenIM/pkg/common/config"
"OpenIM/pkg/common/constant"
"OpenIM/pkg/common/db/cache"
"OpenIM/pkg/common/prome"
"OpenIM/pkg/statistics"
"fmt"
)
type Push struct {
rpcServer PushServer
pushCh ConsumerHandler
offlinePusher OfflinePusher
successCount uint64
}
func ( p * Push ) Init ( rpcPort int ) error {
rdb , err := cache . NewRedis ( )
if err != nil {
return err
}
var cacheInterface cache . Cache
p . rpcServer . Init ( rpcPort , cacheInterface )
p . pushCh . Init ( )
statistics . NewStatistics ( & p . successCount , config . Config . ModuleName . PushName , fmt . Sprintf ( "%d second push to msg_gateway count" , constant . StatisticsTimeInterval ) , constant . StatisticsTimeInterval )
if * config . Config . Push . Getui . Enable {
p . offlinePusher = getui . NewClient ( cacheInterface )
}
if config . Config . Push . Jpns . Enable {
p . offlinePusher = jpush . NewClient ( )
}
if config . Config . Push . Fcm . Enable {
p . offlinePusher = fcm . NewClient ( cacheInterface )
}
return nil
}
func ( p * Push ) initPrometheus ( ) {
prome . NewMsgOfflinePushSuccessCounter ( )
prome . NewMsgOfflinePushFailedCounter ( )
}
func ( p * Push ) Run ( prometheusPort int ) {
go p . rpcServer . run ( )
go p . pushCh . pushConsumerGroup . RegisterHandleAndConsumer ( & p . pushCh )
go func ( ) {
err := prome . StartPrometheusSrv ( prometheusPort )
if err != nil {
panic ( err )
}
} ( )
}