diff --git a/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs b/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs index 2cb4e574..1f0e8bc4 100644 --- a/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs +++ b/dotnet/IEC61850forCSharp/IEC61850ServerAPI.cs @@ -2881,7 +2881,6 @@ namespace IEC61850 private ActiveSettingGroupChangedHandler activeSettingGroupChangedHandler = null; - public void SetActiveSettingGroupChangedHandler(InternalActiveSettingGroupChangedHandler handler,SettingGroupControlBlock settingGroupControlBlock, object parameter) { internalActiveSettingGroupChangedHandler = handler; @@ -2909,6 +2908,41 @@ namespace IEC61850 return false; } + public delegate bool InternalEditSettingGroupChangedHandler(object parameter, SettingGroupControlBlock sgcb, uint newEditSg, ClientConnection connection); + + private InternalEditSettingGroupChangedHandler internalEditSettingGroupChangedHandler = null; + + private object editSettingGroupChangedHandlerParameter = null; + + private EditSettingGroupChangedHandler editSettingGroupChangedHandler = null; + + public void SetEditSettingGroupChangedHandler(InternalEditSettingGroupChangedHandler handler, SettingGroupControlBlock settingGroupControlBlock, object parameter) + { + internalEditSettingGroupChangedHandler = handler; + editSettingGroupChangedHandlerParameter = parameter; + + if (editSettingGroupChangedHandler == null) + { + editSettingGroupChangedHandler = new EditSettingGroupChangedHandler(InternalEditSettingGroupChangedImplementation); + + IedServer_setEditSettingGroupChangedHandler(self, settingGroupControlBlock.self, editSettingGroupChangedHandler, IntPtr.Zero); + } + } + + private bool InternalEditSettingGroupChangedImplementation(IntPtr parameter, IntPtr sgcb, uint newEditSg, IntPtr connection) + { + if (sgcb != IntPtr.Zero && connection != IntPtr.Zero) + { + ClientConnection con = null; + + this.clientConnections.TryGetValue(connection, out con); + + return internalEditSettingGroupChangedHandler(editSettingGroupChangedHandlerParameter, new SettingGroupControlBlock(sgcb), newEditSg, con); + } + + return false; + } + //------------ //public delegate bool InternalSVCBEventHandler(SampledValuesControlBlock sampledValuesControlBlock, SMVEvent sMVEvent, object parameter); diff --git a/dotnet/server_example_access_control/Program.cs b/dotnet/server_example_access_control/Program.cs index 133714ea..011948ad 100644 --- a/dotnet/server_example_access_control/Program.cs +++ b/dotnet/server_example_access_control/Program.cs @@ -244,7 +244,15 @@ namespace server_access_control return true; } + bool editSGChangedHandler(object parameter, SettingGroupControlBlock sgcb, uint newEditSg, ClientConnection connection) + { + Console.WriteLine("Set edit setting group to " + newEditSg + "\n"); + + return true; + } + iedServer.SetActiveSettingGroupChangedHandler(activeSGChangedHandler, settingGroupControlBlock, null); + iedServer.SetEditSettingGroupChangedHandler(editSGChangedHandler, settingGroupControlBlock, null); iedServer.Start(102);