;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\306!\210\312\313\314\315!\"\210\312\316\317\315!\"\210\312\320\316\"\210\321\320\322\323#\210\324\315\325\316#\326\315\327\330\331$\207" [require cl-lib warnings eieio jupiter rudel-state-machine rudel-obby rudel-obby-errors rudel-obby-util rudel-obby-state defalias rudel-obby-server-state-new-p eieio-make-class-predicate rudel-obby-server-state-new rudel-obby-server-state-new--eieio-childp eieio-make-child-predicate rudel-obby-server-state-new-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-server-state-new) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-server-connection-state) nil (:documentation "State in which new connections start out." :method-invocation-order :c3)] 6) #@84 Create a new object of class type `rudel-obby-server-state-new'. (fn &rest SLOTS) (defalias 'rudel-obby-server-state-new #[128 "\300\301\302#\207" [apply make-instance rudel-obby-server-state-new] 5 (#$ . 1280)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-server-state-new compiler-macro rudel-obby-server-state-new--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-server-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 (#$ . 1642)]) (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-server-state-new)) #[257 "\301\302\303!#\210\304\207" [rudel-obby-protocol-version rudel-send "obby_welcome" number-to-string encryption-negotiate] 6 "Sends welcome messages to the client and starts the session\ntimeout timer.\n\n(fn THIS)"] defalias rudel-obby-server-state-encryption-negotiate-p eieio-make-class-predicate rudel-obby-server-state-encryption-negotiate rudel-obby-server-state-encryption-negotiate--eieio-childp eieio-make-child-predicate rudel-obby-server-state-encryption-negotiate-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-server-state-encryption-negotiate) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-server-connection-state) (:documentation "Encryption negotiation state." :method-invocation-order :c3)] 6) #@101 Create a new object of class type `rudel-obby-server-state-encryption-negotiate'. (fn &rest SLOTS) (defalias 'rudel-obby-server-state-encryption-negotiate #[128 "\300\301\302#\207" [apply make-instance rudel-obby-server-state-encryption-negotiate] 5 (#$ . 2912)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-server-state-encryption-negotiate compiler-macro rudel-obby-server-state-encryption-negotiate--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-server-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 (#$ . 3359)]) (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\302\331$\207" [cl-generic-define-method rudel-enter nil ((this rudel-obby-server-state-encryption-negotiate)) #[257 "\300\301\302#\210\303\207" [rudel-send "net6_encryption" "0" nil] 5 "Send net6 'encryption' message requesting to not enable encryption.\n\n(fn THIS)"] rudel-obby/net6_encryption_ok ((this rudel-obby-server-state-encryption-negotiate)) #[257 "\300\301\"\210\302\207" [rudel-send "net6_encryption_failed" before-join] 4 "Handle net6 'encryption_ok' message.\nEven if the client requests an encrypted connection, we cancel\nthe negotiation.\n\n(fn THIS)"] rudel-obby/net6_encryption_failed ((_this rudel-obby-server-state-encryption-negotiate)) #[257 "\300\207" [before-join] 2 "Handle net6 'encryption_failed' message.\nNo action has to be taken, since the client simply proceeds after\nfailed encryption negotiation.\n\n(fn THIS)"] defalias rudel-obby-server-state-before-join-p eieio-make-class-predicate rudel-obby-server-state-before-join rudel-obby-server-state-before-join--eieio-childp eieio-make-child-predicate rudel-obby-server-state-before-join-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-server-state-before-join) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-server-connection-state) (:documentation "Waiting for client request joining the session." :method-invocation-order :c3)] 6) #@92 Create a new object of class type `rudel-obby-server-state-before-join'. (fn &rest SLOTS) (defalias 'rudel-obby-server-state-before-join #[128 "\300\301\302#\207" [apply make-instance rudel-obby-server-state-before-join] 5 (#$ . 5209)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-server-state-before-join compiler-macro rudel-obby-server-state-before-join--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-server-state-before-join--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 (#$ . 5611)]) (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-obby/net6_client_login nil ((this rudel-obby-server-state-before-join) username color &optional _global-password _user-password) #[1283 "\300!\301\302\"\303\304\305\"#\211\203#\306\307\310\311\"#\210\312\202t\313\314\315\304\305\"\f\304 \316\"\n\304 \317\"%#\266\320\304\305\"\304\314\"\"\210\304\314\"\321 \322\301\f\302\"D\323\310\311\304 \316\"\"\304\324\"\325\310\311\304\n\326\"\"\327\304\n\330\"!&\266\304\305\"\304\331\"G\304\332\"G\\\306\n\333\310\311\"#\266\304\334\"\211\203\326\211@\211\304\314\"\203\316\304\314\"\306 \323\310\311\304\316\"\"\304\324\"\325\310\311\304 \326\"\"\327\304 \330\"!&\266\210A\266\202\202\230\210\335\336\304\331\"\"\211\211\203(@\301\314\"\337\340\341\342\343\"\344\"\345$\216\313\314#\210\304\314\"\306\346\310\311\304\347\"\"\304\324\"\327\304\330\"!%\266A\262)\266\202\337\266\304\332\"\211\203k\211@\211\350\306 \351\310\311\304\352\"\"\310\311\304\316\"\"\304\324\"\310\311\304\n\353\"\"\354\355\356\304\f\357\"\"& \266A\266\202\202.\266\306\360\"\210\361\262\262\207" [rudel-obby-parse-color eieio-oref :connection rudel-check-username-and-color slot-value server rudel-send "net6_login_failed" format "%x" nil eieio-oset user rudel-make-user :id encryption rudel-add-user rudel-broadcast exclude "net6_client_join" :object-name "0" :user-id rudel-obby-format-color color users documents "obby_sync_init" clients cl-remove-if rudel-connected make-byte-code 0 "\302\300\303\301#\207" vconcat vector [eieio-oset user] 4 "obby_sync_usertable_user" user-id apply "obby_sync_doclist_document" owner-id suffix "UTF-8" mapcar #[257 "\300\301\302!\"\207" [format "%x" rudel-id] 5 "\n\n(fn USER1)"] subscribed "obby_sync_final" idle] 26 "Handle net6 'client_login' message.\n\n(fn THIS USERNAME COLOR &optional GLOBAL-PASSWORD USER-PASSWORD)"] defalias rudel-obby-server-state-idle-p eieio-make-class-predicate rudel-obby-server-state-idle rudel-obby-server-state-idle--eieio-childp eieio-make-child-predicate rudel-obby-server-state-idle-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-server-state-idle) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-obby-server-connection-state rudel-obby-document-handler) ((document-container-slot :initform 'server)) (:documentation "Idle state of a server connection.\n\nThe connection enters this state when all setup work is finished,\nthe client has joined the session and no operation is in\nprogress. In this state, the connection waits for new messages\nfrom the client that initiate operations. Simple (which means\nstateless in this case) operations are performed without leaving\nthe idle state." :method-invocation-order :c3)] 6) #@85 Create a new object of class type `rudel-obby-server-state-idle'. (fn &rest SLOTS) (defalias 'rudel-obby-server-state-idle #[128 "\300\301\302#\207" [apply make-instance rudel-obby-server-state-idle] 5 (#$ . 8833)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-server-state-idle compiler-macro rudel-obby-server-state-idle--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-server-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 (#$ . 9200)]) (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%\207" [cl-generic-define-method rudel-obby/obby_user_colour nil ((this rudel-obby-server-state-idle) color-) #[514 "\300!\301\302\"\303\304\"\211\305\306#\266\307\303\304\"!\210\310\311\301\302\"D\312\313\314\303\315\"\"\316\303\306\"!%\266\317\207" [rudel-obby-parse-color eieio-oref :connection slot-value user eieio-oset color rudel-change-notify rudel-broadcast exclude "obby_user_colour" format "%x" :user-id rudel-obby-format-color nil] 14 "Handle obby 'user_colour' message.\nThis method is called when the connected user requests a change\nof her color to COLOR.\n\n(fn THIS COLOR-)"] rudel-obby/obby_document_create ((this rudel-obby-server-state-idle) doc-id name encoding content) #[1285 "\300\301\"\302\227!\303\304\"\305\306\"\307\310\311 \312Q!!\313\314\315\305\306\"C\316 \317\305 \320\"\321\322& rq\210c\210)\211\323\305\324\"\305\325\"\322U\203Q \202[\326\327 \305\325\"#\330\331$\203p\211\332\325\305\325\"T#\266\202=\333\305\324\"\"\210\305\325\"\322U\204\246\334\f\335\326\336\305 \320\"\f#\337\326\340\305 \320\"\"\326\340\305\n\325\"\"&\210\341\f\342\303\304\"D\343\326\340\305\n\320\"\"\326\340 \"\326\340\305\n\325\"\"\344!\226&\266\345\305\324\"\303 \304\"#\266\346\207" [string-to-number 16 coding-system-from-name eieio-oref :connection slot-value user get-buffer-create generate-new-buffer-name " *" "*" rudel-obby-document :buffer :subscribed :id :owner-id :user-id :suffix 1 rudel-find-document server suffix format "%s<%d>" string= rudel-unique-name eieio-oset rudel-add-document rudel-send "obby_document" "%x %x" "rename" "%x" rudel-broadcast exclude "obby_document_create" symbol-name rudel-add-context nil] 24 "Handle obby 'document_create' message.\n\n(fn THIS DOC-ID NAME ENCODING CONTENT)"] rudel-obby/obby_document/subscribe ((this rudel-obby-server-state-idle) document user-id) #[771 "\300\301\"\302\303\"\304\305\306\"\307\310$\262\305\311\">\203(\312\313\314!\314!#\210\315\"\210r\305\316\"q\210\317\320\321\322\305\323\"\305\324\"#\325\321\326\327d!S\"%\210\330!\211\203\234\211@\211@A\211@A\211@A\211TT{\317\320\321\322\305\323\"\305\324\"#\331\321\326 \203\217\302\f\332\"\202\220\333\"&\266 A\266\202\202R\210)\334\335\320\321\322\305\323\"\305 \324\"#\336\321\326\305 \332\"\"&\266\302\303\"\337\305\306\"\302\303\"#\266\335\207" [string-to-number 16 eieio-oref :connection rudel-find-user slot-value server = rudel-id subscribed error "User `%s' already subscribed to document `%s'" object-name rudel-add-user buffer rudel-send "obby_document" format "%x %x" owner-id :id "sync_init" "%x" position-bytes rudel-chunks "sync_chunk" :user-id 0 rudel-broadcast nil "subscribe" rudel-add-context] 29 "Handle 'subscribe' submessage of obby 'document' message.\n\n(fn THIS DOCUMENT USER-ID)"] rudel-obby/obby_document/unsubscribe ((this rudel-obby-server-state-idle) document user-id) #[771 "\300\301\"\302\303\"\304\305\306\"\307\310$\262\305\311\">\204(\312\313\314!\314!#\210\315\"\210\316\317\320\321\322\305\323\"\305 \324\"#\325\321\326\305 \327\"\"&\266\302\303\"\330\305\306\"\302\303\"#\266\317\207" [string-to-number 16 eieio-oref :connection rudel-find-user slot-value server = rudel-id subscribed error "User `%s' not subscribed to document `%s'" object-name rudel-remove-user rudel-broadcast nil "obby_document" format "%x %x" owner-id :id "unsubscribe" "%x" :user-id rudel-remove-context] 18 "Handle 'unsubscribe' submessage of 'obby_document' message.\n\n(fn THIS DOCUMENT USER-ID)"] rudel-obby/obby_document/record ((this rudel-obby-server-state-idle) document local-revision remote-revision action &rest arguments) #[1413 "\300\301\"\300\301\"\302\303\304 E\"$\207" [string-to-number 16 rudel-dispatch "rudel-obby/obby_document/record/" append] 16 "Handle 'record' submessages of 'obby_document' message.\n\n(fn THIS DOCUMENT LOCAL-REVISION REMOTE-REVISION ACTION &rest ARGUMENTS)"] rudel-obby/obby_document/record/ins ((this rudel-obby-server-state-idle) document local-revision remote-revision position data) #[1542 "\300\301\"\302\303\304\"\305\306\307  #\310\311 %%\210\312\207" [string-to-number 16 rudel-remote-operation eieio-oref :connection jupiter-insert format "insert-%d-%d" :from :data nil] 18 "Handle 'ins' submessage of 'record' submessages of 'obby_document' message.\n\n(fn THIS DOCUMENT LOCAL-REVISION REMOTE-REVISION POSITION DATA)"] rudel-obby/obby_document/record/del ((this rudel-obby-server-state-idle) document local-revision remote-revision position length) #[1542 "\300\301\"\300\301\"\302\303 \304\" \305\306\307\f#\310 \311  \\%%\210\312\207" [string-to-number 16 rudel-remote-operation eieio-oref :connection jupiter-delete format "delete-%d-%d" :from :to nil] 20 "Handle 'del' submessage of 'record' submessages of 'obby_document' message.\n\n(fn THIS DOCUMENT LOCAL-REVISION REMOTE-REVISION POSITION LENGTH)"]] 6) #@48 Name symbols and classes of connection states. (defvar rudel-obby-server-connection-states '((new . rudel-obby-server-state-new) (encryption-negotiate . rudel-obby-server-state-encryption-negotiate) (before-join . rudel-obby-server-state-before-join) (idle . rudel-obby-server-state-idle)) (#$ . 14669)) (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$\210\320\321\322\323\322\324%\210\320\325\322\326\322\327%\207" [defalias rudel-obby-client-p eieio-make-class-predicate rudel-obby-client rudel-obby-client--eieio-childp eieio-make-child-predicate rudel-obby-client-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-client) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-state-machine) ((transport :initarg :transport :type rudel-transport :documentation "The transport object through which this\nconnection sends and receives its data.") (server :initarg :server :type rudel-obby-server :documentation #1="") (id :initarg :id :type integer :accessor rudel-id :documentation #1#) (user :initarg :user :type (or rudel-obby-user null) :initform nil :documentation #1#) (encryption :initarg :encryption :type boolean :documentation #1#)) (:documentation "Each object of this class represents one client, that is\nconnected to the server. This object handles all direct\ncommunication with the client, while broadcast messages are\nhandled by the server.") cl-generic-define-method rudel-id nil ((this rudel-obby-client)) #[257 "\300\301\"\205 \302\301\"\207" [slot-boundp id eieio-oref] 4 "Retrieve the slot `id' from an object of class `rudel-obby-client'.\n\n(fn THIS)"] \(setf\ rudel-id\) (value (this rudel-obby-client)) #[514 "\300\301#\207" [eieio-oset id] 6 "\n\n(fn VALUE THIS)"]] 7) #@74 Create a new object of class type `rudel-obby-client'. (fn &rest SLOTS) (defalias 'rudel-obby-client #[128 "\300\301\302#\207" [apply make-instance rudel-obby-client] 5 (#$ . 16504)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-client compiler-macro rudel-obby-client--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-client--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 (#$ . 16817)]) (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\302\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\333\334\335\336!\"\210\333\337\340\336!\"\210\333\341\337\"\210\342\341\343\344#\210\345\336\346\337#\347\336\350\351\352$\207" [cl-generic-define-method initialize-instance nil ((this rudel-obby-client) _slots) t #[771 " \210\301\"\210\211\302\303\304\305\303\"!#\266\306\305\303\"\307\310\311\312\313 !\314\"\315\316%\"\210\317\305\303\"\307\310\320\312\313 !\321\"\322\323%\"\207" [rudel-obby-server-connection-states rudel-register-states eieio-oset 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 "Initialize slots of THIS, register states and install filter.\n\n(fn CL--CNM THIS SLOTS)"] rudel-register-state ((this rudel-obby-client) _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-end ((this rudel-obby-client)) #[257 "\300!\207" [rudel-disconnect] 3 "\n\n(fn THIS)"] rudel-close ((this rudel-obby-client)) #[257 "\211\300\301\302\"\"\207" [rudel-remove-client slot-value server] 6 "\n\n(fn THIS)"] rudel-send ((this rudel-obby-client) &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-broadcast ((this rudel-obby-client) receivers name &rest args) #[899 "\300\301\302\303\"%\207" [apply rudel-broadcast slot-value server] 11 "Broadcast message NAME with arguments ARGS to RECEIVERS.\n\n(fn THIS RECEIVERS NAME &rest ARGS)"] rudel-remote-operation ((this rudel-obby-client) document local-revision remote-revision operation) #[1285 "\300\301\302\"#\303$\304\"\301\305\"\211\203r\211@\300\301 \302\"#\211\306\307\310\311\312\301 \313\"\301\f\314\"#\315\311\316\301\317\"\"\311\316\301\n\320\"\"\311\316\301 \321\"\"\322!& \266\323\"\266A\266\202\202!\266\324\301\325\"\"\266\326\301\305\"#\266\203\207" [rudel-find-context slot-value server jupiter-remote-operation rudel-subscribed-clients-not-self user apply rudel-send "obby_document" format "%x %x" owner-id :id "record" "%x" user-id local-revision remote-revision rudel-operation->message jupiter-local-operation rudel-obby-byte->char buffer rudel-remote-operation] 28 "Execute and relay OPERATION on DOCUMENT.\n\n(fn THIS DOCUMENT LOCAL-REVISION REMOTE-REVISION OPERATION)"] rudel-subscribed-clients-not-self ((this rudel-obby-client) document) #[514 "\300\301\"\302\303\304\305\306\307 \"\310\"\311\312%\313\314\"\"\262\207" [eieio-oref :server cl-remove-if make-byte-code 257 "\211\300=\206\302\303\"\302\301\304\">?\207" vconcat vector [slot-value user subscribed] 6 "\n\n(fn CLIENT)" slot-value clients] 12 "Return a list of clients subscribed to DOCUMENT excluding THIS.\n\n(fn THIS DOCUMENT)"] defalias rudel-obby-server-p eieio-make-class-predicate rudel-obby-server rudel-obby-server--eieio-childp eieio-make-child-predicate rudel-obby-server-child-p make-obsolete "use (cl-typep ... \\='rudel-obby-server) instead" "25.1" define-symbol-prop cl-deftype-satisfies eieio-defclass-internal (rudel-server-session) ((listener :initarg :listener :type rudel-listener :documentation "The listener object that dispatches incoming\nconnections to this server.") (clients :initarg :clients :type list :initform nil :documentation "List of objects representing clients\nconnected to the server.") (next-client-id :initarg :next-client-id :type (integer 1) :initform 1 :documentation "An id that will be assigned to the next\nclient that connects to the server.") (next-user-id :initarg :next-user-id :type (integer 1) :initform 1 :documentation "An id that will be assigned to the next user\nthat joins the associated session.") (contexts :initarg :contexts :type hash-table :documentation "A hash table associating documents to jupiter\ntransformation context objects.")) (:documentation "Class rudel-obby-server ")] 6) #@74 Create a new object of class type `rudel-obby-server'. (fn &rest SLOTS) (defalias 'rudel-obby-server #[128 "\300\301\302#\207" [apply make-instance rudel-obby-server] 5 (#$ . 21406)]) (byte-code "\300\301\302\303#\300\207" [function-put rudel-obby-server compiler-macro rudel-obby-server--anon-cmacro] 4) #@26 (fn WHOLE &rest SLOTS) (defalias 'rudel-obby-server--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 (#$ . 21719)]) (byte-code "\300\301\302\303\304\305%\210\300\306\302\307\302\310%\210\300\311\302\312\302\313%\210\300\314\302\315\302\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%\207" [cl-generic-define-method initialize-instance nil ((this rudel-obby-server) _slots) t #[771 " \210\211\300\301\302\303\304\"#\266\305\306\307\"\310\311\312\313\314 !\315\"\316\317%\"\207" [eieio-oset contexts make-hash-table :test equal rudel-set-dispatcher slot-value listener make-byte-code 257 "\301\300\"\207" vconcat vector [rudel-add-client] 4 "\n\n(fn CLIENT-TRANSPORT)"] 12 "Initialize slots of THIS and install a dispatch function.\n\n(fn CL--CNM THIS SLOTS)"] rudel-end ((this rudel-obby-server)) #[257 "\300!\207" [rudel-disconnect] 3 "\n\n(fn THIS)"] rudel-broadcast ((this rudel-obby-server) receivers name &rest arguments) #[899 "\204 \300\301\"\202H<\203\302@!\203\202H<\2037@\303=\2037\304\305\306\"A\307\310$\262\202H\302!\203BC\202H\311\312\313!\"\211\211\205_\211@\314\315$\210A\266\202\202I\262\207" [eieio-oref :clients rudel-obby-client-child-p exclude cl-set-difference slot-value clients :key rudel-id signal wrong-type-argument type-of apply rudel-send] 12 "Send a message of type NAME with arguments ARGUMENTS to RECEIVERS.\n\nRECEIVERS can be a object derived from rudel-obby-client, a list\nof such objects or a list with car 'exclude and cdr a list of\nsuch objects derived from rudel-obby-client.\n\n(fn THIS RECEIVERS NAME &rest ARGUMENTS)"] rudel-make-user ((this rudel-obby-server) name client-id color encryption) #[1285 "\300\301\302\303\304\305\"\306\307\310\f& \311\305\304\305\"T#\266\211\262\207" [rudel-obby-user :color :client-id :user-id slot-value next-user-id :connected t :encryption eieio-oset] 18 "\n\n(fn THIS NAME CLIENT-ID COLOR ENCRYPTION)"] rudel-check-username-and-color ((this rudel-obby-server) username color) #[771 "\304\230\203\207\305\306\307$\203 \207\310!\204\n\207\305\311\312$\205% \207" [rudel-obby-error-username-invalid rudel-obby-error-username-in-use rudel-obby-error-color-invalid rudel-obby-error-color-in-use "" rudel-find-user string= object-name-string color-values #[514 "\300\"\301W\207" [color-distance 20000] 5 "\n\n(fn LEFT RIGHT)"] rudel-color] 8 "Check whether USERNAME and COLOR are valid.\nUSERNAME must not be empty and must not be used by another\nuser. COLOR has to be sufficiently different from used colors.\n\n(fn THIS USERNAME COLOR)"] rudel-add-client ((this rudel-obby-server) client-transport) #[514 "\300\301!\302\303\304\305\306\"\307\310& \311\312\305\312\"B#\266\211\311\306\305\306\"T#\262\207" [rudel-obby-client object-name :server :transport :id slot-value next-client-id :encryption nil eieio-oset clients] 13 "\n\n(fn THIS CLIENT-TRANSPORT)"] rudel-remove-client ((this rudel-obby-server) client) #[514 "\211\300\301D\302\303\304\305\306\"\"$\210\305\307\"\203,\305\307\"\211\310\311\312#\266\313\305\307\"\314\"\210\210\315\316#\207" [rudel-broadcast exclude "net6_client_part" format "%x" slot-value :id user eieio-oset connected nil object-run-hook-with-args change-hook object-remove-from-list :clients] 12 "\n\n(fn THIS CLIENT)"] rudel-find-context ((this rudel-obby-server) client document) #[771 "\300\301\"\302\303\"\"\207" [gethash rudel-obby-context-key slot-value contexts] 9 "Return the jupiter context associated to (CLIENT DOCUMENT) in THIS.\n\n(fn THIS CLIENT DOCUMENT)"] rudel-add-context ((this rudel-obby-server) client document) #[771 "\300\301\"\302\303\304\305\306\"\305\307\"#!\305\310\"#\262\262\207" [puthash rudel-obby-context-key jupiter-context format "%d-%s" slot-value :id :object-name contexts] 15 "Add a jupiter context for (CLIENT DOCUMENT) to THIS.\n\n(fn THIS CLIENT DOCUMENT)"] rudel-remove-context ((this rudel-obby-server) client document) #[771 "\300\301\"\302\303\"\"\207" [remhash rudel-obby-context-key slot-value contexts] 9 "Remove the jupiter context associated to (CLIENT DOCUMENT) from THIS.\n\n(fn THIS CLIENT DOCUMENT)"]] 6) #@71 Generate hash key based on CLIENT and DOCUMENT. (fn CLIENT DOCUMENT) (defalias 'rudel-obby-context-key #[514 "\300\301\"\300\301\"D\262\207" [slot-value :id] 8 (#$ . 26160)]) (byte-code "\300\301\302\303\304\305%\210\306\307!\207" [cl-generic-define-method object-print nil ((this rudel-obby-server) &rest strings) t #[642 "\300\301\302\303\304\"G\"$\207" [apply format " clients: %d" slot-value clients] 12 "Print THIS with number of clients.\n\n(fn THIS &rest STRINGS)"] provide rudel-obby-server] 6)