microsoft/vscode-react-native

Public

mirrored fromhttps://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
4f4e082dd1d2adc773da8fdd1c2a71ffaa5837dd

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/common/extensionMessageSender.ts

57lines · 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 net from "net";
5import * as Q from "q";
6import {Log} from "./log/log";
7import {LogLevel} from "./log/logHelper";
8
9import {ExtensionMessage, MessageWithArguments, MessagingChannel, ErrorMarker} from "./extensionMessaging";
10
11export interface IExtensionMessageSender {
12 sendMessage(message: ExtensionMessage, args?: any[]): Q.Promise<any>;
13}
14
15/**
16 * Sends messages to the extension.
17 */
18export class ExtensionMessageSender implements IExtensionMessageSender {
19 constructor(private projectRootPath: string) {
20 }
21
22 public sendMessage(message: ExtensionMessage, args?: any[]): Q.Promise<any> {
23 let deferred = Q.defer<any>();
24 let messageWithArguments: MessageWithArguments = { message: message, args: args };
25 let body = "";
26
27 let pipePath = new MessagingChannel(this.projectRootPath).getPath();
28 let socket = net.connect(pipePath, function() {
29 Log.logInternalMessage(LogLevel.Info, `Connected to socket at ${pipePath}`);
30 let messageJson = JSON.stringify(messageWithArguments);
31 socket.write(messageJson);
32 });
33
34 socket.on("data", function(data: any) {
35 body += data;
36 });
37
38 socket.on("error", function(data: any) {
39 deferred.reject(new Error("An error ocurred while handling message: " + ExtensionMessage[message]));
40 });
41
42 socket.on("end", function() {
43 try {
44 if (body === ErrorMarker) {
45 deferred.reject(new Error("An error ocurred while handling message: " + ExtensionMessage[message]));
46 } else {
47 let responseBody: any = body ? JSON.parse(body) : null;
48 deferred.resolve(responseBody);
49 }
50 } catch (e) {
51 deferred.reject(e);
52 }
53 });
54
55 return deferred.promise;
56 }
57}