A MainLoop that drives the program, reacting to any incoming events and dispatching method calls. Most of a time, the program/thread will sit idle in this loop, waiting on events to occur. A Context that keeps track of any pipewire resources. A Core that is a proxy for the remote pipewire instance, used to send messages to and receive events from the remote server. Optionally, a Registry that can be used to manage and track available objects on the server.