;ELC ;;; Compiled ;;; in Emacs version 26.3 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\210\300\307!\210\300\310!\210\300\311!\210\300\312!\210\313\314\315\316!\"\210\313\317\320\316!\"\210\313\321\317\"\210\322\321\323\324#\210\325\316\326\317#\327\316\330\331\332$\207" [require warnings eieio jupiter rudel-tls rudel-state-machine rudel-operations rudel-chat rudel-obby-errors rudel-obby-util rudel-obby-state defalias rudel-obby-client-state-new-p eieio-make-class-predicate rudel-obby-client-state-new rudel-obby-client-state-new--eieio-childp eieio-make-child-predicate rudel-obby-client-state-new-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-new) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) nil (:documentation "Start state of newly established connections." :method-invocation-order :c3)] 6) #@84 Create a new object of class type `rudel-obby-client-state-new'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-new #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-new] 5 (#$ . 1304)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-new compiler-macro rudel-obby-client-state-new--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-new--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 1666)]) (byte-code "\300\301\302\303\302\304%\210\305\306\307\310!\"\210\305\311\312\310!\"\210\305\313\311\"\210\314\313\315\316#\210\317\310\320\311#\321\310\322\302\323$\207" [cl-generic-define-method rudel-obby/obby_welcome nil ((_this rudel-obby-client-state-new) version) #[514 "\300\301\"\302\303\"\266\304\207" [string-to-number 16 message "Received Obby welcome message (version %d)" encryption-negotiate] 6 "Handle obby 'welcome' message.\n\n(fn THIS VERSION)"] defalias rudel-obby-client-state-encryption-negotiate-p eieio-make-class-predicate rudel-obby-client-state-encryption-negotiate rudel-obby-client-state-encryption-negotiate--eieio-childp eieio-make-child-predicate rudel-obby-client-state-encryption-negotiate-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-encryption-negotiate) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) (:documentation "Start state of the encryption handshake." :method-invocation-order :c3)] 6) #@101 Create a new object of class type `rudel-obby-client-state-encryption-negotiate'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-encryption-negotiate #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-encryption-negotiate] 5 (#$ . 2940)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-encryption-negotiate compiler-macro rudel-obby-client-state-encryption-negotiate--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-encryption-negotiate--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 3387)]) (byte-code "\300\301\302\303\302\304%\210\305\306\307\310!\"\210\305\311\312\310!\"\210\305\313\311\"\210\314\313\315\316#\210\317\310\320\311#\321\310\322\302\323$\207" [cl-generic-define-method rudel-obby/net6_encryption nil ((this rudel-obby-client-state-encryption-negotiate) _value) #[514 "\300\301\"\210\302\207" [rudel-send "net6_encryption_ok" encryption-start] 5 "Handle net6 'encryption' message.\n\n(fn THIS VALUE)"] defalias rudel-obby-client-state-encryption-start-p eieio-make-class-predicate rudel-obby-client-state-encryption-start rudel-obby-client-state-encryption-start--eieio-childp eieio-make-child-predicate rudel-obby-client-state-encryption-start-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-encryption-start) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) (:documentation "Second state of the encryption handshake." :method-invocation-order :c3)] 6) #@97 Create a new object of class type `rudel-obby-client-state-encryption-start'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-encryption-start #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-encryption-start] 5 (#$ . 4620)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-encryption-start compiler-macro rudel-obby-client-state-encryption-start--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-encryption-start--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 5047)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\310\311\312\313!\"\210\310\314\315\313!\"\210\310\316\314\"\210\317\316\320\321#\210\322\313\323\314#\324\313\325\302\326$\207" [cl-generic-define-method rudel-obby/net6_encryption_begin nil ((this rudel-obby-client-state-encryption-start)) #[257 "\300\301\"\300\302\"\300\303\"\300\304\"\305\306\"\203/\307!\203(\310!\210\311\312!\210\202/\313\314\315!\"\210\266\316\207" [eieio-oref :connection :info :transport :root-transport plist-get :encryption rudel-start-tls-transport-child-p rudel-enable-encryption sit-for 1 warn "An encrypted connection has been requested, but\nthe selected transport `%s' does not support encryption" object-class waiting-for-join-info] 9 "Handle net6 'encryption_begin' message.\n\n(fn THIS)"] rudel-obby/net6_encryption_failed ((_this rudel-obby-client-state-encryption-start)) #[257 "\300\207" [waiting-for-join-info] 2 "Handle net6 'encryption_failed' message.\n\n(fn THIS)"] defalias rudel-obby-client-state-waiting-for-join-info-p eieio-make-class-predicate rudel-obby-client-state-waiting-for-join-info rudel-obby-client-state-waiting-for-join-info--eieio-childp eieio-make-child-predicate rudel-obby-client-state-waiting-for-join-info-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-waiting-for-join-info) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) (:documentation "State entered when the connection is established and\npotentially needs additional information for joining the\nsession." :method-invocation-order :c3)] 6) #@102 Create a new object of class type `rudel-obby-client-state-waiting-for-join-info'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-waiting-for-join-info #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-waiting-for-join-info] 5 (#$ . 6946)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-waiting-for-join-info compiler-macro rudel-obby-client-state-waiting-for-join-info--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-waiting-for-join-info--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 7398)]) (byte-code "\300\301\302\303!\"\210\300\304\305\303!\"\210\300\306\304\"\210\307\306\310\311#\210\312\303\313\304#\314\303\315\316\317$\207" [defalias rudel-obby-client-state-joining-p eieio-make-class-predicate rudel-obby-client-state-joining rudel-obby-client-state-joining--eieio-childp eieio-make-child-predicate rudel-obby-client-state-joining-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-joining) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) nil (:documentation "First state after the connection has been properly set up." :method-invocation-order :c3)] 6) #@88 Create a new object of class type `rudel-obby-client-state-joining'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-joining #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-joining] 5 (#$ . 8321)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-joining compiler-macro rudel-obby-client-state-joining--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-joining--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 8703)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\300\310\302\311\302\312%\210\313\314\315\316!\"\210\313\317\320\316!\"\210\313\321\317\"\210\322\321\323\324#\210\325\316\326\317#\327\316\330\331\332$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-joining) info) #[514 "\300\301\"\300\302\"\300\303\"\300\304\"\305!\203?\306\307\310\311!\312\205*C \2057\2057C\"&\210\313\202D\314\315\313BD\207" [plist-get :username :color :global-password :user-password color-values apply rudel-send "net6_client_login" rudel-obby-format-color append nil join-failed rudel-obby-invalid-color] 15 "When entering this state, send a login request.\n\n(fn THIS INFO)"] rudel-obby/obby_sync_init ((_this rudel-obby-client-state-joining) count) #[514 "\300\301\"\302D\207" [string-to-number 16 session-synching] 5 "Handle obby 'sync_init' message.\n\n(fn THIS COUNT)"] rudel-obby/net6_login_failed ((_this rudel-obby-client-state-joining) reason) #[514 "\306\307\" U\203\310\311B\202Q\nU\203\312\311B\202Q U\203)\313\311B\202Q\fU\2035\314\311B\202Q U\203A\315\311B\202QU\203N\316\311B\202Q\317\311B\320D\262\262\207" [this rudel-obby-error-username-invalid rudel-obby-error-username-in-use rudel-obby-error-color-invalid rudel-obby-error-color-in-use rudel-obby-error-wrong-global-password string-to-number 16 rudel-obby-invalid-username nil rudel-obby-username-in-use rudel-obby-invalid-color rudel-obby-color-in-use rudel-obby-wrong-global-password rudel-obby-wrong-user-password rudel-join-error join-failed rudel-obby-error-wrong-user-password] 7 "Handle net6 'login_failed' message.\n\n(fn THIS REASON)"] defalias rudel-obby-client-state-join-failed-p eieio-make-class-predicate rudel-obby-client-state-join-failed rudel-obby-client-state-join-failed--eieio-childp eieio-make-child-predicate rudel-obby-client-state-join-failed-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-join-failed) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) ((error-symbol :initarg :error-symbol :type symbol :documentation "Error symbol describing the reason for the\nlogin failure.") (error-data :initarg :error-data :type list :documentation "Additional error data describing the login\nfailure.")) (:documentation "State for failed login attempts." :method-invocation-order :c3)] 6) #@92 Create a new object of class type `rudel-obby-client-state-join-failed'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-join-failed #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-join-failed] 5 (#$ . 11401)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-join-failed compiler-macro rudel-obby-client-state-join-failed--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-join-failed--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 11804)]) (byte-code "\300\301\302\303\302\304%\210\305\306\307\310!\"\210\305\311\312\310!\"\210\305\313\311\"\210\314\313\315\316#\210\317\310\320\311#\321\310\322\323\324$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-join-failed) error) #[514 "\211\300\301@#\266\211\300\302A#\266\303\207" [eieio-oset error-symbol error-data nil] 8 "When the state is entered, store the error data passed in ERROR.\n\n(fn THIS ERROR)"] defalias rudel-obby-client-state-idle-p eieio-make-class-predicate rudel-obby-client-state-idle rudel-obby-client-state-idle--eieio-childp eieio-make-child-predicate rudel-obby-client-state-idle-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-idle) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state rudel-obby-document-handler) ((document-container-slot :initform 'session)) (:documentation "Default state of the connection." :method-invocation-order :c3)] 6) #@85 Create a new object of class type `rudel-obby-client-state-idle'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-idle #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-idle] 5 (#$ . 13059)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-idle compiler-macro rudel-obby-client-state-idle--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-idle--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 13427)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\300\310\302\311\302\312%\210\300\313\302\314\302\315%\210\300\316\302\317\302\320%\210\300\321\302\322\302\323%\210\300\324\302\325\302\326%\210\300\327\302\330\302\331%\210\300\332\302\333\302\334%\210\300\335\302\336\302\337%\210\300\340\302\341\302\342%\210\300\343\302\344\302\345%\210\300\346\302\347\302\350%\210\300\351\302\352\302\353%\210\354\355\356\357!\"\210\354\360\361\357!\"\210\354\362\360\"\210\363\362\364\365#\210\366\357\367\360#\370\357\371\372\373$\207" [cl-generic-define-method rudel-obby/net6_client_join nil ((this rudel-obby-client-state-idle) client-id name encryption user-id color) #[1542 "\300\301\"\300\301\"\302!\303\304\"\305\303\306\"\307\310$\211\203L\211\211\311\312\n#\266\211\311\313#\266\211\311\314\315#\266\211\311\316 \317\230#\266\320!\266\202k\321\n\322\323\n\324 \325\315\326\317\230& \262\327\303\306\"\"\210\266\330\331#\266\332\207" [string-to-number 16 rudel-obby-parse-color slot-value connection rudel-find-user session = rudel-id eieio-oset client-id color connected t encryption "1" rudel-change-notify rudel-obby-user :color :client-id :user-id :connected :encryption rudel-add-user message "Client joined: %s %s" nil] 25 "Handle net6 'client_join' message.\n\n(fn THIS CLIENT-ID NAME ENCRYPTION USER-ID COLOR)"] rudel-obby/net6_client_part ((this rudel-obby-client-state-idle) client-id) #[514 "\300\301\"\302\303\"\304\302\305\"\306\307$\211\2030\211\211\310\311\312#\266\211\310\313\312#\266\314\315\"\266\202:\316\317\320\321\"\322#\210\266\312\207" [string-to-number 16 slot-value connection rudel-find-user session eql rudel-client-id eieio-oset client-id nil connected object-run-hook-with-args change-hook display-warning (rudel obby) format "Could find user for client id: %d" :warning] 12 "Handle net6 'client_part' message.\n\n(fn THIS CLIENT-ID)"] rudel-obby/obby_user_colour ((this rudel-obby-client-state-idle) user-id color) #[771 "\300\301\"\302!\303\304\"\305\303\306\"\307\310$\211\211\311\312#\266\313\314\"\210\315\316\317\303\320\"\"\303\312\"\"\266\321\207" [string-to-number 16 rudel-obby-parse-color slot-value connection rudel-find-user session = rudel-id eieio-oset :color object-run-hook-with-args change-hook rudel-overlay-set-face-attributes rudel-overlay-make-face-symbol author :object-name nil] 15 "Handle obby 'user_colour' message.\n\n(fn THIS USER-ID COLOR)"] rudel-obby/obby_document_create ((this rudel-obby-client-state-idle) owner-id doc-id name suffix _encoding) #[1542 "\300\301\"\300\301\"\300\301\"\302\303\"\304\302\305\"\306\307$\310\302\305\"\311 \312C\313 \314\315& \"\266\316\317\"\266\320\207" [string-to-number 16 slot-value connection rudel-find-user session = rudel-id rudel-add-document rudel-obby-document :subscribed :id :owner-id :suffix message "New document: %s" nil] 24 "Handle obby 'document_create' message.\n\n(fn THIS OWNER-ID DOC-ID NAME SUFFIX ENCODING)"] rudel-obby/obby_document_remove ((this rudel-obby-client-state-idle) doc-id) #[514 "\300\301\302\303\304#\"\305\306\"\307\305\310\"\311\312$\211\203/\313\305\310\"\"\210\211\314\315\305\316\"\"\266\2029\317\320\321\322\"\323#\210\266\324\207" [mapcar #[257 "\300\301\"\207" [string-to-number 16] 4 "\n\n(fn STRING)"] split-string " " t slot-value connection rudel-find-document session equal rudel-both-ids rudel-remove-document message "Document removed: %s" :object-name display-warning (rudel obby) format "Could not find document: `%s'" :warning nil] 12 "Handle obby 'document_remove' message.\n\n(fn THIS DOC-ID)"] rudel-obby/obby_document/rename ((_this rudel-obby-client-state-idle) document _user new-name new-suffix) #[1285 "\300\301\"\211\302\303#\266\211\302\304#\266\305\207" [string-to-number 16 eieio-oset :object-name suffix nil] 12 "Handle 'rename' submessage of the obby 'document' message.\n\n(fn THIS DOCUMENT USER NEW-NAME NEW-SUFFIX)"] rudel-obby/obby_document/subscribe ((this rudel-obby-client-state-idle) document user-id) #[771 "\300\301\"\302\303\"\304\302\305\"\306\307$\310\"\266\311\207" [string-to-number 16 slot-value connection rudel-find-user session = rudel-id rudel-add-user nil] 11 "Handle 'subscribe' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER-ID)"] rudel-obby/obby_document/unsubscribe ((this rudel-obby-client-state-idle) document user-id) #[771 "\300\301\"\302\303\"\304\302\305\"\306\307$\310\"\266\311\207" [string-to-number 16 slot-value connection rudel-find-user session = rudel-id rudel-remove-user nil] 11 "Handle 'unsubscribe' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER-ID)"] rudel-obby/obby_document/record ((this rudel-obby-client-state-idle) document user-id local-revision remote-revision action &rest arguments) #[1670 "\300\301\"\300\301\"\300\301\" \302\303\"\304\302\305\"\306\307$\262\262\211\203]\3101@\311 \312\313  F\n\"$0\202h\314\315\316\317\320!@A\312&\321#\210\322\262\202h\314\323\316\324\"\325#\210\322\262\207" [string-to-number 16 slot-value connection rudel-find-user session = rudel-id (rudel-dispatch-error) rudel-dispatch "rudel-obby/obby_document/record/" append display-warning (rudel obby) format "%s: no method (%s: %s): `%s:%s'; arguments: %s" cl-prin1-to-string :debug nil (rudel obby) "Could not find User: `%d'" :warning] 22 "Handle 'record' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER-ID LOCAL-REVISION REMOTE-REVISION ACTION &rest ARGUMENTS)"] rudel-obby/obby_document/record/ins ((this rudel-obby-client-state-idle) document user local-revision remote-revision position data) #[1799 "\300\301\"\302\303\304#\305\306%\307\310\311\"\n\n  &\266\312\207" [string-to-number 16 jupiter-insert format "insert-%d-%d" :from :data rudel-remote-operation slot-value connection nil] 17 "Handle 'ins' submessage of 'record' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER LOCAL-REVISION REMOTE-REVISION POSITION DATA)"] rudel-obby/obby_document/record/del ((this rudel-obby-client-state-idle) document user local-revision remote-revision position length) #[1799 "\300\301\"\300\301\"\302\303\304 #\305\306\\% \307\310\311\"  \n\f&\266\312\207" [string-to-number 16 jupiter-delete format "delete-%d-%d" :from :to rudel-remote-operation slot-value connection nil] 18 "Handle 'del' submessage of 'record' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER LOCAL-REVISION REMOTE-REVISION POSITION LENGTH)"] rudel-obby/obby_document/record/split ((this rudel-obby-client-state-idle) document user local-revision remote-revision &rest operations) #[1413 "\300\301B#\302\303\304\" &\266\305\207" [rudel-message->operation "split" rudel-remote-operation slot-value connection nil] 15 "Handle 'split' submessage of 'record' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER LOCAL-REVISION REMOTE-REVISION &rest OPERATIONS)"] rudel-obby/obby_document/record/noop ((this rudel-obby-client-state-idle) document user local-revision remote-revision) #[1285 "\300\301\302#!\303\304\305\"&\266\306\207" [jupiter-nop format "nop-%d-%d" rudel-remote-operation slot-value connection nil] 14 "Handle 'noop' submessage of 'record' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER LOCAL-REVISION REMOTE-REVISION)"] rudel-obby/obby_message ((this rudel-obby-client-state-idle) sender text) #[771 "\300\301\"\302\303\"\304\305\306\"\307\310$\311\"\266\312\207" [string-to-number 16 eieio-oref :connection rudel-find-user slot-value session eq rudel-id rudel-chat-dispatch-message nil] 10 "Handle obby 'message' message\n\n(fn THIS SENDER TEXT)"] defalias rudel-obby-client-state-session-synching-p eieio-make-class-predicate rudel-obby-client-state-session-synching rudel-obby-client-state-session-synching--eieio-childp eieio-make-child-predicate rudel-obby-client-state-session-synching-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-session-synching) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) ((all-items :initarg :all-items :type (integer 0) :documentation "Total number of synchronization items\nexpected to receive from the server.") (remaining-items :initarg :remaining-items :type (integer 0) :documentation "Number of synchronization items not yet\nreceived from the server.") (have-self :initarg :have-self :type boolean :documentation "Flag that remembers, whether the session has\na 'self' user object.")) (:documentation "State used for synching session data." :method-invocation-order :c3)] 6) #@97 Create a new object of class type `rudel-obby-client-state-session-synching'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-session-synching #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-session-synching] 5 (#$ . 22449)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-session-synching compiler-macro rudel-obby-client-state-session-synching--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-session-synching--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 22877)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\300\310\302\311\302\312%\210\300\313\302\314\302\315%\210\300\316\302\317\302\320%\210\300\321\302\322\323\324%\210\325\326\327\330!\"\210\325\331\332\330!\"\210\325\333\331\"\210\334\333\335\336#\210\337\330\340\331#\341\330\342\343\344$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-session-synching) num-items) #[514 "\211\300\301#\266\211\300\302#\266\211\300\303\304#\266\304\207" [eieio-oset all-items remaining-items have-self nil] 8 "When entering state, store number of expected items.\n\n(fn THIS NUM-ITEMS)"] rudel-obby/net6_client_join ((this rudel-obby-client-state-session-synching) client-id name encryption user-id color) #[1542 "\300\301\"\300\301\"\302!\303\304\"\305 \306\307 \310\n\311\312\313\314\230& \315\303\316\"\"\210\303\317\"\204H\303\316\"\211\320\321#\266\320\317\312#\266\266\211\320\322\303\322\"S#\266\323\207" [string-to-number 16 rudel-obby-parse-color slot-value connection rudel-obby-user :color :client-id :user-id :connected t :encryption "1" rudel-add-user session have-self eieio-oset self remaining-items nil] 24 "Handle net6 'client_join' message.\n\n(fn THIS CLIENT-ID NAME ENCRYPTION USER-ID COLOR)"] rudel-obby/obby_sync_usertable_user ((this rudel-obby-client-state-session-synching) user-id name color) #[1028 "\300\301\"\302!\303\304\"\305\303\306\"\307\310\311\312\313 &\"\266\211\314\315\303\315\"S#\266\312\207" [string-to-number 16 rudel-obby-parse-color slot-value connection rudel-add-user session rudel-obby-user :user-id :connected nil :color eieio-oset remaining-items] 18 "Handle obby 'sync_usertable_user' message.\n\n(fn THIS USER-ID NAME COLOR)"] rudel-obby/obby_sync_doclist_document ((this rudel-obby-client-state-session-synching) owner-id doc-id name suffix _encoding &rest subscribed-user-ids) #[1670 "\300\301\"\300\301\"\300\301\" \302\303\"\304\305\306\307\310\311!\312\"\313\314%\"\315\302\316\"\317\f\320\321\f\322 \323& \"\266\211\324\325\302\325\"S#\266\326\207" [string-to-number 16 slot-value connection mapcar make-byte-code 257 "\301\302\"\303\304\300\305\"\306\307$\207" vconcat vector [string-to-number 16 rudel-find-user slot-value session = rudel-id] 7 "\n\n(fn USER-ID)" rudel-add-document session rudel-obby-document :subscribed :id :owner-id :suffix eieio-oset remaining-items nil] 25 "Handle obby 'sync_doclist_document' message.\n\n(fn THIS OWNER-ID DOC-ID NAME SUFFIX ENCODING &rest SUBSCRIBED-USER-IDS)"] rudel-obby/obby_sync_final ((this rudel-obby-client-state-session-synching)) #[257 "\211\300\301\"\203\f\302\202 \303\207" [slot-value have-self idle we-finalized] 5 "Handle obby 'sync_final' message.\n\n(fn THIS)"] object-print ((this rudel-obby-client-state-session-synching) &rest _strings) t #[642 "\300\301\302\303\"\"\"\207" [format " remaining: %d" slot-value remaining-items] 11 "Append number of remaining items to string representation.\n\n(fn THIS &rest STRINGS)"] defalias rudel-obby-client-state-subscribing-p eieio-make-class-predicate rudel-obby-client-state-subscribing rudel-obby-client-state-subscribing--eieio-childp eieio-make-child-predicate rudel-obby-client-state-subscribing-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-subscribing) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state rudel-obby-document-handler) ((document-container-slot :initform 'session) (document :initarg :document :type rudel-obby-document-child :documentation #1="")) (:documentation #1# :method-invocation-order :c3)] 6) #@92 Create a new object of class type `rudel-obby-client-state-subscribing'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-subscribing #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-subscribing] 5 (#$ . 26825)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-subscribing compiler-macro rudel-obby-client-state-subscribing--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-subscribing--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 27228)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\310\311\312\313!\"\210\310\314\315\313!\"\210\310\316\314\"\210\317\316\320\321#\210\322\313\323\314#\324\313\325\326\327$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-subscribing) user document) #[771 "\211\300\301#\266\302\301\"\303\304\305\306\302\307\"\302\310\"#\311\305\312\302\313\"\"%\266\314\207" [eieio-oset :document slot-value rudel-send "obby_document" format "%x %x" owner-id :id "subscribe" "%x" user-id nil] 16 "When entering this state, send a subscription request to the server.\n\n(fn THIS USER DOCUMENT)"] rudel-obby/obby_document/sync_init ((this rudel-obby-client-state-subscribing) _document num-bytes) #[771 "\300\301\"\302U\203\303\202\304\305\306\"E\262\207" [string-to-number 16 0 idle document-synching slot-value document] 9 "Handle 'sync_init' submessage of the obby 'document' message.\n\n(fn THIS DOCUMENT NUM-BYTES)"] defalias rudel-obby-client-state-document-synching-p eieio-make-class-predicate rudel-obby-client-state-document-synching rudel-obby-client-state-document-synching--eieio-childp eieio-make-child-predicate rudel-obby-client-state-document-synching-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-document-synching) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state rudel-obby-document-handler) ((document-container-slot :initform 'session) (document :initarg :document :type rudel-obby-document-child :documentation #1="") (all-bytes :initarg :all-bytes :type (integer 0) :documentation #1#) (remaining-bytes :initarg :remaining-bytes :type (integer 0) :documentation #1#)) (:documentation #1# :method-invocation-order :c3)] 6) #@98 Create a new object of class type `rudel-obby-client-state-document-synching'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-document-synching #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-document-synching] 5 (#$ . 29277)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-document-synching compiler-macro rudel-obby-client-state-document-synching--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-document-synching--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 29710)]) (byte-code "\300\301\302\303\302\304%\210\300\305\302\306\302\307%\210\300\310\302\311\312\313%\210\314\315\316\317!\"\210\314\320\321\317!\"\210\314\322\320\"\210\323\322\324\325#\210\326\317\327\320#\330\317\331\332\333$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-document-synching) document num-bytes) #[771 "\211\300\301#\266\211\300\302#\266\211\300\303#\266\304\207" [eieio-oset :document all-bytes remaining-bytes nil] 9 "\n\n(fn THIS DOCUMENT NUM-BYTES)"] rudel-obby/obby_document/sync_chunk ((this rudel-obby-client-state-document-synching) document data user-id) #[1028 "\300\301\"\302\303\"\304U?\205\305\302\306\"\307\310$\311\312\313\314\315\n%\316#\266\211\317\320\302\320\"\321 !Z#\266\302\320\"\304U\205C\322\262\207" [string-to-number 16 slot-value connection 0 rudel-find-user session = rudel-id rudel-insert-op "bulk-insert" :from nil :data rudel-remote-operation eieio-oset remaining-bytes string-bytes idle] 14 "Handle 'sync_chunk' submessage of the obby 'document' message.\n\n(fn THIS DOCUMENT DATA USER-ID)"] object-print ((this rudel-obby-client-state-document-synching) &rest _strings) t #[642 "\300\301\302\303\"\"\"\207" [format " remaining: %d" slot-value remaining-bytes] 11 "Append number of remaining items to string representation.\n\n(fn THIS &rest STRINGS)"] defalias rudel-obby-client-state-we-finalized-p eieio-make-class-predicate rudel-obby-client-state-we-finalized rudel-obby-client-state-we-finalized--eieio-childp eieio-make-child-predicate rudel-obby-client-state-we-finalized-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-we-finalized) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) ((reason :initarg :reason :type (or symbol string) :documentation "The reason for the finalization.")) (:documentation "State used to indicate that we closed the connection." :method-invocation-order :c3)] 6) #@93 Create a new object of class type `rudel-obby-client-state-we-finalized'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-we-finalized #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-we-finalized] 5 (#$ . 31972)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-we-finalized compiler-macro rudel-obby-client-state-we-finalized--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-we-finalized--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 32380)]) (byte-code "\300\301\302\303\302\304%\210\305\306\307\310!\"\210\305\311\312\310!\"\210\305\313\311\"\210\314\313\315\316#\210\317\310\320\311#\321\310\322\323\324$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-we-finalized) &optional reason1) #[513 "\211\300\301#\266\302\303\"\304\305\306\"!\266\307\207" [eieio-oset reason eieio-oref :connection rudel-close slot-value transport disconnected] 8 "Close the underlying transport and switch to disconnected state.\n\n(fn THIS &optional REASON1)"] defalias rudel-obby-client-state-they-finalized-p eieio-make-class-predicate rudel-obby-client-state-they-finalized rudel-obby-client-state-they-finalized--eieio-childp eieio-make-child-predicate rudel-obby-client-state-they-finalized-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-they-finalized) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) ((reason :initarg :reason :type (or symbol string) :documentation "The reason for the finalization.")) (:documentation "State used to indicate that the connection was closed by the peer." :method-invocation-order :c3)] 6) #@95 Create a new object of class type `rudel-obby-client-state-they-finalized'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-they-finalized #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-they-finalized] 5 (#$ . 33831)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-they-finalized compiler-macro rudel-obby-client-state-they-finalized--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-they-finalized--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 34249)]) (byte-code "\300\301\302\303\302\304%\210\305\306\307\310!\"\210\305\311\312\310!\"\210\305\313\311\"\210\314\313\315\316#\210\317\310\320\311#\321\310\322\302\323$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-client-state-they-finalized) &optional reason1) #[513 "\211\300\301#\266\302\303\"\304\305\306\"!\266\307\207" [eieio-oset reason eieio-oref :connection rudel-close slot-value transport disconnected] 8 "Close the underlying transport and switch to disconnected state.\n\n(fn THIS &optional REASON1)"] defalias rudel-obby-client-state-disconnected-p eieio-make-class-predicate rudel-obby-client-state-disconnected rudel-obby-client-state-disconnected--eieio-childp eieio-make-child-predicate rudel-obby-client-state-disconnected-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client-state-disconnected) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-client-connection-state) (:documentation "State used to indicated that the connection is closed." :method-invocation-order :c3)] 6) #@93 Create a new object of class type `rudel-obby-client-state-disconnected'. (fn &rest SLOTS) (defalias 'rudel-obby-client-state-disconnected #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client-state-disconnected] 5 (#$ . 35579)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client-state-disconnected compiler-macro rudel-obby-client-state-disconnected--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client-state-disconnected--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 35987)]) #@48 Name symbols and classes of connection states. (defvar rudel-obby-client-connection-states '((new . rudel-obby-client-state-new) (encryption-negotiate . rudel-obby-client-state-encryption-negotiate) (encryption-start . rudel-obby-client-state-encryption-start) (waiting-for-join-info . rudel-obby-client-state-waiting-for-join-info) (joining . rudel-obby-client-state-joining) (join-failed . rudel-obby-client-state-join-failed) (idle . rudel-obby-client-state-idle) (session-synching . rudel-obby-client-state-session-synching) (subscribing . rudel-obby-client-state-subscribing) (document-synching . rudel-obby-client-state-document-synching) (we-finalized . rudel-obby-client-state-we-finalized) (they-finalized . rudel-obby-client-state-they-finalized) (disconnected . rudel-obby-client-state-disconnected)) (#$ . 36243)) (byte-code "\300\301\302\303!\"\210\300\304\305\303!\"\210\300\306\304\"\210\307\306\310\311#\210\312\303\313\304#\314\303\315\316\317$\207" [defalias rudel-obby-connection-p eieio-make-class-predicate rudel-obby-connection rudel-obby-connection--eieio-childp eieio-make-child-predicate rudel-obby-connection-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-connection) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-connection rudel-state-machine) ((transport :initarg :transport :type rudel-transport :documentation "The transport object through which this connection\nsends and receives its data.") (info :initarg :info :type list :documentation "Stores connection information for later use.") (contexts :initarg :contexts :type hash-table :documentation "Contains jupiter context objects for all\ndocuments.")) (:documentation "Class rudel-obby-connection ")] 6) #@78 Create a new object of class type `rudel-obby-connection'. (fn &rest SLOTS) (defalias 'rudel-obby-connection #[128 "\300\301\302#\207" [apply make-instance rudel-obby-connection] 5 (#$ . 37989)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-connection compiler-macro rudel-obby-connection--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-connection--anon-cmacro #[385 "\211@;\204\207\300\301\302@@#@\303@DABB\"\207" [macroexp--warn-and-return format "Obsolete name arg %S to constructor %S" identity] 7 (#$ . 38322)]) (byte-code "\300\301\302\303\304\305%\210\300\306\302\307\304\310%\210\300\311\302\312\302\313%\210\300\314\302\315\304\316%\210\300\317\302\320\302\321%\210\300\322\302\323\302\324%\210\300\325\302\326\302\327%\210\300\330\302\331\302\332%\210\300\333\302\334\302\335%\210\300\336\302\337\302\340%\210\300\341\302\342\302\343%\210\300\344\302\345\302\346%\210\300\347\302\350\302\351%\210\300\352\302\353\302\354%\210\300\355\302\356\302\357%\210\300\360\302\361\302\362%\210\300\363\302\364\302\365%\210\366\367!\207" [cl-generic-define-method initialize-instance nil ((this rudel-obby-connection) _slots) t #[771 " \210\211\301\302\303\304\305\"#\266\306\"\210\211\301\307\310\311\307\"!#\266\312\311\307\"\313\314\315\316\317 !\320\"\321\322%\"\210\323\311\307\"\313\314\324\316\317 !\325\"\326\327%\"\207" [rudel-obby-client-connection-states eieio-oset contexts make-hash-table :test equal rudel-register-states transport rudel-obby-make-transport-filter-stack slot-value rudel-set-filter make-byte-code 257 "\301\300\"\207" vconcat vector [rudel-accept] 4 "\n\n(fn DATA)" rudel-set-sentinel "\211\301=\205 \302\300!\207" [close rudel-close] 3 "\n\n(fn EVENT)"] 12 "\n\n(fn CL--CNM THIS SLOTS)"] rudel-register-state ((this rudel-obby-connection) _symbol state) #[1028 "\300\301#\210 \207" [eieio-oset :connection] 8 "Register SYMBOL and STATE and set connection slot of STATE.\n\n(fn CL--CNM THIS SYMBOL STATE)"] rudel-send ((this rudel-obby-connection) &rest args) #[385 "\300\301\302\"\"\207" [rudel-send slot-value transport] 7 "Send ARGS through the transport of THIS.\n\n(fn THIS &rest ARGS)"] rudel-disconnect ((this rudel-obby-connection)) #[514 "\300\301\302\"\210\303\304\305#\210\211!\205 \207" [#[257 "\300!\207" [cl--generic-isnot-nnm-p] 3 "\n\n(fn CL--CNM)"] rudel-switch we-finalized rudel-state-wait (disconnected) nil] 7 "Disconnect THIS from the remote endpoint.\n\n(fn CL--CNM THIS)"] rudel-close ((this rudel-obby-connection)) #[257 "\300\301\"\210\211\302\303\304\"!\207" [rudel-switch they-finalized rudel-end slot-value session] 6 "Cleanup after THIS has been disconnected.\n\n(fn THIS)"] rudel-find-context ((this rudel-obby-connection) document) #[514 "\300\301\302\"\303\304\"\"\207" [gethash eieio-oref :id slot-value contexts] 8 "Return the jupiter context associated to DOCUMENT in THIS connection.\n\n(fn THIS DOCUMENT)"] rudel-add-context ((this rudel-obby-connection) document) #[514 "\300\301\302\"\303\304\305\301\306\"\"!\301\307\"#\262\207" [puthash slot-value :id jupiter-context format "%s" :object-name contexts] 12 "Add a jupiter context for DOCUMENT to THIS connection.\n\n(fn THIS DOCUMENT)"] rudel-remove-context ((this rudel-obby-connection) document) #[514 "\300\301\302\"\303\304\"\"\207" [remhash eieio-oref :id slot-value contexts] 8 "Remove the jupiter context associated to DOCUMENT from THIS connection.\n\n(fn THIS DOCUMENT)"] rudel-change-color- ((this rudel-obby-connection) color) #[514 "\300\301\302!#\207" [rudel-send "obby_user_colour" rudel-obby-format-color] 7 "\n\n(fn THIS COLOR)"] rudel-publish ((this rudel-obby-connection) document) #[514 "\300\"\210\211\301\302\303\304\305\306\"\"\305\307\"\310r\305\311\"q\210\312 )&\207" [rudel-add-context rudel-send "obby_document_create" format "%x" slot-value id :object-name "UTF-8" buffer buffer-string] 12 "Publish DOCUMENT to server.\n\n(fn THIS DOCUMENT)"] rudel-unpublish ((this rudel-obby-connection) document) #[514 "\211\300\301\302\303\304\305\"\304\306\"##\266\307\"\207" [rudel-send "obby_document_remove" format "%x %x" slot-value owner-id :id rudel-remove-context] 12 "Remove DOCUMENT from the obby session THIS is connected to.\n\n(fn THIS DOCUMENT)"] rudel-subscribe-to ((this rudel-obby-connection) document) #[514 "\300\"\210\301\302\"\303\304\301\305\"$\266\306\307\310\311#\312\313\314\315\316!\317\"\320\321%\322\323\324$\207" [rudel-add-context slot-value session rudel-switch subscribing self make-progress-reporter "Subscribing " 0.0 1.0 make-byte-code 257 "\211:\203(\211@\301=\203(\211A\302\300\303\304\305\306\"!\304\305\307\"!\245Z\310\311@\"#\207\211:\2037\302\300\312\310\311@\"#\207\302\300\313\314#\210\315\300!\207" vconcat vector [document-synching progress-reporter-force-update 1.0 float slot-value remaining-bytes all-bytes format "Subscribing (%s) " 0.5 1.0 "Subscribing " progress-reporter-done] 10 "\n\n(fn STATE)" rudel-state-wait (idle) (we-finalized they-finalized disconnected)] 10 "\n\n(fn THIS DOCUMENT)"] rudel-unsubscribe-from ((this rudel-obby-connection) document) #[514 "\300\"\210\301\302\303\"\304\"\305\306\307\310\302\311\"\302\312\"#\313\307\314\302 \315\"\"%\262\262\207" [rudel-remove-context eieio-oref slot-value session :self rudel-send "obby_document" format "%x %x" owner-id :id "unsubscribe" "%x" user-id] 15 "\n\n(fn THIS DOCUMENT)"] rudel-local-insert ((this rudel-obby-connection) document position data) #[1028 "\300\301\302\303\304%#\207" [rudel-local-operation jupiter-insert "insert" :from :data] 13 "\n\n(fn THIS DOCUMENT POSITION DATA)"] rudel-local-delete ((this rudel-obby-connection) document position length) #[1028 "\300\301\302\303\304  \\%#\207" [rudel-local-operation jupiter-delete "delete" :from :to] 14 "\n\n(fn THIS DOCUMENT POSITION LENGTH)"] rudel-local-operation ((this rudel-obby-connection) document operation) #[771 "\300\301\302\"\"\266\303\"\304\305\306\307\310\301\311\"\301 \312\"#\313\307\314\301 \315\"\"\307\314\301\n\316\"\"\317\f!&\266\320\"\207" [rudel-obby-char->byte slot-value buffer rudel-find-context apply rudel-send "obby_document" format "%x %x" owner-id :id "record" "%x" local-revision remote-revision rudel-operation->message jupiter-local-operation] 18 "Handle OPERATION performed on DOCUMENT by sending a message through THIS connection.\n\n(fn THIS DOCUMENT OPERATION)"] rudel-remote-operation ((this rudel-obby-connection) document user remote-revision local-revision operation) #[1542 "\300\"\301$\302\303\304\"\"\266\305#\207" [rudel-find-context jupiter-remote-operation rudel-obby-byte->char slot-value buffer rudel-remote-operation] 14 "Handle OPERATION received through THIS connection performed by USER on DOCUMENT.\n\n(fn THIS DOCUMENT USER REMOTE-REVISION LOCAL-REVISION OPERATION)"] provide rudel-obby-client] 6)