예제 #1
0
        internal static OPCSERVERSTATUS GetServerStatus(ServerStatus input, int groupCount)
        {
            OPCSERVERSTATUS opcserverstatus = new OPCSERVERSTATUS();

            if (input != null)
            {
                opcserverstatus.szVendorInfo     = input.VendorInfo;
                opcserverstatus.wMajorVersion    = 0;
                opcserverstatus.wMinorVersion    = 0;
                opcserverstatus.wBuildNumber     = 0;
                opcserverstatus.dwServerState    = (OPCSERVERSTATE)input.ServerState;
                opcserverstatus.ftStartTime      = Convert(OpcCom.Interop.GetFILETIME(input.StartTime));
                opcserverstatus.ftCurrentTime    = Convert(OpcCom.Interop.GetFILETIME(input.CurrentTime));
                opcserverstatus.ftLastUpdateTime = Convert(OpcCom.Interop.GetFILETIME(input.LastUpdateTime));
                opcserverstatus.dwBandWidth      = -1;
                opcserverstatus.dwGroupCount     = groupCount;
                opcserverstatus.wReserved        = 0;
                if (input.ProductVersion == null)
                {
                    return(opcserverstatus);
                }
                string[] strArray = input.ProductVersion.Split(new char[] { '.' });
                if (strArray.Length > 0)
                {
                    try
                    {
                        opcserverstatus.wMajorVersion = System.Convert.ToInt16(strArray[0]);
                    }
                    catch
                    {
                        opcserverstatus.wMajorVersion = 0;
                    }
                }
                if (strArray.Length > 1)
                {
                    try
                    {
                        opcserverstatus.wMinorVersion = System.Convert.ToInt16(strArray[1]);
                    }
                    catch
                    {
                        opcserverstatus.wMinorVersion = 0;
                    }
                }
                opcserverstatus.wBuildNumber = 0;
                for (int i = 2; i < strArray.Length; i++)
                {
                    try
                    {
                        opcserverstatus.wBuildNumber = (short)((opcserverstatus.wBuildNumber * 100) + System.Convert.ToInt16(strArray[i]));
                    }
                    catch
                    {
                        opcserverstatus.wBuildNumber = 0;
                        return(opcserverstatus);
                    }
                }
            }
            return(opcserverstatus);
        }
예제 #2
0
        internal static ServerStatus GetServerStatus(ref IntPtr pInput, bool deallocate)
        {
            ServerStatus status = null;

            if (pInput != IntPtr.Zero)
            {
                OPCSERVERSTATUS opcserverstatus = (OPCSERVERSTATUS)Marshal.PtrToStructure(pInput, typeof(OPCSERVERSTATUS));
                status = new ServerStatus {
                    VendorInfo     = opcserverstatus.szVendorInfo,
                    ProductVersion = string.Format("{0}.{1}.{2}", opcserverstatus.wMajorVersion, opcserverstatus.wMinorVersion, opcserverstatus.wBuildNumber),
                    ServerState    = (serverState)opcserverstatus.dwServerState,
                    StatusInfo     = null,
                    StartTime      = OpcCom.Interop.GetFILETIME(Convert(opcserverstatus.ftStartTime)),
                    CurrentTime    = OpcCom.Interop.GetFILETIME(Convert(opcserverstatus.ftCurrentTime)),
                    LastUpdateTime = OpcCom.Interop.GetFILETIME(Convert(opcserverstatus.ftLastUpdateTime))
                };
                if (deallocate)
                {
                    Marshal.DestroyStructure(pInput, typeof(OPCSERVERSTATUS));
                    Marshal.FreeCoTaskMem(pInput);
                    pInput = IntPtr.Zero;
                }
            }
            return(status);
        }
