private void OnGUI() { var count = GrpcEnvironment.GetCurrentChannels(connectionInfos); scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); { EditorGUILayout.Space(); EditorGUILayout.LabelField("gRPC Channels(" + count + ")", EditorStyles.boldLabel); for (int i = 0; i < count; i++) { var channel = connectionInfos[i]; using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.LabelField(channel.Target); if (GUILayout.Button("Shutdown")) { channel.ShutdownAsync().Subscribe(); } } EditorGUI.indentLevel += 1; { using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.PrefixLabel("State"); EditorGUILayout.LabelField(ChannelStateToString(channel.State)); } } lock (subscriptions) { foreach (var item in subscriptions) { var c = item.Value.Key.Target; if (channel == c) { EditorGUILayout.LabelField(item.Value.Value); } } } EditorGUI.indentLevel -= 1; } lock (subscriptions) { foreach (var item in subscriptions) { var c = item.Value.Key.Target; if (c != null) { for (int i = 0; i < count; i++) { var channel = connectionInfos[i]; //channel if (c == channel) { goto next; } } unregistredSubscriptions.Add(item.Value.Value); continue; } next: continue; } } if (unregistredSubscriptions.Count != 0) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Unfinished Subscriptions", EditorStyles.boldLabel); for (int i = 0; i < unregistredSubscriptions.Count; i++) { var m = unregistredSubscriptions[i]; EditorGUILayout.LabelField(m); } unregistredSubscriptions.Clear(); } } EditorGUILayout.EndScrollView(); for (int i = 0; i < connectionInfos.Count; i++) { connectionInfos[i] = null; // null clear } }