func (this *Server) getSession(svc *service, req *message.ConnectMessage, resp *message.ConnackMessage) error { // If CleanSession is set to 0, the server MUST resume communications with the // client based on state from the current session, as identified by the client // identifier. If there is no session associated with the client identifier the // server must create a new session. // // If CleanSession is set to 1, the client and server must discard any previous // session and start a new one. This session lasts as long as the network c // onnection. State data associated with this session must not be reused in any // subsequent session. var err error // Check to see if the client supplied an ID, if not, generate one and set // clean session. if len(req.ClientId()) == 0 { req.SetClientId([]byte(fmt.Sprintf("internalclient%d", svc.id))) req.SetCleanSession(true) } cid := string(req.ClientId()) // If CleanSession is NOT set, check the session store for existing session. // If found, return it. // if !req.CleanSession() { // if svc.sess, err = this.sessMgr.Get(cid); err == nil { // resp.SetSessionPresent(true) // // if err := svc.sess.Update(req); err != nil { // return err // } // } // } // this.sessMgr.Del(cid) // If CleanSession, or no existing session found, then create a new one if svc.sess == nil { if svc.sess, err = this.sessMgr.New(cid); err != nil { return err } resp.SetSessionPresent(false) if err := svc.sess.Init(req); err != nil { return err } } return nil }