NOTE: the big change here is that we now use shared pointers to our server/assignment, and to the node. Since the sending thread gets initialized with these shared pointers, it can keep clean reference counts to these resources.