+ def quit(self):
+ """Log, save, close the connection and remove."""
+ if self.name: message = "User " + self.name
+ else: message = "An unnamed user"
+ message += " logged out."
+ muffmisc.log(message)
+ self.save()
+ self.connection.close()
+ self.remove()
+
+ def reload(self):
+ """Save, load a new user and relocate the connection."""
+
+ # unauthenticated connections get the boot
+ if not self.authenticated:
+ muffmisc.log("An unauthenticated user was disconnected during reload.")
+ self.state = "disconnecting"
+
+ # authenticated users
+ else:
+
+ # save and get out of the list
+ self.save()
+ self.remove()
+
+ # create a new user object
+ new_user = muffuser.User()
+
+ # give it the same name
+ new_user.name = self.name
+
+ # load from file
+ new_user.load()
+
+ # set everything else equivalent
+ new_user.address = self.address
+ new_user.last_address = self.last_address
+ new_user.connection = self.connection
+ new_user.authenticated = self.authenticated
+ new_user.password_tries = self.password_tries
+ new_user.state = self.state
+ new_user.menu_seen = self.menu_seen
+ new_user.error = self.error
+ new_user.input_queue = self.input_queue
+ new_user.output_queue = self.output_queue
+ new_user.partial_input = self.partial_input
+ new_user.echoing = self.echoing
+
+ # add it to the list
+ muffvars.userlist.append(new_user)
+
+ # get rid of the old user object
+ del(self)
+
+ def replace_old_connections(self):
+ """Disconnect active users with the same name."""
+
+ # the default return value
+ return_value = False
+
+ # iterate over each user in the list
+ for old_user in muffvars.userlist:
+
+ # the name is the same but it's not us
+ if old_user.name == self.name and old_user is not self:
+
+ # make a note of it
+ muffmisc.log("User " + self.name + " reconnected--closing old connection to " + old_user.address + ".")
+ old_user.send("$(eol)$(red)New connection from " + self.address + ". Terminating old connection...$(nrm)$(eol)")
+ self.send("$(eol)$(red)Taking over old connection from " + old_user.address + ".$(nrm)")
+
+ # close the old connection
+ old_user.connection.close()
+
+ # replace the old connection with this one
+ old_user.connection = self.connection
+ old_user.last_address = old_user.address
+ old_user.address = self.address
+ old_user.echoing = self.echoing
+
+ # take this one out of the list and delete
+ self.remove()
+ del(self)
+ return_value = True
+ break
+
+ # true if an old connection was replaced, false if not
+ return return_value
+
+ def authenticate(self):
+ """Flag the user as authenticated and disconnect duplicates."""
+ if not self.state is "authenticated":
+ muffmisc.log("User " + self.name + " logged in.")
+ self.authenticated = True
+