feat(core): 在线版添加对web compiler的支持
This commit is contained in:
@@ -128,7 +128,7 @@ class WebSocketArduShell {
|
||||
statusBarSerial.open()
|
||||
.then(() => {
|
||||
const baudRates = code.match(/(?<=Serial.begin[\s]*\([\s]*)[0-9]*(?=[\s]*\))/g);
|
||||
if (!baudRates.length) {
|
||||
if (!baudRates?.length) {
|
||||
return statusBarSerial.setBaudRate(9600);
|
||||
} else {
|
||||
return statusBarSerial.setBaudRate(baudRates[0] - 0);
|
||||
|
||||
@@ -2,21 +2,22 @@ goog.loadJs('web', () => {
|
||||
|
||||
goog.require('Mixly.Debug');
|
||||
goog.require('Mixly.StatusBarsManager');
|
||||
goog.require('Mixly.WebSocket');
|
||||
goog.require('Mixly.Socket');
|
||||
goog.require('Mixly.WebSocket.Serial');
|
||||
goog.require('Mixly.WebSocket.ArduShell');
|
||||
goog.require('Mixly.WebSocket.BU');
|
||||
goog.require('Mixly.WebSocket.Ampy');
|
||||
goog.provide('Mixly.WebSocket.Socket');
|
||||
goog.provide('Mixly.WebSocket.Loader');
|
||||
|
||||
const {
|
||||
Debug,
|
||||
StatusBarsManager,
|
||||
Socket,
|
||||
WebSocket
|
||||
} = Mixly;
|
||||
|
||||
const {
|
||||
Socket,
|
||||
Loader,
|
||||
Serial,
|
||||
ArduShell,
|
||||
BU,
|
||||
@@ -24,8 +25,8 @@ const {
|
||||
} = WebSocket;
|
||||
|
||||
|
||||
Socket.init = function () {
|
||||
const mixlySocket = new WebSocket('wss://127.0.0.1:4000', {
|
||||
Loader.init = function () {
|
||||
const mixlySocket = new Socket(`wss://${location.hostname}:4000/all`, {
|
||||
path: '/mixly-socket/',
|
||||
reconnection: true,
|
||||
reconnectionDelayMax: 10000,
|
||||
@@ -1,91 +1,6 @@
|
||||
goog.loadJs('web', () => {
|
||||
|
||||
goog.require('io');
|
||||
goog.require('Mixly');
|
||||
goog.provide('Mixly.WebSocket');
|
||||
|
||||
|
||||
class WebSocket {
|
||||
#socket_ = null;
|
||||
constructor(path, option) {
|
||||
this.#socket_ = io(path, option);
|
||||
}
|
||||
|
||||
#detectStatus_(status, callback) {
|
||||
window.setTimeout(() => {
|
||||
if (status.finished) {
|
||||
return;
|
||||
}
|
||||
if (this.isConnected()) {
|
||||
this.#detectStatus_(status, callback);
|
||||
} else {
|
||||
callback({
|
||||
error: 'socket is not connected'
|
||||
});
|
||||
status.finished = true;
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
emit(eventName, ...args) {
|
||||
const callback = args.pop();
|
||||
if (this.isConnected()) {
|
||||
let emitStatus = {
|
||||
finished: false
|
||||
};
|
||||
let status = this.#socket_.emit(eventName, ...args, (...callbackArgs) => {
|
||||
if (emitStatus.finished) {
|
||||
return;
|
||||
}
|
||||
emitStatus.finished = true;
|
||||
callback(...callbackArgs);
|
||||
});
|
||||
this.#detectStatus_(emitStatus, callback);
|
||||
return status;
|
||||
} else {
|
||||
callback({
|
||||
error: 'socket is not connected'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
async emitAsync(eventName, ...args) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (this.isConnected()) {
|
||||
const callback = (...callbackArgs) => {
|
||||
if (callbackArgs[0].error) {
|
||||
reject(callbackArgs[0].error);
|
||||
return;
|
||||
}
|
||||
resolve(...callbackArgs);
|
||||
}
|
||||
let emitStatus = {
|
||||
finished: false
|
||||
};
|
||||
let status = this.#socket_.emit(eventName, ...args, (...callbackArgs) => {
|
||||
if (emitStatus.finished) {
|
||||
return;
|
||||
}
|
||||
emitStatus.finished = true;
|
||||
callback(...callbackArgs);
|
||||
});
|
||||
this.#detectStatus_(emitStatus, callback);
|
||||
} else {
|
||||
reject('socket is not connected');
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
getSocket() {
|
||||
return this.#socket_;
|
||||
}
|
||||
|
||||
isConnected() {
|
||||
return this.#socket_?.connected;
|
||||
}
|
||||
}
|
||||
|
||||
Mixly.WebSocket = WebSocket;
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user