diff --git a/Runtime/Scripts/Internal/Proto.cs b/Runtime/Scripts/Internal/Proto.cs index 4baeb8e..59afe2d 100644 --- a/Runtime/Scripts/Internal/Proto.cs +++ b/Runtime/Scripts/Internal/Proto.cs @@ -17,4 +17,15 @@ public enum VideoQuality OFF = 3, UNRECOGNIZED = -1, } + + public enum DisconnectReason { + UNKNOWN_REASON = 0, + CLIENT_INITIATED = 1, + DUPLICATE_IDENTITY = 2, + SERVER_SHUTDOWN = 3, + PARTICIPANT_REMOVED = 4, + ROOM_DELETED = 5, + STATE_MISMATCH = 6, + UNRECOGNIZED = -1, + } } \ No newline at end of file diff --git a/Runtime/Scripts/Room/Room.cs b/Runtime/Scripts/Room/Room.cs index 3d3229e..9e25460 100644 --- a/Runtime/Scripts/Room/Room.cs +++ b/Runtime/Scripts/Room/Room.cs @@ -24,7 +24,7 @@ public class Room : JSEventEmitter, IDisposable { public delegate void ReconnectingDelegate(); public delegate void ReconnectedDelegate(); - public delegate void DisconnectedDelegate(); + public delegate void DisconnectedDelegate(DisconnectReason? reason); public delegate void StateChangedDelegate(ConnectionState state); public delegate void MediaDevicesChangedDelegate(); public delegate void ParticipantConnectedDelegate(RemoteParticipant participant); @@ -95,9 +95,16 @@ private static void EventReceived(IntPtr iptr) room.Reconnected?.Invoke(); break; case RoomEvent.Disconnected: - Log.Debug("Room: Received Disconnected"); - room.Disconnected?.Invoke(); + { + var pPtr = JSNative.ShiftStack(); + DisconnectReason? reason = null; + if(JSNative.IsNumber(pPtr)) + reason = (DisconnectReason?) JSNative.GetNumber(pPtr); + + Log.Debug($"Room: Received Disconnected({reason})"); + room.Disconnected?.Invoke(reason); break; + } case RoomEvent.StateChanged: { var str = JSNative.GetString(JSNative.ShiftStack());