github.com/glide-im/glide@v1.6.0/internal/action_handler/internal_action.go (about)

     1  package action_handler
     2  
     3  import (
     4  	"github.com/glide-im/glide/config"
     5  	"github.com/glide-im/glide/internal/world_channel"
     6  	"github.com/glide-im/glide/pkg/gate"
     7  	"github.com/glide-im/glide/pkg/logger"
     8  	"github.com/glide-im/glide/pkg/messages"
     9  	"github.com/glide-im/glide/pkg/messaging"
    10  	"time"
    11  )
    12  
    13  type InternalActionHandler struct {
    14  }
    15  
    16  func (o *InternalActionHandler) Handle(h *messaging.MessageInterfaceImpl, cliInfo *gate.Info, m *messages.GlideMessage) bool {
    17  	if m.GetAction().IsInternal() {
    18  		if !cliInfo.ID.IsTemp() {
    19  
    20  			switch m.GetAction() {
    21  			case messages.ActionInternalOffline:
    22  				go world_channel.OnUserOffline(gate.ID(m.Data.String()))
    23  			case messages.ActionInternalOnline:
    24  				go func() {
    25  					defer func() {
    26  						err, ok := recover().(error)
    27  						if err != nil && ok {
    28  							logger.ErrE("push offline message error", err)
    29  						}
    30  					}()
    31  					go func() {
    32  						time.Sleep(time.Second * 1)
    33  						world_channel.OnUserOnline(gate.ID(m.Data.String()))
    34  					}()
    35  
    36  					if config.Common.StoreOfflineMessage {
    37  						// message_handler.PushOfflineMessage(h, cliInfo.ID.UID())
    38  					}
    39  				}()
    40  			}
    41  		}
    42  		return true
    43  	}
    44  	return false
    45  }