first commit

This commit is contained in:
ytc1012
2025-11-18 18:08:48 +08:00
commit de90ad79ea
162 changed files with 28098 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
package logic
import (
"slgserver/net"
"slgserver/server/chatserver/proto"
"sync"
"time"
)
type Group struct {
userMutex sync.RWMutex
msgMutex sync.RWMutex
users map[int]*User
msgs ItemQueue
}
func NewGroup() *Group {
return &Group{users: map[int]*User{}}
}
func (this*Group) Enter(u *User) {
this.userMutex.Lock()
defer this.userMutex.Unlock()
this.users[u.rid] = u
}
func (this*Group) Exit(rid int) {
this.userMutex.Lock()
defer this.userMutex.Unlock()
delete(this.users, rid)
}
func (this*Group) GetUser(rid int) *User {
this.userMutex.Lock()
defer this.userMutex.Unlock()
return this.users[rid]
}
func (this*Group) PutMsg(text string, rid int, t int8) *proto.ChatMsg {
this.userMutex.RLock()
u, ok := this.users[rid]
this.userMutex.RUnlock()
if ok == false{
return nil
}
msg := &Msg{Msg: text, RId: rid, Time: time.Now(), NickName: u.nickName}
this.msgMutex.Lock()
size := this.msgs.Size()
if size > 100 {
this.msgs.Dequeue()
}
this.msgs.Enqueue(msg)
this.msgMutex.Unlock()
//广播
this.userMutex.RLock()
c := &proto.ChatMsg{RId: msg.RId, NickName: msg.NickName, Time: msg.Time.Unix(), Msg: msg.Msg, Type: t}
for _, user := range this.users {
net.ConnMgr.PushByRoleId(user.rid, "chat.push", c)
}
this.userMutex.RUnlock()
return c
}
func (this*Group) History() []proto.ChatMsg {
r := make([]proto.ChatMsg, 0)
this.msgMutex.RLock()
items := this.msgs.items
for _, item := range items {
msg := item.(*Msg)
c := proto.ChatMsg{RId: msg.RId, NickName: msg.NickName, Time: msg.Time.Unix(), Msg: msg.Msg}
r = append(r, c)
}
this.msgMutex.RUnlock()
return r
}