33 * Licensed under the MIT License. See License.txt in the project root for license information.
44 *--------------------------------------------------------------------------------------------*/
55
6- 'use strict' ;
7-
8- import { EventEmitter } from 'events' ;
9- import { ChildProcess , exec } from 'child_process' ;
10- import { dirname } from 'path' ;
11- import { ReadLine , createInterface } from 'readline' ;
12- import { launchOmniSharp } from './launcher' ;
13- import * as protocol from './protocol' ;
14- import { Options } from './options' ;
15- import { Logger } from '../logger' ;
16- import { DelayTracker } from './delayTracker' ;
17- import { LaunchTarget , findLaunchTargets } from './launcher' ;
18- import { Queue } from './queue' ;
6+ import { EventEmitter } from 'events' ;
7+ import { ChildProcess , exec } from 'child_process' ;
8+ import { ReadLine , createInterface } from 'readline' ;
9+ import { launchOmniSharp } from './launcher' ;
10+ import { Options } from './options' ;
11+ import { Logger } from '../logger' ;
12+ import { DelayTracker } from './delayTracker' ;
13+ import { LaunchTarget , findLaunchTargets } from './launcher' ;
14+ import { PlatformInformation } from '../platform' ;
15+ import { Request , RequestQueueCollection } from './requestQueue' ;
1916import TelemetryReporter from 'vscode-extension-telemetry' ;
17+ import * as path from 'path' ;
18+ import * as protocol from './protocol' ;
2019import * as vscode from 'vscode' ;
2120
2221enum ServerState {
@@ -25,13 +24,6 @@ enum ServerState {
2524 Stopped
2625}
2726
28- interface Request {
29- command : string ;
30- data ?: any ;
31- onSuccess ( value : any ) : void ;
32- onError ( err : any ) : void ;
33- }
34-
3527module Events {
3628 export const StateChanged = 'stateChanged' ;
3729
@@ -78,7 +70,7 @@ export class OmniSharpServer {
7870 private _eventBus = new EventEmitter ( ) ;
7971 private _state : ServerState = ServerState . Stopped ;
8072 private _launchTarget : LaunchTarget ;
81- private _requestQueue : Queue ;
73+ private _requestQueue : RequestQueueCollection ;
8274 private _channel : vscode . OutputChannel ;
8375 private _logger : Logger ;
8476
@@ -92,7 +84,7 @@ export class OmniSharpServer {
9284
9385 this . _channel = vscode . window . createOutputChannel ( 'OmniSharp Log' ) ;
9486 this . _logger = new Logger ( message => this . _channel . append ( message ) ) ;
95- this . _requestQueue = new Queue ( this . _logger , 8 , request => this . _makeRequest ( request ) ) ;
87+ this . _requestQueue = new RequestQueueCollection ( this . _logger , 8 , request => this . _makeRequest ( request ) ) ;
9688 }
9789
9890 public isRunning ( ) : boolean {
@@ -123,9 +115,9 @@ export class OmniSharpServer {
123115 private _reportTelemetry ( ) {
124116 const delayTrackers = this . _delayTrackers ;
125117
126- for ( const path in delayTrackers ) {
127- const tracker = delayTrackers [ path ] ;
128- const eventName = 'omnisharp' + path ;
118+ for ( const requestName in delayTrackers ) {
119+ const tracker = delayTrackers [ requestName ] ;
120+ const eventName = 'omnisharp' + requestName ;
129121 if ( tracker . hasMeasures ( ) ) {
130122 const measures = tracker . getMeasures ( ) ;
131123 tracker . clearMeasures ( ) ;
@@ -236,7 +228,7 @@ export class OmniSharpServer {
236228 this . _launchTarget = launchTarget ;
237229
238230 const solutionPath = launchTarget . target ;
239- const cwd = dirname ( solutionPath ) ;
231+ const cwd = path . dirname ( solutionPath ) ;
240232 let args = [
241233 '-s' , solutionPath ,
242234 '--hostPID' , process . pid . toString ( ) ,
@@ -472,6 +464,7 @@ export class OmniSharpServer {
472464 if ( listener ) {
473465 listener . dispose ( ) ;
474466 }
467+
475468 clearTimeout ( handle ) ;
476469 resolve ( ) ;
477470 } ) ;
@@ -522,24 +515,25 @@ export class OmniSharpServer {
522515 }
523516
524517 private _handleResponsePacket ( packet : protocol . WireProtocol . ResponsePacket ) {
525- if ( ! this . _requestQueue . dequeue ( packet . Command , packet . Request_seq ) ) {
518+ const request = this . _requestQueue . dequeue ( packet . Command , packet . Request_seq ) ;
519+
520+ if ( ! request ) {
526521 this . _logger . appendLine ( `Received response for ${ packet . Command } but could not find request.` ) ;
527522 return ;
528523 }
529524
530525 if ( packet . Success ) {
531- // Handle success
526+ request . onSuccess ( packet . Body ) ;
532527 }
533528 else {
534- // Handle failure
529+ request . onError ( packet . Message || packet . Body ) ;
535530 }
536531 }
537532
538533 private _handleEventPacket ( packet : protocol . WireProtocol . EventPacket ) : void {
539534 if ( packet . Event === 'log' ) {
540- // handle log events
541535 const entry = < { LogLevel : string ; Name : string ; Message : string ; } > packet . Body ;
542- this . _logger . appendLine ( `[ ${ entry . LogLevel } : ${ entry . Name } ] ${ entry . Message } ` ) ;
536+ this . _logOutput ( entry . LogLevel , entry . Name , entry . Message ) ;
543537 }
544538 else {
545539 // fwd all other events
@@ -557,10 +551,21 @@ export class OmniSharpServer {
557551 Arguments : request . data
558552 } ;
559553
560- console . log ( `Making request: ${ request . command } (${ id } )` ) ;
554+ this . _logger . appendLine ( `Making request: ${ request . command } (${ id } )` ) ;
561555
562556 this . _serverProcess . stdin . write ( JSON . stringify ( requestPacket ) + '\n' ) ;
563557
564- return requestPacket ;
558+ return id ;
559+ }
560+
561+ private _logOutput ( logLevel : string , name : string , message : string ) {
562+ const timing200Pattern = / ^ \[ I N F O R M A T I O N : O m n i S h a r p .M i d d l e w a r e .L o g g i n g M i d d l e w a r e \] \/ [ \/ \w ] + : 2 0 0 \d + m s / ;
563+
564+ const output = `[${ logLevel } :${ name } ] ${ message } ` ;
565+
566+ // strip stuff like: /codecheck: 200 339ms
567+ if ( ! timing200Pattern . test ( output ) ) {
568+ this . _logger . appendLine ( output ) ;
569+ }
565570 }
566571}
0 commit comments