+function send(code, data, opts) {
+ opts = opts || {};
+ const trySend = () => {
+ if (socket.readyState == 1) {
+ socket.send(JSON.stringify(Object.assign({code: code}, data)));
+ if (opts.success)
+ opts.success();
+ return true;
+ }
+ return false;
+ };
+ const firstTry = trySend();
+ if (!firstTry) {
+ if (opts.retry) {
+ // Retry for a few seconds (sending move)
+ let sendAttempt = 1;
+ const retryLoop = setInterval(
+ () => {
+ if (trySend() || ++sendAttempt >= 3)
+ clearInterval(retryLoop);
+ if (sendAttempt >= 3 && opts.error)
+ opts.error();
+ },
+ 1000
+ );
+ }
+ else if (opts.error)
+ opts.error();
+ }
+ return firstTry;
+}
+
+function copyClipboard(msg) {
+ navigator.clipboard.writeText(msg);
+}