mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 02:50:32 +00:00
fix: Telepathy V1.9
This commit is contained in:
parent
dff404e78e
commit
d1c60845bd
@ -153,7 +153,7 @@ static void ReceiveThreadFunction(ClientConnectionState state, string ip, int po
|
|||||||
{
|
{
|
||||||
// this happens if (for example) the ip address is correct
|
// this happens if (for example) the ip address is correct
|
||||||
// but there is no server running on that ip/port
|
// but there is no server running on that ip/port
|
||||||
Log.Info("[Telepathy] Client Recv: failed to connect to ip=" + ip + " port=" + port + " reason=" + exception);
|
Log.Info("Client Recv: failed to connect to ip=" + ip + " port=" + port + " reason=" + exception);
|
||||||
}
|
}
|
||||||
catch (ThreadInterruptedException)
|
catch (ThreadInterruptedException)
|
||||||
{
|
{
|
||||||
@ -171,7 +171,7 @@ static void ReceiveThreadFunction(ClientConnectionState state, string ip, int po
|
|||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
// something went wrong. probably important.
|
// something went wrong. probably important.
|
||||||
Log.Error("[Telepathy] Client Recv Exception: " + exception);
|
Log.Error("Client Recv Exception: " + exception);
|
||||||
}
|
}
|
||||||
// add 'Disconnected' event to receive pipe so that the caller
|
// add 'Disconnected' event to receive pipe so that the caller
|
||||||
// knows that the Connect failed. otherwise they will never know
|
// knows that the Connect failed. otherwise they will never know
|
||||||
@ -200,7 +200,7 @@ public void Connect(string ip, int port)
|
|||||||
// not if already started
|
// not if already started
|
||||||
if (Connecting || Connected)
|
if (Connecting || Connected)
|
||||||
{
|
{
|
||||||
Log.Warning("[Telepathy] Client can not create connection because an existing connection is connecting or connected");
|
Log.Warning("Telepathy Client can not create connection because an existing connection is connecting or connected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,17 +287,17 @@ public bool Send(ArraySegment<byte> message)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// log the reason
|
// log the reason
|
||||||
Log.Warning($"[Telepathy] Client.Send: sendPipe reached limit of {SendQueueLimit}. This can happen if we call send faster than the network can process messages. Disconnecting to avoid ever growing memory & latency.");
|
Log.Warning($"Client.Send: sendPipe reached limit of {SendQueueLimit}. This can happen if we call send faster than the network can process messages. Disconnecting to avoid ever growing memory & latency.");
|
||||||
|
|
||||||
// just close it. send thread will take care of the rest.
|
// just close it. send thread will take care of the rest.
|
||||||
state.client.Close();
|
state.client.Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log.Error("[Telepathy] Client.Send: message too big: " + message.Count + ". Limit: " + MaxMessageSize);
|
Log.Error("Client.Send: message too big: " + message.Count + ". Limit: " + MaxMessageSize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Log.Warning("[Telepathy] Client.Send: not connected!");
|
Log.Warning("Client.Send: not connected!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ void Listen(int port)
|
|||||||
//listener.Server.SendTimeout = SendTimeout;
|
//listener.Server.SendTimeout = SendTimeout;
|
||||||
//listener.Server.ReceiveTimeout = ReceiveTimeout;
|
//listener.Server.ReceiveTimeout = ReceiveTimeout;
|
||||||
listener.Start();
|
listener.Start();
|
||||||
Log.Info($"[Telepathy] Starting server on port {port}");
|
Log.Info("Server: listening port=" + port);
|
||||||
|
|
||||||
// keep accepting new clients
|
// keep accepting new clients
|
||||||
while (true)
|
while (true)
|
||||||
@ -138,7 +138,7 @@ void Listen(int port)
|
|||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
Log.Error("[Telepathy] Server send thread exception: " + exception);
|
Log.Error("Server send thread exception: " + exception);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sendThread.IsBackground = true;
|
sendThread.IsBackground = true;
|
||||||
@ -172,7 +172,7 @@ void Listen(int port)
|
|||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
Log.Error("[Telepathy] Server client thread exception: " + exception);
|
Log.Error("Server client thread exception: " + exception);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
receiveThread.IsBackground = true;
|
receiveThread.IsBackground = true;
|
||||||
@ -183,18 +183,18 @@ void Listen(int port)
|
|||||||
{
|
{
|
||||||
// UnityEditor causes AbortException if thread is still
|
// UnityEditor causes AbortException if thread is still
|
||||||
// running when we press Play again next time. that's okay.
|
// running when we press Play again next time. that's okay.
|
||||||
Log.Info("[Telepathy] Server thread aborted. That's okay. " + exception);
|
Log.Info("Server thread aborted. That's okay. " + exception);
|
||||||
}
|
}
|
||||||
catch (SocketException exception)
|
catch (SocketException exception)
|
||||||
{
|
{
|
||||||
// calling StopServer will interrupt this thread with a
|
// calling StopServer will interrupt this thread with a
|
||||||
// 'SocketException: interrupted'. that's okay.
|
// 'SocketException: interrupted'. that's okay.
|
||||||
Log.Info("[Telepathy] Server Thread stopped. That's okay. " + exception);
|
Log.Info("Server Thread stopped. That's okay. " + exception);
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
// something went wrong. probably important.
|
// something went wrong. probably important.
|
||||||
Log.Error("[Telepathy] Server Exception: " + exception);
|
Log.Error("Server Exception: " + exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,8 +215,7 @@ public bool Start(int port)
|
|||||||
// start the listener thread
|
// start the listener thread
|
||||||
// (on low priority. if main thread is too busy then there is not
|
// (on low priority. if main thread is too busy then there is not
|
||||||
// much value in accepting even more clients)
|
// much value in accepting even more clients)
|
||||||
Log.Info($"[Telepathy] Starting server on port {port}");
|
Log.Info("Server: Start port=" + port);
|
||||||
|
|
||||||
listenerThread = new Thread(() => { Listen(port); });
|
listenerThread = new Thread(() => { Listen(port); });
|
||||||
listenerThread.IsBackground = true;
|
listenerThread.IsBackground = true;
|
||||||
listenerThread.Priority = ThreadPriority.BelowNormal;
|
listenerThread.Priority = ThreadPriority.BelowNormal;
|
||||||
@ -229,7 +228,7 @@ public void Stop()
|
|||||||
// only if started
|
// only if started
|
||||||
if (!Active) return;
|
if (!Active) return;
|
||||||
|
|
||||||
Log.Info("[Telepathy] Server: stopping...");
|
Log.Info("Server: stopping...");
|
||||||
|
|
||||||
// stop listening to connections so that no one can connect while we
|
// stop listening to connections so that no one can connect while we
|
||||||
// close the client connections
|
// close the client connections
|
||||||
@ -296,7 +295,7 @@ public bool Send(int connectionId, ArraySegment<byte> message)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// log the reason
|
// log the reason
|
||||||
Log.Warning($"[Telepathy] Server.Send: sendPipe for connection {connectionId} reached limit of {SendQueueLimit}. This can happen if we call send faster than the network can process messages. Disconnecting this connection for load balancing.");
|
Log.Warning($"Server.Send: sendPipe for connection {connectionId} reached limit of {SendQueueLimit}. This can happen if we call send faster than the network can process messages. Disconnecting this connection for load balancing.");
|
||||||
|
|
||||||
// just close it. send thread will take care of the rest.
|
// just close it. send thread will take care of the rest.
|
||||||
connection.client.Close();
|
connection.client.Close();
|
||||||
@ -312,7 +311,7 @@ public bool Send(int connectionId, ArraySegment<byte> message)
|
|||||||
//Logger.Log("Server.Send: invalid connectionId: " + connectionId);
|
//Logger.Log("Server.Send: invalid connectionId: " + connectionId);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Log.Error("[Telepathy] Server.Send: message too big: " + message.Count + ". Limit: " + MaxMessageSize);
|
Log.Error("Server.Send: message too big: " + message.Count + ". Limit: " + MaxMessageSize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,7 +334,7 @@ public bool Disconnect(int connectionId)
|
|||||||
{
|
{
|
||||||
// just close it. send thread will take care of the rest.
|
// just close it. send thread will take care of the rest.
|
||||||
connection.client.Close();
|
connection.client.Close();
|
||||||
Log.Info("[Telepathy] Server.Disconnect connectionId:" + connectionId);
|
Log.Info("Server.Disconnect connectionId:" + connectionId);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -34,7 +34,7 @@ public static bool SendMessagesBlocking(NetworkStream stream, byte[] payload, in
|
|||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
// log as regular message because servers do shut down sometimes
|
// log as regular message because servers do shut down sometimes
|
||||||
Log.Info("[Telepathy] Send: stream.Write exception: " + exception);
|
Log.Info("Send: stream.Write exception: " + exception);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,7 +47,7 @@ public static bool ReadMessageBlocking(NetworkStream stream, int MaxMessageSize,
|
|||||||
// buffer needs to be of Header + MaxMessageSize
|
// buffer needs to be of Header + MaxMessageSize
|
||||||
if (payloadBuffer.Length != 4 + MaxMessageSize)
|
if (payloadBuffer.Length != 4 + MaxMessageSize)
|
||||||
{
|
{
|
||||||
Log.Error($"[Telepathy] ReadMessageBlocking: payloadBuffer needs to be of size 4 + MaxMessageSize = {4 + MaxMessageSize} instead of {payloadBuffer.Length}");
|
Log.Error($"ReadMessageBlocking: payloadBuffer needs to be of size 4 + MaxMessageSize = {4 + MaxMessageSize} instead of {payloadBuffer.Length}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ public static bool ReadMessageBlocking(NetworkStream stream, int MaxMessageSize,
|
|||||||
// read exactly 'size' bytes for content (blocking)
|
// read exactly 'size' bytes for content (blocking)
|
||||||
return stream.ReadExactly(payloadBuffer, size);
|
return stream.ReadExactly(payloadBuffer, size);
|
||||||
}
|
}
|
||||||
Log.Warning("[Telepathy] ReadMessageBlocking: possible header attack with a header of: " + size + " bytes.");
|
Log.Warning("ReadMessageBlocking: possible header attack with a header of: " + size + " bytes.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ public static void ReceiveLoop(int connectionId, TcpClient client, int MaxMessag
|
|||||||
if (receivePipe.Count(connectionId) >= QueueLimit)
|
if (receivePipe.Count(connectionId) >= QueueLimit)
|
||||||
{
|
{
|
||||||
// log the reason
|
// log the reason
|
||||||
Log.Warning($"[Telepathy] ReceivePipe reached limit of {QueueLimit} for connectionId {connectionId}. This can happen if network messages come in way faster than we manage to process them. Disconnecting this connection for load balancing.");
|
Log.Warning($"receivePipe reached limit of {QueueLimit} for connectionId {connectionId}. This can happen if network messages come in way faster than we manage to process them. Disconnecting this connection for load balancing.");
|
||||||
|
|
||||||
// IMPORTANT: do NOT clear the whole queue. we use one
|
// IMPORTANT: do NOT clear the whole queue. we use one
|
||||||
// queue for all connections.
|
// queue for all connections.
|
||||||
@ -155,7 +155,7 @@ public static void ReceiveLoop(int connectionId, TcpClient client, int MaxMessag
|
|||||||
// something went wrong. the thread was interrupted or the
|
// something went wrong. the thread was interrupted or the
|
||||||
// connection closed or we closed our own connection or ...
|
// connection closed or we closed our own connection or ...
|
||||||
// -> either way we should stop gracefully
|
// -> either way we should stop gracefully
|
||||||
Log.Info("[Telepathy] ReceiveLoop finished receive function for connectionId=" + connectionId + " reason: " + exception);
|
Log.Info("ReceiveLoop: finished receive function for connectionId=" + connectionId + " reason: " + exception);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -226,7 +226,7 @@ public static void SendLoop(int connectionId, TcpClient client, MagnificentSendP
|
|||||||
// something went wrong. the thread was interrupted or the
|
// something went wrong. the thread was interrupted or the
|
||||||
// connection closed or we closed our own connection or ...
|
// connection closed or we closed our own connection or ...
|
||||||
// -> either way we should stop gracefully
|
// -> either way we should stop gracefully
|
||||||
Log.Info("[Telepathy] SendLoop Exception: connectionId=" + connectionId + " reason: " + exception);
|
Log.Info("SendLoop Exception: connectionId=" + connectionId + " reason: " + exception);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
V1.9 [2023-11-10]
|
||||||
|
- fix: Always enqueue Disconnected event (imer)
|
||||||
|
|
||||||
V1.8 [2021-06-02]
|
V1.8 [2021-06-02]
|
||||||
- fix: Do not set timeouts on listener (fixes https://github.com/vis2k/Mirror/issues/2695)
|
- fix: Do not set timeouts on listener (fixes https://github.com/vis2k/Mirror/issues/2695)
|
||||||
- fix: #104 - ReadSafely now catches ObjectDisposedException too
|
- fix: #104 - ReadSafely now catches ObjectDisposedException too
|
||||||
|
Loading…
Reference in New Issue
Block a user