func (this *Session) Update(msg *message.ConnectMessage) error { this.mu.Lock() defer this.mu.Unlock() this.cbuf = make([]byte, msg.Len()) this.Cmsg = message.NewConnectMessage() if _, err := msg.Encode(this.cbuf); err != nil { return err } if _, err := this.Cmsg.Decode(this.cbuf); err != nil { return err } return nil }
func (this *Session) Init(msg *message.ConnectMessage) error { this.mu.Lock() defer this.mu.Unlock() if this.initted { return fmt.Errorf("Session already initialized") } this.cbuf = make([]byte, msg.Len()) this.Cmsg = message.NewConnectMessage() if _, err := msg.Encode(this.cbuf); err != nil { return err } if _, err := this.Cmsg.Decode(this.cbuf); err != nil { return err } if this.Cmsg.WillFlag() { this.Will = message.NewPublishMessage() this.Will.SetQoS(this.Cmsg.WillQos()) this.Will.SetTopic(this.Cmsg.WillTopic()) this.Will.SetPayload(this.Cmsg.WillMessage()) this.Will.SetRetain(this.Cmsg.WillRetain()) } this.topics = make(map[string]byte, 1) this.id = string(msg.ClientId()) this.Pub1ack = newAckqueue(defaultQueueSize) this.Pub2in = newAckqueue(defaultQueueSize) this.Pub2out = newAckqueue(defaultQueueSize) this.Suback = newAckqueue(defaultQueueSize) this.Unsuback = newAckqueue(defaultQueueSize) this.Pingack = newAckqueue(defaultQueueSize) this.initted = true return nil }