From b1d6717a04c1fc0119b9a0166b354fcd61c92abb Mon Sep 17 00:00:00 2001 From: Mikkel Krautz Date: Sat, 12 Nov 2011 21:36:32 +0100 Subject: [PATCH] Make LastChannel logic work. --- freeze.go | 5 +++-- message.go | 2 +- server.go | 12 ++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/freeze.go b/freeze.go index 393ee02..f717d1a 100644 --- a/freeze.go +++ b/freeze.go @@ -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) diff --git a/message.go b/message.go index 5ebfb92..819662e 100644 --- a/message.go +++ b/message.go @@ -874,7 +874,7 @@ func (server *Server) handleUserStateMessage(client *Client, msg *Message) { } if target.IsRegistered() { - server.UpdateFrozenUser(target.user, userstate) + server.UpdateFrozenUser(target, userstate) } } diff --git a/server.go b/server.go index 6f52bcf..620e5bb 100644 --- a/server.go +++ b/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? }