예제 #3
0
        internal static ServerStatus GetServerStatus(ref IntPtr pInput, bool deallocate)
        {
            ServerStatus serverStatus = null;

            if (pInput != IntPtr.Zero)
            {
                OPCSERVERSTATUS oPCSERVERSTATUS = (OPCSERVERSTATUS)Marshal.PtrToStructure(pInput, typeof(OPCSERVERSTATUS));
                serverStatus                = new ServerStatus();
                serverStatus.VendorInfo     = oPCSERVERSTATUS.szVendorInfo;
                serverStatus.ProductVersion = $"{oPCSERVERSTATUS.wMajorVersion}.{oPCSERVERSTATUS.wMinorVersion}.{oPCSERVERSTATUS.wBuildNumber}";
                serverStatus.ServerState    = (serverState)oPCSERVERSTATUS.dwServerState;
                serverStatus.StatusInfo     = null;
                serverStatus.StartTime      = OpcCom.Interop.GetFILETIME(Convert(oPCSERVERSTATUS.ftStartTime));
                serverStatus.CurrentTime    = OpcCom.Interop.GetFILETIME(Convert(oPCSERVERSTATUS.ftCurrentTime));
                serverStatus.LastUpdateTime = OpcCom.Interop.GetFILETIME(Convert(oPCSERVERSTATUS.ftLastUpdateTime));
                if (deallocate)
                {
                    Marshal.DestroyStructure(pInput, typeof(OPCSERVERSTATUS));
                    Marshal.FreeCoTaskMem(pInput);
                    pInput = IntPtr.Zero;
                }
            }

            return(serverStatus);
        }
 internal OpcDaServerStatus(OPCSERVERSTATUS opcserverstatus)
 {
     StartTime      = FileTimeConverter.FromFileTime(opcserverstatus.ftStartTime);
     CurrentTime    = FileTimeConverter.FromFileTime(opcserverstatus.ftCurrentTime);
     LastUpdateTime = FileTimeConverter.FromFileTime(opcserverstatus.ftLastUpdateTime);
     ServerState    = (OpcDaServerState)opcserverstatus.dwServerState;
     GroupCount     = opcserverstatus.dwGroupCount;
     Bandwidth      = opcserverstatus.dwBandWidth;
     Version        = new Version(opcserverstatus.wMajorVersion, opcserverstatus.wMinorVersion,
                                  opcserverstatus.wBuildNumber);
     Reserved   = opcserverstatus.wReserved;
     VendorInfo = opcserverstatus.szVendorInfo;
 }
예제 #5
0
파일: Server.cs 프로젝트: ZSYMAX/OpcNetApi
 public void GetStatus(out IntPtr ppServerStatus)
 {
     lock (this)
     {
         try
         {
             OPCSERVERSTATUS serverStatus = Interop.GetServerStatus(m_server.GetStatus(), m_groups.Count);
             ppServerStatus = Marshal.AllocCoTaskMem(Marshal.SizeOf(serverStatus.GetType()));
             Marshal.StructureToPtr((object)serverStatus, ppServerStatus, fDeleteOld: false);
         }
         catch (Exception e)
         {
             throw CreateException(e);
         }
     }
 }
예제 #6
0
 public void GetStatus(out IntPtr ppServerStatus)
 {
     OpcCom.Da.Wrapper.Server server;
     Monitor.Enter(server = this);
     try
     {
         OPCSERVERSTATUS serverStatus = OpcCom.Da.Interop.GetServerStatus(this.m_server.GetStatus(), this.m_groups.Count);
         ppServerStatus = Marshal.AllocCoTaskMem(Marshal.SizeOf(serverStatus.GetType()));
         Marshal.StructureToPtr(serverStatus, ppServerStatus, false);
     }
     catch (Exception exception)
     {
         throw CreateException(exception);
     }
     finally
     {
         Monitor.Exit(server);
     }
 }
예제 #7
0
        internal static OPCSERVERSTATUS GetServerStatus(ServerStatus input, int groupCount)
        {
            OPCSERVERSTATUS result = default(OPCSERVERSTATUS);

            if (input != null)
            {
                result.szVendorInfo     = input.VendorInfo;
                result.wMajorVersion    = 0;
                result.wMinorVersion    = 0;
                result.wBuildNumber     = 0;
                result.dwServerState    = (OPCSERVERSTATE)input.ServerState;
                result.ftStartTime      = Convert(OpcCom.Interop.GetFILETIME(input.StartTime));
                result.ftCurrentTime    = Convert(OpcCom.Interop.GetFILETIME(input.CurrentTime));
                result.ftLastUpdateTime = Convert(OpcCom.Interop.GetFILETIME(input.LastUpdateTime));
                result.dwBandWidth      = -1;
                result.dwGroupCount     = groupCount;
                result.wReserved        = 0;
                if (input.ProductVersion != null)
                {
                    string[] array = input.ProductVersion.Split('.');
                    if (array.Length > 0)
                    {
                        try
                        {
                            result.wMajorVersion = System.Convert.ToInt16(array[0]);
                        }
                        catch
                        {
                            result.wMajorVersion = 0;
                        }
                    }

                    if (array.Length > 1)
                    {
                        try
                        {
                            result.wMinorVersion = System.Convert.ToInt16(array[1]);
                        }
                        catch
                        {
                            result.wMinorVersion = 0;
                        }
                    }

                    result.wBuildNumber = 0;
                    for (int i = 2; i < array.Length; i++)
                    {
                        try
                        {
                            result.wBuildNumber = (short)(result.wBuildNumber * 100 + System.Convert.ToInt16(array[i]));
                        }
                        catch
                        {
                            result.wBuildNumber = 0;
                            return(result);
                        }
                    }
                }
            }

            return(result);
        }