compositors listen on the socket id "hilbert.compositor". when a window is opened by an application, that window can only be referred to on that stream. the opaque value given in the "window opened" message refers to that window in future messages on that stream. it is guaranteed to be distinct for different windows on the same stream, and in no way guaranteed to be distinct for different windows on different streams. the window is bound just to the stream, not to the application. if the stream where a window was created is gifted to a new process, the new process has complete control over the window, and the compositor does not need to be informed. data types: color: opaque dword (result of encode color system call). from c++, use euler::syscall::encode_color in euler/syscall.hpp. color rectangle: multiple hilbert colors, top to bottom by row, left to right within row window: opaque word (given in "window opened" message after "open window" message) messages from applications to compositor: open window: byte: 0x00 dword: window width dword: window height update window region: byte: 0x01 window: the window dword: start x dword: start y dword: width dword: height color rectangle: the data messages from compositor to application: window opened: byte: 0x00 window: the window