Skip to content

Commit ef9dae0

Browse files
sailroGitHub Enterprise
authored andcommitted
Merge pull request #208 from unity/update-messenger
Update Messenger from VSTULibs
2 parents eedb517 + a4ee867 commit ef9dae0

File tree

1 file changed

+33
-36
lines changed
  • Packages/com.unity.ide.visualstudio/Editor/Messaging

1 file changed

+33
-36
lines changed

Packages/com.unity.ide.visualstudio/Editor/Messaging/Messenger.cs

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ internal class Messager : IDisposable
1414
public event EventHandler<ExceptionEventArgs> MessagerException;
1515

1616
private readonly UdpSocket _socket;
17-
private readonly object _disposeLock = new object();
1817
private bool _disposed;
1918

2019
#if UNITY_EDITOR_WIN
@@ -54,13 +53,13 @@ private void BeginReceiveMessage()
5453

5554
try
5655
{
57-
lock (_disposeLock)
58-
{
59-
if (_disposed)
60-
return;
56+
beginReceive:
57+
if (_disposed)
58+
return;
6159

62-
_socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref any, ReceiveMessageCallback, buffer);
63-
}
60+
var result = _socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref any, ReceiveMessageCallback, buffer);
61+
if (result.CompletedSynchronously)
62+
goto beginReceive;
6463
}
6564
catch (SocketException se)
6665
{
@@ -79,13 +78,10 @@ private void ReceiveMessageCallback(IAsyncResult result)
7978
{
8079
var endPoint = UdpSocket.Any();
8180

82-
lock (_disposeLock)
83-
{
84-
if (_disposed)
85-
return;
81+
if (_disposed)
82+
return;
8683

87-
_socket.EndReceiveFrom(result, ref endPoint);
88-
}
84+
_socket.EndReceiveFrom(result, ref endPoint);
8985

9086
var message = DeserializeMessage(UdpSocket.BufferFor(result));
9187
if (message != null)
@@ -117,7 +113,8 @@ private void ReceiveMessageCallback(IAsyncResult result)
117113
RaiseMessagerException(e);
118114
}
119115

120-
BeginReceiveMessage();
116+
if (!result.CompletedSynchronously)
117+
BeginReceiveMessage();
121118
}
122119

123120
private static bool IsValidTcpMessage(Message message, out int port, out int bufferSize)
@@ -153,43 +150,40 @@ public void SendMessage(IPEndPoint target, MessageType type, string value = "")
153150

154151
try
155152
{
156-
lock (_disposeLock)
157-
{
158-
if (_disposed)
159-
return;
153+
if (_disposed)
154+
return;
160155

161-
if (buffer.Length >= UdpSocket.BufferSize)
156+
if (buffer.Length >= UdpSocket.BufferSize)
157+
{
158+
// switch to TCP mode to handle big messages
159+
var port = TcpListener.Queue(buffer);
160+
if (port > 0)
162161
{
163-
// switch to TCP mode to handle big messages
164-
var port = TcpListener.Queue(buffer);
165-
if (port > 0)
166-
{
167-
// success, replace original message with "switch to tcp" marker + port information + buffer length
168-
message = MessageFor(MessageType.Tcp, string.Concat(port, ':', buffer.Length));
169-
buffer = SerializeMessage(message);
170-
}
162+
// success, replace original message with "switch to tcp" marker + port information + buffer length
163+
message = MessageFor(MessageType.Tcp, string.Concat(port, ':', buffer.Length));
164+
buffer = SerializeMessage(message);
171165
}
172-
173-
_socket.BeginSendTo(buffer, 0, Math.Min(buffer.Length, UdpSocket.BufferSize), SocketFlags.None, target, SendMessageCallback, null);
174166
}
167+
168+
_socket.BeginSendTo(buffer, 0, Math.Min(buffer.Length, UdpSocket.BufferSize), SocketFlags.None, target, SendMessageCallback, null);
175169
}
176170
catch (SocketException se)
177171
{
178172
MessagerException?.Invoke(this, new ExceptionEventArgs(se));
179173
}
174+
catch (ObjectDisposedException)
175+
{
176+
}
180177
}
181178

182179
private void SendMessageCallback(IAsyncResult result)
183180
{
184181
try
185182
{
186-
lock (_disposeLock)
187-
{
188-
if (_disposed)
189-
return;
183+
if (_disposed)
184+
return;
190185

191-
_socket.EndSendTo(result);
192-
}
186+
_socket.EndSendTo(result);
193187
}
194188
catch (SocketException se)
195189
{
@@ -228,11 +222,14 @@ public static Messager BindTo(int port)
228222

229223
public void Dispose()
230224
{
231-
lock (_disposeLock)
225+
try
232226
{
233227
_disposed = true;
234228
_socket.Close();
235229
}
230+
catch
231+
{
232+
}
236233
}
237234
}
238235
}

0 commit comments

Comments
 (0)