github.com/glide-im/glide@v1.6.0/internal/world_channel/world_channel.go (about) 1 package world_channel 2 3 import ( 4 "encoding/json" 5 "fmt" 6 messages2 "github.com/glide-im/glide/im_service/messages" 7 "github.com/glide-im/glide/pkg/gate" 8 "github.com/glide-im/glide/pkg/logger" 9 "github.com/glide-im/glide/pkg/messages" 10 "github.com/glide-im/glide/pkg/subscription" 11 "github.com/glide-im/glide/pkg/subscription/subscription_impl" 12 "time" 13 ) 14 15 var sub subscription_impl.SubscribeWrap 16 var chanId = subscription.ChanID("the_world_channel") 17 18 func EnableWorldChannel(subscribe subscription_impl.SubscribeWrap) error { 19 sub = subscribe 20 err := sub.CreateChannel(chanId, &subscription.ChanInfo{ 21 ID: chanId, 22 }) 23 if err != nil { 24 return err 25 } 26 err = sub.Subscribe(chanId, "system", &subscription_impl.SubscriberOptions{Perm: subscription_impl.PermWrite}) 27 return err 28 } 29 30 func OnUserOnline(id gate.ID) { 31 if id.IsTemp() { 32 return 33 } 34 myId := subscription.SubscriberID(gate.NewID2(id.UID())) 35 err := sub.Subscribe(chanId, myId, 36 &subscription_impl.SubscriberOptions{Perm: subscription_impl.PermRead | subscription_impl.PermWrite}) 37 if err == nil { 38 39 time.Sleep(time.Second) 40 b := &messages.ChatMessage{ 41 Mid: time.Now().UnixNano(), 42 Seq: 0, 43 From: "system", 44 To: string(chanId), 45 Type: 100, 46 Content: id.UID(), 47 SendAt: time.Now().Unix(), 48 } 49 _ = sub.Publish(chanId, &subscription_impl.PublishMessage{ 50 From: "system", 51 Type: subscription_impl.TypeMessage, 52 Message: messages.NewMessage(0, messages2.ActionGroupMessage, b), 53 }) 54 55 time.Sleep(time.Millisecond * 100) 56 b.Mid = time.Now().UnixNano() 57 b.SendAt = time.Now().Unix() 58 b.Type = 1 59 b.Content = fmt.Sprintf("欢迎来到世界频道, 在这个频道, 你可以与服务器所有用户聊天, 你的 UID 为: %s", id.UID()) 60 _ = sub.Publish(chanId, &subscription_impl.PublishMessage{ 61 From: "system", 62 Type: subscription_impl.TypeMessage, 63 To: []subscription.SubscriberID{myId}, 64 Message: messages.NewMessage(0, messages2.ActionGroupMessage, b), 65 }) 66 } else { 67 logger.E("$v", err) 68 } 69 } 70 71 func OnUserOffline(id gate.ID) { 72 if id.IsTemp() { 73 return 74 } 75 _ = sub.UnSubscribe(chanId, subscription.SubscriberID(gate.NewID2(id.UID()))) 76 b, _ := json.Marshal(&messages.ChatMessage{ 77 Mid: time.Now().UnixNano(), 78 Seq: 0, 79 From: "system", 80 To: string(chanId), 81 Type: 101, 82 Content: id.UID(), 83 SendAt: time.Now().Unix(), 84 }) 85 _ = sub.Publish(chanId, &subscription_impl.PublishMessage{ 86 From: "system", 87 Type: subscription_impl.TypeMessage, 88 Message: messages.NewMessage(0, messages2.ActionGroupMessage, b), 89 }) 90 }