Browse Source

update fix restore client connection in startup

pull/4/head
Dimas Restu H 4 years ago
parent
commit
e420572be4
  1. 4
      .env.default
  2. 4
      .env.development
  3. 4
      .env.production
  4. 15
      internal/startup.go
  5. 5
      internal/whatsapp/whatsapp.go
  6. 12
      pkg/whatsapp/whatsapp.go

4
.env.default

@ -25,5 +25,5 @@
# ----------------------------------- # -----------------------------------
# WhatsApp Configuration # WhatsApp Configuration
# ----------------------------------- # -----------------------------------
# WHATSAPP_DB_TYPE=sqlite3
# WHATSAPP_DB_URI=file:dbs/WhatsApp.db?_foreign_keys=on
# WHATSAPP_DATASTORE_TYPE=sqlite3
# WHATSAPP_DATASTORE_URI=file:dbs/WhatsApp.db?_foreign_keys=on

4
.env.development

@ -25,5 +25,5 @@ AUTH_JWT_EXPIRED_HOUR=24
# ----------------------------------- # -----------------------------------
# WhatsApp Configuration # WhatsApp Configuration
# ----------------------------------- # -----------------------------------
WHATSAPP_DB_TYPE=sqlite3
WHATSAPP_DB_URI=file:dbs/WhatsApp.db?_foreign_keys=on
WHATSAPP_DATASTORE_TYPE=sqlite3
WHATSAPP_DATASTORE_URI=file:dbs/WhatsApp.db?_foreign_keys=on

4
.env.production

@ -25,5 +25,5 @@ AUTH_JWT_EXPIRED_HOUR=24
# ----------------------------------- # -----------------------------------
# WhatsApp Configuration # WhatsApp Configuration
# ----------------------------------- # -----------------------------------
WHATSAPP_DB_TYPE=sqlite3
WHATSAPP_DB_URI=file:dbs/WhatsApp.db?_foreign_keys=on
WHATSAPP_DATASTORE_TYPE=sqlite3
WHATSAPP_DATASTORE_URI=file:dbs/WhatsApp.db?_foreign_keys=on

15
internal/startup.go

@ -8,22 +8,27 @@ import (
func Startup() { func Startup() {
log.Print(nil).Info("Running Startup Tasks") log.Print(nil).Info("Running Startup Tasks")
// Load All WhatsApp Client Devices from Datastore
devices, err := pkgWhatsApp.WhatsAppDatastore.GetAllDevices() devices, err := pkgWhatsApp.WhatsAppDatastore.GetAllDevices()
if err != nil { if err != nil {
log.Print(nil).Error("Failed to Load WhatsApp Client Devices from Datastore") log.Print(nil).Error("Failed to Load WhatsApp Client Devices from Datastore")
} }
// Do Reconnect for Every Device in Datastore
for _, device := range devices { for _, device := range devices {
jid := pkgWhatsApp.WhatsAppDecomposeJID(device.ID.String())
// Get JID from Datastore
jid := pkgWhatsApp.WhatsAppDecomposeJID(device.ID.User)
// Mask JID for Logging Information
maskJID := jid[0:len(jid)-4] + "xxxx" maskJID := jid[0:len(jid)-4] + "xxxx"
// Print Restore Log
log.Print(nil).Info("Restoring WhatsApp Client for " + maskJID) log.Print(nil).Info("Restoring WhatsApp Client for " + maskJID)
err := pkgWhatsApp.WhatsAppInitClient(device, jid)
if err != nil {
log.Print(nil).Error(err.Error())
}
// Initialize WhatsApp Client
pkgWhatsApp.WhatsAppInitClient(device, jid)
// Reconnect WhatsApp Client WebSocket
err = pkgWhatsApp.WhatsAppReconnect(jid) err = pkgWhatsApp.WhatsAppReconnect(jid)
if err != nil { if err != nil {
log.Print(nil).Error(err.Error()) log.Print(nil).Error(err.Error())

5
internal/whatsapp/whatsapp.go

@ -125,10 +125,7 @@ func Login(c echo.Context) error {
} }
// Initialize WhatsApp Client // Initialize WhatsApp Client
err = pkgWhatsApp.WhatsAppInitClient(nil, jid)
if err != nil {
return router.ResponseInternalError(c, err.Error())
}
pkgWhatsApp.WhatsAppInitClient(nil, jid)
// Get WhatsApp QR Code Image // Get WhatsApp QR Code Image
qrCodeImage, qrCodeTimeout, err := pkgWhatsApp.WhatsAppLogin(jid) qrCodeImage, qrCodeTimeout, err := pkgWhatsApp.WhatsAppLogin(jid)

12
pkg/whatsapp/whatsapp.go

@ -23,18 +23,14 @@ var WhatsAppDatastore *sqlstore.Container
var WhatsAppClient = make(map[string]*whatsmeow.Client) var WhatsAppClient = make(map[string]*whatsmeow.Client)
func init() { func init() {
WhatsAppInitDB()
}
func WhatsAppInitDB() {
var err error var err error
dbType, err := env.GetEnvString("WHATSAPP_DB_TYPE")
dbType, err := env.GetEnvString("WHATSAPP_DATASTORE_TYPE")
if err != nil { if err != nil {
log.Print(nil).Fatal("Error Parse Environment Variable for WhatsApp Client Datastore Type") log.Print(nil).Fatal("Error Parse Environment Variable for WhatsApp Client Datastore Type")
} }
dbURI, err := env.GetEnvString("WHATSAPP_DB_URI")
dbURI, err := env.GetEnvString("WHATSAPP_DATASTORE_URI")
if err != nil { if err != nil {
log.Print(nil).Fatal("Error Parse Environment Variable for WhatsApp Client Datastore URI") log.Print(nil).Fatal("Error Parse Environment Variable for WhatsApp Client Datastore URI")
} }
@ -47,7 +43,7 @@ func WhatsAppInitDB() {
WhatsAppDatastore = datastore WhatsAppDatastore = datastore
} }
func WhatsAppInitClient(device *store.Device, jid string) error {
func WhatsAppInitClient(device *store.Device, jid string) {
if WhatsAppClient[jid] == nil { if WhatsAppClient[jid] == nil {
if device == nil { if device == nil {
// Initialize New WhatsApp Client Device in Datastore // Initialize New WhatsApp Client Device in Datastore
@ -62,8 +58,6 @@ func WhatsAppInitClient(device *store.Device, jid string) error {
// And Save it to The Map // And Save it to The Map
WhatsAppClient[jid] = whatsmeow.NewClient(device, nil) WhatsAppClient[jid] = whatsmeow.NewClient(device, nil)
} }
return nil
} }
func WhatsAppGenerateQR(qrChan <-chan whatsmeow.QRChannelItem) (string, int) { func WhatsAppGenerateQR(qrChan <-chan whatsmeow.QRChannelItem) (string, int) {

Loading…
Cancel
Save