mirror of
https://github.com/mumble-voip/grumble.git
synced 2025-12-20 06:10:00 -08:00
Make LastChannel logic work.
This commit is contained in:
parent
41689595f2
commit
b1d6717a04
3 changed files with 14 additions and 5 deletions
|
|
@ -691,9 +691,10 @@ func NewServerFromFrozen(name string) (s *Server, err error) {
|
|||
}
|
||||
|
||||
// Update the datastore with the user's current state.
|
||||
func (server *Server) UpdateFrozenUser(user *User, state *mumbleproto.UserState) {
|
||||
func (server *Server) UpdateFrozenUser(client *Client, state *mumbleproto.UserState) {
|
||||
// Full sync If there's no userstate messgae provided, or if there is one, and
|
||||
// it includes a registration operation.
|
||||
user := client.user
|
||||
nanos := time.Nanoseconds()
|
||||
if state == nil || state.UserId != nil {
|
||||
fu, err := user.Freeze()
|
||||
|
|
@ -709,7 +710,7 @@ func (server *Server) UpdateFrozenUser(user *User, state *mumbleproto.UserState)
|
|||
fu := &freezer.User{}
|
||||
fu.Id = proto.Uint32(user.Id)
|
||||
if state.ChannelId != nil {
|
||||
fu.LastChannelId = state.ChannelId
|
||||
fu.LastChannelId = proto.Uint32(uint32(client.Channel.Id))
|
||||
}
|
||||
if state.TextureHash != nil {
|
||||
fu.TextureBlob = proto.String(user.TextureBlob)
|
||||
|
|
|
|||
|
|
@ -874,7 +874,7 @@ func (server *Server) handleUserStateMessage(client *Client, msg *Message) {
|
|||
}
|
||||
|
||||
if target.IsRegistered() {
|
||||
server.UpdateFrozenUser(target.user, userstate)
|
||||
server.UpdateFrozenUser(target, userstate)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
12
server.go
12
server.go
|
|
@ -561,10 +561,18 @@ func (server *Server) finishAuthenticate(client *Client) {
|
|||
server.hclients[host] = append(server.hclients[host], client)
|
||||
server.hmutex.Unlock()
|
||||
|
||||
channel := server.RootChannel()
|
||||
if client.IsRegistered() {
|
||||
lastChannel := server.Channels[client.user.LastChannelId]
|
||||
if lastChannel != nil {
|
||||
channel = lastChannel
|
||||
}
|
||||
}
|
||||
|
||||
userstate := &mumbleproto.UserState{
|
||||
Session: proto.Uint32(client.Session),
|
||||
Name: proto.String(client.ShownName()),
|
||||
ChannelId: proto.Uint32(0),
|
||||
ChannelId: proto.Uint32(uint32(channel.Id)),
|
||||
}
|
||||
|
||||
if len(client.CertHash) > 0 {
|
||||
|
|
@ -601,7 +609,7 @@ func (server *Server) finishAuthenticate(client *Client) {
|
|||
}
|
||||
}
|
||||
|
||||
server.userEnterChannel(client, server.RootChannel(), userstate)
|
||||
server.userEnterChannel(client, channel, userstate)
|
||||
if err := server.broadcastProtoMessage(userstate); err != nil {
|
||||
// Server panic?
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue