Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4028e33529 | ||
|
|
ec94a92a5f | ||
|
|
379a5243fe | ||
|
|
47765dde23 | ||
|
|
d48d72cb79 | ||
|
|
31518e9754 | ||
|
|
1e0d330778 | ||
|
|
ef6369d62f | ||
|
|
5b0d11e470 |
44
.travis.yml
44
.travis.yml
@@ -1,33 +1,33 @@
|
|||||||
language: node_js
|
language: node_js
|
||||||
node_js:
|
node_js:
|
||||||
- 8.9.3
|
- 8.9.3
|
||||||
filter_secrets: false
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: linux
|
- os: linux
|
||||||
dist: ubuntu
|
dist: ubuntu
|
||||||
- os: osx
|
- os: osx
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libxkbfile-dev libsecret-1-dev;
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install libxkbfile-dev
|
||||||
fi
|
libsecret-1-dev; fi
|
||||||
script:
|
script:
|
||||||
- scripts/build.sh
|
- scripts/build.sh
|
||||||
# before_deploy:
|
before_deploy:
|
||||||
# - export TRAVIS_TAG="1.0.$TRAVIS_BUILD_NUMBER"
|
- export TRAVIS_TAG="1.31.0-$TRAVIS_BUILD_NUMBER"
|
||||||
# - echo "$TRAVIS_TAG" "$TRAVIS_COMMIT"
|
- echo "$TRAVIS_TAG" "$TRAVIS_COMMIT"
|
||||||
# - git config --local user.name "$USER_NAME"
|
- git config --local user.name "$USER_NAME"
|
||||||
# - git config --local user.email "$USER_EMAIL"
|
- git config --local user.email "$USER_EMAIL"
|
||||||
# - git tag "$TRAVIS_TAG" "$TRAVIS_COMMIT"
|
- git tag "$TRAVIS_TAG" "$TRAVIS_COMMIT"
|
||||||
# deploy:
|
deploy:
|
||||||
# provider: releases
|
provider: releases
|
||||||
# tag_name: $TRAVIS_TAG
|
file_glob: true
|
||||||
# target_commitish: $TRAVIS_COMMIT
|
draft: true
|
||||||
# name: $TRAVIS_TAG
|
tag_name: $TRAVIS_TAG
|
||||||
# skip_cleanup: true
|
target_commitish: $TRAVIS_COMMIT
|
||||||
# api_key:
|
name: $TRAVIS_TAG
|
||||||
# secure: T/yqCIeqLifteriv8D3CnehNFzSBP309GZqeUfyx8Q+xSQEttA9Enxl+Qw9GkdedYTN4J56iucHIac6CwcvKSKIXqk80CeSEW0BNxZs5wIgv4rRMMy/GAX0NBWKNOkoGlH8M6VyQcM7eY2iGAn1EX755PHalk6rWwfsauRANOQyb2DXQBan5C0YUnogq2qcW1xkIwlXH7l0Ekbtego0f6QPv0rSyOcL1LKm6xk0Aq+xLNKJkT6TSL6xYpkPlZLjnql09Nspkqs6NehWlft2n09bHqAtjNnWw9OYCvxp8mdHeTE5uShuEqYPzdYU5LVFoE7wElI8uqS66noaA18ytZYGw2IrY6GZcn+wtR6WyM2+YXl2HclL1/Fs6Vn8+zwq2IBZchBNv3KJSn1dxiqLlD/s6YQyni17x/9FhtFoNUvsbY5zSC1xrnNQBQWFg0TRnoC9rPR+7hQtT1+5+CvRxpvcNWnPuA22919PFE79ejJulPmsnyF+YLs9c6APJgOpOO1f6fKt5Mcb02dubPqGcQ9NbqUUNTl4IUvEtjG0LnFAgEGerxAcsdnUTxzBVf0LJLlhRKW1BigUTbRwfUJL1DN0mWg9cg7fL5VqrogvNq3uRguxOsYr+bcHDbimQSAY3No3fAkTTqQSJh56Dx57/Un18KxuOTiRB9de1RtiudsI=
|
skip_cleanup: true
|
||||||
# file_glob: true
|
api_key:
|
||||||
# file: packages/server/cli-*
|
secure: YL/x24KjYjgYXPcJWk3FV7FGxI79Mh6gBECQEcdlf3fkLEoKFVgzHBoUNWrFPzyR4tgLyWNAgcpD9Lkme1TRWTom7UPjXcwMNyLcLa+uec7ciSAnYD9ntLTpiCuPDD1u0LtRGclSi/EHQ+F8YVq+HZJpXTsJeAmOmihma3GVbGKSZr+BRum+0YZSG4w+o4TOlYzw/4bLWS52MogZcwpjd+hemBbgXLuGU2ziKv2vEKCZFbEeA16II4x1WLI4mutDdCeh7+3aLzGLwDa49NxtsVYNjyNFF75JhCTCNA55e2YMiLz9Uq69IXe/mi5F7xUaFfhIqqLNyKBnKeEOzu3dYnc+8n3LjnQ+00PmkF05nx9kBn3UfV1kwQGh6QbyDmTtBP07rtUMyI14aeQqHjxsaVRdMnwj9Q2DjXRr8UDqESZF0rmK3pHCXS2fBhIzLE8tLVW5Heiba2pQRFMHMZW+KBE97FzcFh7is90Ait3T8enfcd/PWFPYoBejDAdjwxwOkezh5N5ZkYquEfDYuWrFi6zRFCktsruaAcA+xGtTf9oilBBzUqu8Ie+YFWH5me83xakcblJWdaW/D2rLJAJH3m6LFm8lBqyUgDX5t/etob6CpDuYHu5D1J3XINOj/+aLAcadq6qlh70PMZS3zYffUu3JlzaD2amlSHIT8b5YXFc=
|
||||||
# on:
|
file: packages/server/cli-*
|
||||||
# repo: codercom/code-server
|
on:
|
||||||
# branch: master
|
repo: codercom/code-server
|
||||||
|
branch: master
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
code-server <inital directory to open>
|
code-server <inital directory to open>
|
||||||
```
|
```
|
||||||
> You will be prompted to enter the password shown in the CLI
|
> You will be prompted to enter the password shown in the CLI
|
||||||
`code-server` should now be running at https://<IP>:8443.
|
`code-server` should now be running at https://localhost:8443.
|
||||||
|
|
||||||
> code-server uses a self-signed SSL certificate that may prompt your browser to ask you some additional questions before you proceed. Please [read here](doc/self-hosted/index.md) for more information.
|
> code-server uses a self-signed SSL certificate that may prompt your browser to ask you some additional questions before you proceed. Please [read here](doc/self-hosted/index.md) for more information.
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { EventEmitter } from "events";
|
import { EventEmitter } from "events";
|
||||||
import { Emitter } from "@coder/events";
|
import { Emitter } from "@coder/events";
|
||||||
import { logger, field } from "@coder/logger";
|
import { logger, field } from "@coder/logger";
|
||||||
import { NewEvalMessage, ServerMessage, EvalDoneMessage, EvalFailedMessage, ClientMessage, WorkingInitMessage, EvalEventMessage } from "../proto";
|
import { Ping, NewEvalMessage, ServerMessage, EvalDoneMessage, EvalFailedMessage, ClientMessage, WorkingInitMessage, EvalEventMessage } from "../proto";
|
||||||
import { ReadWriteConnection, InitData, OperatingSystem, SharedProcessData } from "../common/connection";
|
import { ReadWriteConnection, InitData, OperatingSystem, SharedProcessData } from "../common/connection";
|
||||||
import { ActiveEvalHelper, EvalHelper, Disposer, ServerActiveEvalHelper } from "../common/helpers";
|
import { ActiveEvalHelper, EvalHelper, Disposer, ServerActiveEvalHelper } from "../common/helpers";
|
||||||
import { stringify, parse } from "../common/util";
|
import { stringify, parse } from "../common/util";
|
||||||
@@ -22,6 +22,11 @@ export class Client {
|
|||||||
private readonly sharedProcessActiveEmitter = new Emitter<SharedProcessData>();
|
private readonly sharedProcessActiveEmitter = new Emitter<SharedProcessData>();
|
||||||
public readonly onSharedProcessActive = this.sharedProcessActiveEmitter.event;
|
public readonly onSharedProcessActive = this.sharedProcessActiveEmitter.event;
|
||||||
|
|
||||||
|
// The socket timeout is 60s, so we need to send a ping periodically to
|
||||||
|
// prevent it from closing.
|
||||||
|
private pingTimeout: NodeJS.Timer | number | undefined;
|
||||||
|
private readonly pingTimeoutDelay = 30000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param connection Established connection to the server
|
* @param connection Established connection to the server
|
||||||
*/
|
*/
|
||||||
@@ -43,9 +48,16 @@ export class Client {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
connection.onClose(() => {
|
||||||
|
clearTimeout(this.pingTimeout as any); // tslint:disable-line no-any
|
||||||
|
this.pingTimeout = undefined;
|
||||||
|
});
|
||||||
|
|
||||||
this.initDataPromise = new Promise((resolve): void => {
|
this.initDataPromise = new Promise((resolve): void => {
|
||||||
this.initDataEmitter.event(resolve);
|
this.initDataEmitter.event(resolve);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.startPinging();
|
||||||
}
|
}
|
||||||
|
|
||||||
public dispose(): void {
|
public dispose(): void {
|
||||||
@@ -214,6 +226,28 @@ export class Client {
|
|||||||
socketPath: sharedProcessActiveMessage.getSocketPath(),
|
socketPath: sharedProcessActiveMessage.getSocketPath(),
|
||||||
logPath: sharedProcessActiveMessage.getLogPath(),
|
logPath: sharedProcessActiveMessage.getLogPath(),
|
||||||
});
|
});
|
||||||
|
} else if (message.hasPong()) {
|
||||||
|
// Nothing to do since we run the pings on a timer, in case either message
|
||||||
|
// is dropped which would break the ping cycle.
|
||||||
|
} else {
|
||||||
|
throw new Error("unknown message type");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private startPinging = (): void => {
|
||||||
|
if (typeof this.pingTimeout !== "undefined") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const schedulePing = (): void => {
|
||||||
|
this.pingTimeout = setTimeout(() => {
|
||||||
|
const clientMsg = new ClientMessage();
|
||||||
|
clientMsg.setPing(new Ping());
|
||||||
|
this.connection.send(clientMsg.serializeBinary());
|
||||||
|
schedulePing();
|
||||||
|
}, this.pingTimeoutDelay);
|
||||||
|
};
|
||||||
|
|
||||||
|
schedulePing();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import * as path from "path";
|
|||||||
import { mkdir } from "fs";
|
import { mkdir } from "fs";
|
||||||
import { promisify } from "util";
|
import { promisify } from "util";
|
||||||
import { logger, field } from "@coder/logger";
|
import { logger, field } from "@coder/logger";
|
||||||
import { ClientMessage, WorkingInitMessage, ServerMessage } from "../proto";
|
import { Pong, ClientMessage, WorkingInitMessage, ServerMessage } from "../proto";
|
||||||
import { evaluate, ActiveEvaluation } from "./evaluate";
|
import { evaluate, ActiveEvaluation } from "./evaluate";
|
||||||
import { ForkProvider } from "../common/helpers";
|
import { ForkProvider } from "../common/helpers";
|
||||||
import { ReadWriteConnection } from "../common/connection";
|
import { ReadWriteConnection } from "../common/connection";
|
||||||
@@ -116,6 +116,11 @@ export class Server {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
e.onEvent(evalEventMessage);
|
e.onEvent(evalEventMessage);
|
||||||
|
} else if (message.hasPing()) {
|
||||||
|
logger.trace("ping");
|
||||||
|
const srvMsg = new ServerMessage();
|
||||||
|
srvMsg.setPong(new Pong());
|
||||||
|
this.connection.send(srvMsg.serializeBinary());
|
||||||
} else {
|
} else {
|
||||||
throw new Error("unknown message type");
|
throw new Error("unknown message type");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ message ClientMessage {
|
|||||||
// node.proto
|
// node.proto
|
||||||
NewEvalMessage new_eval = 11;
|
NewEvalMessage new_eval = 11;
|
||||||
EvalEventMessage eval_event = 12;
|
EvalEventMessage eval_event = 12;
|
||||||
|
|
||||||
|
Ping ping = 13;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,6 +23,8 @@ message ServerMessage {
|
|||||||
|
|
||||||
// vscode.proto
|
// vscode.proto
|
||||||
SharedProcessActiveMessage shared_process_active = 17;
|
SharedProcessActiveMessage shared_process_active = 17;
|
||||||
|
|
||||||
|
Pong pong = 18;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
packages/protocol/src/proto/client_pb.d.ts
vendored
14
packages/protocol/src/proto/client_pb.d.ts
vendored
@@ -16,6 +16,11 @@ export class ClientMessage extends jspb.Message {
|
|||||||
getEvalEvent(): node_pb.EvalEventMessage | undefined;
|
getEvalEvent(): node_pb.EvalEventMessage | undefined;
|
||||||
setEvalEvent(value?: node_pb.EvalEventMessage): void;
|
setEvalEvent(value?: node_pb.EvalEventMessage): void;
|
||||||
|
|
||||||
|
hasPing(): boolean;
|
||||||
|
clearPing(): void;
|
||||||
|
getPing(): node_pb.Ping | undefined;
|
||||||
|
setPing(value?: node_pb.Ping): void;
|
||||||
|
|
||||||
getMsgCase(): ClientMessage.MsgCase;
|
getMsgCase(): ClientMessage.MsgCase;
|
||||||
serializeBinary(): Uint8Array;
|
serializeBinary(): Uint8Array;
|
||||||
toObject(includeInstance?: boolean): ClientMessage.AsObject;
|
toObject(includeInstance?: boolean): ClientMessage.AsObject;
|
||||||
@@ -31,12 +36,14 @@ export namespace ClientMessage {
|
|||||||
export type AsObject = {
|
export type AsObject = {
|
||||||
newEval?: node_pb.NewEvalMessage.AsObject,
|
newEval?: node_pb.NewEvalMessage.AsObject,
|
||||||
evalEvent?: node_pb.EvalEventMessage.AsObject,
|
evalEvent?: node_pb.EvalEventMessage.AsObject,
|
||||||
|
ping?: node_pb.Ping.AsObject,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum MsgCase {
|
export enum MsgCase {
|
||||||
MSG_NOT_SET = 0,
|
MSG_NOT_SET = 0,
|
||||||
NEW_EVAL = 11,
|
NEW_EVAL = 11,
|
||||||
EVAL_EVENT = 12,
|
EVAL_EVENT = 12,
|
||||||
|
PING = 13,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,6 +73,11 @@ export class ServerMessage extends jspb.Message {
|
|||||||
getSharedProcessActive(): vscode_pb.SharedProcessActiveMessage | undefined;
|
getSharedProcessActive(): vscode_pb.SharedProcessActiveMessage | undefined;
|
||||||
setSharedProcessActive(value?: vscode_pb.SharedProcessActiveMessage): void;
|
setSharedProcessActive(value?: vscode_pb.SharedProcessActiveMessage): void;
|
||||||
|
|
||||||
|
hasPong(): boolean;
|
||||||
|
clearPong(): void;
|
||||||
|
getPong(): node_pb.Pong | undefined;
|
||||||
|
setPong(value?: node_pb.Pong): void;
|
||||||
|
|
||||||
getMsgCase(): ServerMessage.MsgCase;
|
getMsgCase(): ServerMessage.MsgCase;
|
||||||
serializeBinary(): Uint8Array;
|
serializeBinary(): Uint8Array;
|
||||||
toObject(includeInstance?: boolean): ServerMessage.AsObject;
|
toObject(includeInstance?: boolean): ServerMessage.AsObject;
|
||||||
@@ -84,6 +96,7 @@ export namespace ServerMessage {
|
|||||||
evalEvent?: node_pb.EvalEventMessage.AsObject,
|
evalEvent?: node_pb.EvalEventMessage.AsObject,
|
||||||
init?: WorkingInitMessage.AsObject,
|
init?: WorkingInitMessage.AsObject,
|
||||||
sharedProcessActive?: vscode_pb.SharedProcessActiveMessage.AsObject,
|
sharedProcessActive?: vscode_pb.SharedProcessActiveMessage.AsObject,
|
||||||
|
pong?: node_pb.Pong.AsObject,
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum MsgCase {
|
export enum MsgCase {
|
||||||
@@ -93,6 +106,7 @@ export namespace ServerMessage {
|
|||||||
EVAL_EVENT = 15,
|
EVAL_EVENT = 15,
|
||||||
INIT = 16,
|
INIT = 16,
|
||||||
SHARED_PROCESS_ACTIVE = 17,
|
SHARED_PROCESS_ACTIVE = 17,
|
||||||
|
PONG = 18,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ if (goog.DEBUG && !COMPILED) {
|
|||||||
* @private {!Array<!Array<number>>}
|
* @private {!Array<!Array<number>>}
|
||||||
* @const
|
* @const
|
||||||
*/
|
*/
|
||||||
proto.ClientMessage.oneofGroups_ = [[11,12]];
|
proto.ClientMessage.oneofGroups_ = [[11,12,13]];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @enum {number}
|
* @enum {number}
|
||||||
@@ -51,7 +51,8 @@ proto.ClientMessage.oneofGroups_ = [[11,12]];
|
|||||||
proto.ClientMessage.MsgCase = {
|
proto.ClientMessage.MsgCase = {
|
||||||
MSG_NOT_SET: 0,
|
MSG_NOT_SET: 0,
|
||||||
NEW_EVAL: 11,
|
NEW_EVAL: 11,
|
||||||
EVAL_EVENT: 12
|
EVAL_EVENT: 12,
|
||||||
|
PING: 13
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,7 +92,8 @@ proto.ClientMessage.prototype.toObject = function(opt_includeInstance) {
|
|||||||
proto.ClientMessage.toObject = function(includeInstance, msg) {
|
proto.ClientMessage.toObject = function(includeInstance, msg) {
|
||||||
var f, obj = {
|
var f, obj = {
|
||||||
newEval: (f = msg.getNewEval()) && node_pb.NewEvalMessage.toObject(includeInstance, f),
|
newEval: (f = msg.getNewEval()) && node_pb.NewEvalMessage.toObject(includeInstance, f),
|
||||||
evalEvent: (f = msg.getEvalEvent()) && node_pb.EvalEventMessage.toObject(includeInstance, f)
|
evalEvent: (f = msg.getEvalEvent()) && node_pb.EvalEventMessage.toObject(includeInstance, f),
|
||||||
|
ping: (f = msg.getPing()) && node_pb.Ping.toObject(includeInstance, f)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (includeInstance) {
|
if (includeInstance) {
|
||||||
@@ -138,6 +140,11 @@ proto.ClientMessage.deserializeBinaryFromReader = function(msg, reader) {
|
|||||||
reader.readMessage(value,node_pb.EvalEventMessage.deserializeBinaryFromReader);
|
reader.readMessage(value,node_pb.EvalEventMessage.deserializeBinaryFromReader);
|
||||||
msg.setEvalEvent(value);
|
msg.setEvalEvent(value);
|
||||||
break;
|
break;
|
||||||
|
case 13:
|
||||||
|
var value = new node_pb.Ping;
|
||||||
|
reader.readMessage(value,node_pb.Ping.deserializeBinaryFromReader);
|
||||||
|
msg.setPing(value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
reader.skipField();
|
reader.skipField();
|
||||||
break;
|
break;
|
||||||
@@ -183,6 +190,14 @@ proto.ClientMessage.serializeBinaryToWriter = function(message, writer) {
|
|||||||
node_pb.EvalEventMessage.serializeBinaryToWriter
|
node_pb.EvalEventMessage.serializeBinaryToWriter
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
f = message.getPing();
|
||||||
|
if (f != null) {
|
||||||
|
writer.writeMessage(
|
||||||
|
13,
|
||||||
|
f,
|
||||||
|
node_pb.Ping.serializeBinaryToWriter
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -246,6 +261,36 @@ proto.ClientMessage.prototype.hasEvalEvent = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional Ping ping = 13;
|
||||||
|
* @return {?proto.Ping}
|
||||||
|
*/
|
||||||
|
proto.ClientMessage.prototype.getPing = function() {
|
||||||
|
return /** @type{?proto.Ping} */ (
|
||||||
|
jspb.Message.getWrapperField(this, node_pb.Ping, 13));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** @param {?proto.Ping|undefined} value */
|
||||||
|
proto.ClientMessage.prototype.setPing = function(value) {
|
||||||
|
jspb.Message.setOneofWrapperField(this, 13, proto.ClientMessage.oneofGroups_[0], value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
proto.ClientMessage.prototype.clearPing = function() {
|
||||||
|
this.setPing(undefined);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this field is set.
|
||||||
|
* @return {!boolean}
|
||||||
|
*/
|
||||||
|
proto.ClientMessage.prototype.hasPing = function() {
|
||||||
|
return jspb.Message.getField(this, 13) != null;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generated by JsPbCodeGenerator.
|
* Generated by JsPbCodeGenerator.
|
||||||
@@ -272,7 +317,7 @@ if (goog.DEBUG && !COMPILED) {
|
|||||||
* @private {!Array<!Array<number>>}
|
* @private {!Array<!Array<number>>}
|
||||||
* @const
|
* @const
|
||||||
*/
|
*/
|
||||||
proto.ServerMessage.oneofGroups_ = [[13,14,15,16,17]];
|
proto.ServerMessage.oneofGroups_ = [[13,14,15,16,17,18]];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @enum {number}
|
* @enum {number}
|
||||||
@@ -283,7 +328,8 @@ proto.ServerMessage.MsgCase = {
|
|||||||
EVAL_DONE: 14,
|
EVAL_DONE: 14,
|
||||||
EVAL_EVENT: 15,
|
EVAL_EVENT: 15,
|
||||||
INIT: 16,
|
INIT: 16,
|
||||||
SHARED_PROCESS_ACTIVE: 17
|
SHARED_PROCESS_ACTIVE: 17,
|
||||||
|
PONG: 18
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -326,7 +372,8 @@ proto.ServerMessage.toObject = function(includeInstance, msg) {
|
|||||||
evalDone: (f = msg.getEvalDone()) && node_pb.EvalDoneMessage.toObject(includeInstance, f),
|
evalDone: (f = msg.getEvalDone()) && node_pb.EvalDoneMessage.toObject(includeInstance, f),
|
||||||
evalEvent: (f = msg.getEvalEvent()) && node_pb.EvalEventMessage.toObject(includeInstance, f),
|
evalEvent: (f = msg.getEvalEvent()) && node_pb.EvalEventMessage.toObject(includeInstance, f),
|
||||||
init: (f = msg.getInit()) && proto.WorkingInitMessage.toObject(includeInstance, f),
|
init: (f = msg.getInit()) && proto.WorkingInitMessage.toObject(includeInstance, f),
|
||||||
sharedProcessActive: (f = msg.getSharedProcessActive()) && vscode_pb.SharedProcessActiveMessage.toObject(includeInstance, f)
|
sharedProcessActive: (f = msg.getSharedProcessActive()) && vscode_pb.SharedProcessActiveMessage.toObject(includeInstance, f),
|
||||||
|
pong: (f = msg.getPong()) && node_pb.Pong.toObject(includeInstance, f)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (includeInstance) {
|
if (includeInstance) {
|
||||||
@@ -388,6 +435,11 @@ proto.ServerMessage.deserializeBinaryFromReader = function(msg, reader) {
|
|||||||
reader.readMessage(value,vscode_pb.SharedProcessActiveMessage.deserializeBinaryFromReader);
|
reader.readMessage(value,vscode_pb.SharedProcessActiveMessage.deserializeBinaryFromReader);
|
||||||
msg.setSharedProcessActive(value);
|
msg.setSharedProcessActive(value);
|
||||||
break;
|
break;
|
||||||
|
case 18:
|
||||||
|
var value = new node_pb.Pong;
|
||||||
|
reader.readMessage(value,node_pb.Pong.deserializeBinaryFromReader);
|
||||||
|
msg.setPong(value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
reader.skipField();
|
reader.skipField();
|
||||||
break;
|
break;
|
||||||
@@ -457,6 +509,14 @@ proto.ServerMessage.serializeBinaryToWriter = function(message, writer) {
|
|||||||
vscode_pb.SharedProcessActiveMessage.serializeBinaryToWriter
|
vscode_pb.SharedProcessActiveMessage.serializeBinaryToWriter
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
f = message.getPong();
|
||||||
|
if (f != null) {
|
||||||
|
writer.writeMessage(
|
||||||
|
18,
|
||||||
|
f,
|
||||||
|
node_pb.Pong.serializeBinaryToWriter
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -610,6 +670,36 @@ proto.ServerMessage.prototype.hasSharedProcessActive = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* optional Pong pong = 18;
|
||||||
|
* @return {?proto.Pong}
|
||||||
|
*/
|
||||||
|
proto.ServerMessage.prototype.getPong = function() {
|
||||||
|
return /** @type{?proto.Pong} */ (
|
||||||
|
jspb.Message.getWrapperField(this, node_pb.Pong, 18));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** @param {?proto.Pong|undefined} value */
|
||||||
|
proto.ServerMessage.prototype.setPong = function(value) {
|
||||||
|
jspb.Message.setOneofWrapperField(this, 18, proto.ServerMessage.oneofGroups_[0], value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
proto.ServerMessage.prototype.clearPong = function() {
|
||||||
|
this.setPong(undefined);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether this field is set.
|
||||||
|
* @return {!boolean}
|
||||||
|
*/
|
||||||
|
proto.ServerMessage.prototype.hasPong = function() {
|
||||||
|
return jspb.Message.getField(this, 18) != null;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generated by JsPbCodeGenerator.
|
* Generated by JsPbCodeGenerator.
|
||||||
|
|||||||
@@ -26,3 +26,7 @@ message EvalDoneMessage {
|
|||||||
uint64 id = 1;
|
uint64 id = 1;
|
||||||
string response = 2;
|
string response = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message Ping {}
|
||||||
|
|
||||||
|
message Pong {}
|
||||||
|
|||||||
32
packages/protocol/src/proto/node_pb.d.ts
vendored
32
packages/protocol/src/proto/node_pb.d.ts
vendored
@@ -119,3 +119,35 @@ export namespace EvalDoneMessage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Ping extends jspb.Message {
|
||||||
|
serializeBinary(): Uint8Array;
|
||||||
|
toObject(includeInstance?: boolean): Ping.AsObject;
|
||||||
|
static toObject(includeInstance: boolean, msg: Ping): Ping.AsObject;
|
||||||
|
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||||
|
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||||
|
static serializeBinaryToWriter(message: Ping, writer: jspb.BinaryWriter): void;
|
||||||
|
static deserializeBinary(bytes: Uint8Array): Ping;
|
||||||
|
static deserializeBinaryFromReader(message: Ping, reader: jspb.BinaryReader): Ping;
|
||||||
|
}
|
||||||
|
|
||||||
|
export namespace Ping {
|
||||||
|
export type AsObject = {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Pong extends jspb.Message {
|
||||||
|
serializeBinary(): Uint8Array;
|
||||||
|
toObject(includeInstance?: boolean): Pong.AsObject;
|
||||||
|
static toObject(includeInstance: boolean, msg: Pong): Pong.AsObject;
|
||||||
|
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
|
||||||
|
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
|
||||||
|
static serializeBinaryToWriter(message: Pong, writer: jspb.BinaryWriter): void;
|
||||||
|
static deserializeBinary(bytes: Uint8Array): Pong;
|
||||||
|
static deserializeBinaryFromReader(message: Pong, reader: jspb.BinaryReader): Pong;
|
||||||
|
}
|
||||||
|
|
||||||
|
export namespace Pong {
|
||||||
|
export type AsObject = {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ goog.exportSymbol('proto.EvalDoneMessage', null, global);
|
|||||||
goog.exportSymbol('proto.EvalEventMessage', null, global);
|
goog.exportSymbol('proto.EvalEventMessage', null, global);
|
||||||
goog.exportSymbol('proto.EvalFailedMessage', null, global);
|
goog.exportSymbol('proto.EvalFailedMessage', null, global);
|
||||||
goog.exportSymbol('proto.NewEvalMessage', null, global);
|
goog.exportSymbol('proto.NewEvalMessage', null, global);
|
||||||
|
goog.exportSymbol('proto.Ping', null, global);
|
||||||
|
goog.exportSymbol('proto.Pong', null, global);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generated by JsPbCodeGenerator.
|
* Generated by JsPbCodeGenerator.
|
||||||
@@ -843,4 +845,236 @@ proto.EvalDoneMessage.prototype.setResponse = function(value) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated by JsPbCodeGenerator.
|
||||||
|
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||||
|
* server response, or constructed directly in Javascript. The array is used
|
||||||
|
* in place and becomes part of the constructed object. It is not cloned.
|
||||||
|
* If no data is provided, the constructed object will be empty, but still
|
||||||
|
* valid.
|
||||||
|
* @extends {jspb.Message}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
proto.Ping = function(opt_data) {
|
||||||
|
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||||
|
};
|
||||||
|
goog.inherits(proto.Ping, jspb.Message);
|
||||||
|
if (goog.DEBUG && !COMPILED) {
|
||||||
|
proto.Ping.displayName = 'proto.Ping';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||||
|
/**
|
||||||
|
* Creates an object representation of this proto suitable for use in Soy templates.
|
||||||
|
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||||
|
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||||
|
* For the list of reserved names please see:
|
||||||
|
* com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
|
||||||
|
* @param {boolean=} opt_includeInstance Whether to include the JSPB instance
|
||||||
|
* for transitional soy proto support: http://goto/soy-param-migration
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
proto.Ping.prototype.toObject = function(opt_includeInstance) {
|
||||||
|
return proto.Ping.toObject(opt_includeInstance, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static version of the {@see toObject} method.
|
||||||
|
* @param {boolean|undefined} includeInstance Whether to include the JSPB
|
||||||
|
* instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @param {!proto.Ping} msg The msg instance to transform.
|
||||||
|
* @return {!Object}
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.Ping.toObject = function(includeInstance, msg) {
|
||||||
|
var f, obj = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if (includeInstance) {
|
||||||
|
obj.$jspbMessageInstance = msg;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format).
|
||||||
|
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||||
|
* @return {!proto.Ping}
|
||||||
|
*/
|
||||||
|
proto.Ping.deserializeBinary = function(bytes) {
|
||||||
|
var reader = new jspb.BinaryReader(bytes);
|
||||||
|
var msg = new proto.Ping;
|
||||||
|
return proto.Ping.deserializeBinaryFromReader(msg, reader);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format) from the
|
||||||
|
* given reader into the given message object.
|
||||||
|
* @param {!proto.Ping} msg The message object to deserialize into.
|
||||||
|
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||||
|
* @return {!proto.Ping}
|
||||||
|
*/
|
||||||
|
proto.Ping.deserializeBinaryFromReader = function(msg, reader) {
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var field = reader.getFieldNumber();
|
||||||
|
switch (field) {
|
||||||
|
default:
|
||||||
|
reader.skipField();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the message to binary data (in protobuf wire format).
|
||||||
|
* @return {!Uint8Array}
|
||||||
|
*/
|
||||||
|
proto.Ping.prototype.serializeBinary = function() {
|
||||||
|
var writer = new jspb.BinaryWriter();
|
||||||
|
proto.Ping.serializeBinaryToWriter(this, writer);
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the given message to binary data (in protobuf wire
|
||||||
|
* format), writing to the given BinaryWriter.
|
||||||
|
* @param {!proto.Ping} message
|
||||||
|
* @param {!jspb.BinaryWriter} writer
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.Ping.serializeBinaryToWriter = function(message, writer) {
|
||||||
|
var f = undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated by JsPbCodeGenerator.
|
||||||
|
* @param {Array=} opt_data Optional initial data array, typically from a
|
||||||
|
* server response, or constructed directly in Javascript. The array is used
|
||||||
|
* in place and becomes part of the constructed object. It is not cloned.
|
||||||
|
* If no data is provided, the constructed object will be empty, but still
|
||||||
|
* valid.
|
||||||
|
* @extends {jspb.Message}
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
proto.Pong = function(opt_data) {
|
||||||
|
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
|
||||||
|
};
|
||||||
|
goog.inherits(proto.Pong, jspb.Message);
|
||||||
|
if (goog.DEBUG && !COMPILED) {
|
||||||
|
proto.Pong.displayName = 'proto.Pong';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (jspb.Message.GENERATE_TO_OBJECT) {
|
||||||
|
/**
|
||||||
|
* Creates an object representation of this proto suitable for use in Soy templates.
|
||||||
|
* Field names that are reserved in JavaScript and will be renamed to pb_name.
|
||||||
|
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
|
||||||
|
* For the list of reserved names please see:
|
||||||
|
* com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS.
|
||||||
|
* @param {boolean=} opt_includeInstance Whether to include the JSPB instance
|
||||||
|
* for transitional soy proto support: http://goto/soy-param-migration
|
||||||
|
* @return {!Object}
|
||||||
|
*/
|
||||||
|
proto.Pong.prototype.toObject = function(opt_includeInstance) {
|
||||||
|
return proto.Pong.toObject(opt_includeInstance, this);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static version of the {@see toObject} method.
|
||||||
|
* @param {boolean|undefined} includeInstance Whether to include the JSPB
|
||||||
|
* instance for transitional soy proto support:
|
||||||
|
* http://goto/soy-param-migration
|
||||||
|
* @param {!proto.Pong} msg The msg instance to transform.
|
||||||
|
* @return {!Object}
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.Pong.toObject = function(includeInstance, msg) {
|
||||||
|
var f, obj = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if (includeInstance) {
|
||||||
|
obj.$jspbMessageInstance = msg;
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format).
|
||||||
|
* @param {jspb.ByteSource} bytes The bytes to deserialize.
|
||||||
|
* @return {!proto.Pong}
|
||||||
|
*/
|
||||||
|
proto.Pong.deserializeBinary = function(bytes) {
|
||||||
|
var reader = new jspb.BinaryReader(bytes);
|
||||||
|
var msg = new proto.Pong;
|
||||||
|
return proto.Pong.deserializeBinaryFromReader(msg, reader);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deserializes binary data (in protobuf wire format) from the
|
||||||
|
* given reader into the given message object.
|
||||||
|
* @param {!proto.Pong} msg The message object to deserialize into.
|
||||||
|
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
|
||||||
|
* @return {!proto.Pong}
|
||||||
|
*/
|
||||||
|
proto.Pong.deserializeBinaryFromReader = function(msg, reader) {
|
||||||
|
while (reader.nextField()) {
|
||||||
|
if (reader.isEndGroup()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var field = reader.getFieldNumber();
|
||||||
|
switch (field) {
|
||||||
|
default:
|
||||||
|
reader.skipField();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the message to binary data (in protobuf wire format).
|
||||||
|
* @return {!Uint8Array}
|
||||||
|
*/
|
||||||
|
proto.Pong.prototype.serializeBinary = function() {
|
||||||
|
var writer = new jspb.BinaryWriter();
|
||||||
|
proto.Pong.serializeBinaryToWriter(this, writer);
|
||||||
|
return writer.getResultBuffer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serializes the given message to binary data (in protobuf wire
|
||||||
|
* format), writing to the given BinaryWriter.
|
||||||
|
* @param {!proto.Pong} message
|
||||||
|
* @param {!jspb.BinaryWriter} writer
|
||||||
|
* @suppress {unusedLocalVariables} f is only used for nested messages
|
||||||
|
*/
|
||||||
|
proto.Pong.serializeBinaryToWriter = function(message, writer) {
|
||||||
|
var f = undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
goog.object.extend(exports, proto);
|
goog.object.extend(exports, proto);
|
||||||
|
|||||||
@@ -22,11 +22,15 @@ export const setup = (dataDirectory: string): void => {
|
|||||||
return currentDir;
|
return currentDir;
|
||||||
}, os.platform() === "win32" ? undefined! : path.sep); // Might need path.sep here for linux. Having it for windows causes an error because \C:\Users ...
|
}, os.platform() === "win32" ? undefined! : path.sep); // Might need path.sep here for linux. Having it for windows causes an error because \C:\Users ...
|
||||||
|
|
||||||
const unpackModule = (moduleName: string): void => {
|
const unpackModule = (moduleName: string, markExecutable: boolean = false): void => {
|
||||||
const memFile = path.join(isCli ? buildDir! : path.join(__dirname, ".."), "build/dependencies", moduleName);
|
const memFile = path.join(isCli ? buildDir! : path.join(__dirname, ".."), "build/dependencies", moduleName);
|
||||||
const diskFile = path.join(dataDirectory, "dependencies", moduleName);
|
const diskFile = path.join(dataDirectory, "dependencies", moduleName);
|
||||||
if (!fs.existsSync(diskFile)) {
|
if (!fs.existsSync(diskFile)) {
|
||||||
fs.writeFileSync(diskFile, fs.readFileSync(memFile));
|
fs.writeFileSync(diskFile, fs.readFileSync(memFile));
|
||||||
|
|
||||||
|
if (markExecutable) {
|
||||||
|
fs.chmodSync(diskFile, "755");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -37,7 +41,7 @@ export const setup = (dataDirectory: string): void => {
|
|||||||
*/
|
*/
|
||||||
unpackModule("pty.node");
|
unpackModule("pty.node");
|
||||||
unpackModule("spdlog.node");
|
unpackModule("spdlog.node");
|
||||||
unpackModule("rg");
|
unpackModule("rg", true);
|
||||||
// const nodePtyUtils = require("../../protocol/node_modules/node-pty-prebuilt/lib/utils") as typeof import("../../protocol/node_modules/node-pty-prebuilt/src/utils");
|
// const nodePtyUtils = require("../../protocol/node_modules/node-pty-prebuilt/lib/utils") as typeof import("../../protocol/node_modules/node-pty-prebuilt/src/utils");
|
||||||
// tslint:disable-next-line:no-any
|
// tslint:disable-next-line:no-any
|
||||||
// nodePtyUtils.loadNative = (modName: string): any => {
|
// nodePtyUtils.loadNative = (modName: string): any => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { exec, execSync } from "child_process";
|
|||||||
import { existsSync, readdirSync } from "fs";
|
import { existsSync, readdirSync } from "fs";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import { join, resolve } from "path";
|
import { join, resolve } from "path";
|
||||||
import { logger, field } from "../packages/logger";
|
import { logger, field } from "../packages/logger/src/logger";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install dependencies for a single package.
|
* Install dependencies for a single package.
|
||||||
|
|||||||
Reference in New Issue
Block a user