simplifying the architecture
it uses queries and events exclusively to communicate TryLock and TryUnlock commands. the code is less and simpler this way, and the architecture makes more sense