microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0502b7a86030ea91bf3320d0f2ad32aff86fa6db

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/extension/extensionServer.ts

87lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import * as em from "../common/extensionMessaging";
5import * as http from "http";
6import * as vscode from "vscode";
7import * as Q from "q";
8
9export class ExtensionServer implements vscode.Disposable {
10
11 private serverInstance: http.Server = null;
12
13 /**
14 * Starts the server.
15 */
16 public setup(): Q.Promise<void> {
17
18 let deferred = Q.defer<void>();
19
20 let requestHandler = (request: http.IncomingMessage, response: http.ServerResponse) => {
21 this.handleIncomingMessage(request, response);
22 };
23
24 let launchCallback = (error: any) => {
25 if (error) {
26 deferred.reject(error);
27 } else {
28 deferred.resolve(null);
29 }
30 };
31
32 this.serverInstance = http.createServer(requestHandler);
33 this.serverInstance.listen(em.ServerParams.PORT, null, null, launchCallback);
34
35 return deferred.promise;
36 }
37
38 /**
39 * Stops the server.
40 */
41 public dispose(): void {
42 if (this.serverInstance) {
43 this.serverInstance.close();
44 }
45 }
46
47 /**
48 * HTTP request handler.
49 */
50 private handleIncomingMessage(message: http.IncomingMessage, response: http.ServerResponse): void {
51 let body = "";
52 message.on("data", (chunk: string) => {
53 body += chunk;
54 });
55
56 message.on("end", () => {
57 let extensionMessage: em.MessageWithArgs<em.ExtensionIncomingMessage> = JSON.parse(body);
58 console.log("Received message: " + extensionMessage.message);
59 this.handleExtensionMessage(extensionMessage)
60 .then(result => {
61 response.writeHead(200, "OK", { "Content-Type": "application/json" });
62 response.end(JSON.stringify(result));
63 })
64 .done();
65 });
66 }
67
68 /**
69 * Extension message handler.
70 */
71 private handleExtensionMessage(messageWithArgs: em.MessageWithArgs<em.ExtensionIncomingMessage>): Q.Promise<any> {
72 let deferred = Q.defer<any>();
73 /* handle each extension message here and return the result */
74 switch (messageWithArgs.message) {
75 case em.ExtensionIncomingMessage.START_PACKAGER:
76 /* TODO */
77 break;
78 case em.ExtensionIncomingMessage.STOP_PACKAGER:
79 /* TODO */
80 break;
81 default:
82 throw new Error("Invalid message: " + messageWithArgs.message);
83 }
84
85 return deferred.promise;
86 }
87}