Skip to content

Commit 44a5af4

Browse files
committed
Merge pull request #71 from PowerShell/daviwil/fix-shutdown
Improve JSON RPC message deserialization
2 parents 7d864df + 915a693 commit 44a5af4

File tree

2 files changed

+19
-27
lines changed

2 files changed

+19
-27
lines changed

src/PowerShellEditorServices.Protocol/MessageProtocol/Serializers/JsonRpcMessageSerializer.cs

+16-26
Original file line numberDiff line numberDiff line change
@@ -62,51 +62,41 @@ public Message DeserializeMessage(JObject messageJson)
6262
// Message is a Request or Response
6363
string messageId = token.ToString();
6464

65-
if (messageJson.TryGetValue("params", out token))
66-
{
67-
JToken messageParams = token;
68-
69-
if (!messageJson.TryGetValue("method", out token))
70-
{
71-
// TODO: Throw parse error
72-
}
73-
74-
return Message.Request(messageId, token.ToString(), messageParams);
75-
}
76-
else if(messageJson.TryGetValue("result", out token))
65+
if (messageJson.TryGetValue("result", out token))
7766
{
7867
return Message.Response(messageId, null, token);
7968
}
80-
else if(messageJson.TryGetValue("error", out token))
69+
else if (messageJson.TryGetValue("error", out token))
8170
{
8271
return Message.ResponseError(messageId, null, token);
8372
}
8473
else
8574
{
86-
return Message.Unknown();
87-
}
88-
}
89-
else
90-
{
91-
// Messages without an id are events
92-
if (messageJson.TryGetValue("params", out token))
93-
{
94-
JToken messageParams = token;
75+
JToken messageParams = null;
76+
messageJson.TryGetValue("params", out messageParams);
9577

9678
if (!messageJson.TryGetValue("method", out token))
9779
{
9880
// TODO: Throw parse error
9981
}
10082

101-
return Message.Event(token.ToString(), messageParams);
83+
return Message.Request(messageId, token.ToString(), messageParams);
10284
}
103-
else
85+
}
86+
else
87+
{
88+
// Messages without an id are events
89+
JToken messageParams = token;
90+
messageJson.TryGetValue("params", out messageParams);
91+
92+
if (!messageJson.TryGetValue("method", out token))
10493
{
105-
return Message.Unknown();
94+
// TODO: Throw parse error
10695
}
96+
97+
return Message.Event(token.ToString(), messageParams);
10798
}
10899
}
109100
}
110-
111101
}
112102

src/PowerShellEditorServices.Protocol/Server/ProtocolServer.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,14 @@ public void Stop()
6363
{
6464
if (this.isStarted)
6565
{
66+
// Make sure no future calls try to stop the server during shutdown
67+
this.isStarted = false;
68+
6669
// Stop the implementation first
6770
this.OnStop();
6871

6972
this.serverChannel.Stop();
7073
this.serverExitedTask.SetResult(true);
71-
this.isStarted = false;
7274
}
7375
}
7476

0 commit comments

Comments
 (0)