Ver Fonte

车位管理监控工具

yct há 4 anos atrás
commit
5b113947fb
78 ficheiros alterados com 36700 adições e 0 exclusões
  1. 32 0
      .gitignore
  2. 25 0
      chutian_modules.sln
  3. 10 0
      parkspace_manager/App.config
  4. 87 0
      parkspace_manager/Form1.Designer.cs
  5. 40 0
      parkspace_manager/Form1.cs
  6. 120 0
      parkspace_manager/Form1.resx
  7. 58 0
      parkspace_manager/FormParkSpaceStatus.Designer.cs
  8. 221 0
      parkspace_manager/FormParkSpaceStatus.cs
  9. 120 0
      parkspace_manager/FormParkSpaceStatus.resx
  10. 66 0
      parkspace_manager/LOG/Credence.cs
  11. 194 0
      parkspace_manager/LOG/LogManager.cs
  12. 25 0
      parkspace_manager/LOG/LogTest.cs
  13. 87 0
      parkspace_manager/LOG/log.cs
  14. 27 0
      parkspace_manager/Monitor/Monitor.cs
  15. 22 0
      parkspace_manager/Program.cs
  16. 36 0
      parkspace_manager/Properties/AssemblyInfo.cs
  17. 71 0
      parkspace_manager/Properties/Resources.Designer.cs
  18. 117 0
      parkspace_manager/Properties/Resources.resx
  19. 30 0
      parkspace_manager/Properties/Settings.Designer.cs
  20. 7 0
      parkspace_manager/Properties/Settings.settings
  21. 25 0
      parkspace_manager/WebServer/IWebServer.cs
  22. 793 0
      parkspace_manager/WebServer/WebServer.cs
  23. 338 0
      parkspace_manager/communication/Communicator.cs
  24. 477 0
      parkspace_manager/db_manager/DBManager.cs
  25. 2287 0
      parkspace_manager/message/MessageBase.cs
  26. 2764 0
      parkspace_manager/message/ParkspaceAllocationMessage.cs
  27. 158 0
      parkspace_manager/message/message_base.proto
  28. 116 0
      parkspace_manager/message/parkspace_allocation_message.proto
  29. 9 0
      parkspace_manager/packages.config
  30. 199 0
      parkspace_manager/parkspace_manager.csproj
  31. BIN
      parkspace_manager/sdk/dotNetty/DotNetty.Buffers.dll
  32. 1978 0
      parkspace_manager/sdk/dotNetty/DotNetty.Buffers.xml
  33. BIN
      parkspace_manager/sdk/dotNetty/DotNetty.Codecs.dll
  34. 646 0
      parkspace_manager/sdk/dotNetty/DotNetty.Codecs.xml
  35. BIN
      parkspace_manager/sdk/dotNetty/DotNetty.Common.dll
  36. 2479 0
      parkspace_manager/sdk/dotNetty/DotNetty.Common.xml
  37. BIN
      parkspace_manager/sdk/dotNetty/DotNetty.Handlers.dll
  38. 591 0
      parkspace_manager/sdk/dotNetty/DotNetty.Handlers.xml
  39. BIN
      parkspace_manager/sdk/dotNetty/DotNetty.Transport.dll
  40. 2715 0
      parkspace_manager/sdk/dotNetty/DotNetty.Transport.xml
  41. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Abstractions.dll
  42. 240 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Abstractions.xml
  43. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.FileExtensions.dll
  44. 175 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.FileExtensions.xml
  45. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Json.dll
  46. 132 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Json.xml
  47. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.dll
  48. 401 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.xml
  49. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  50. 1075 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.DependencyInjection.Abstractions.xml
  51. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Abstractions.dll
  52. 207 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Abstractions.xml
  53. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Physical.dll
  54. 329 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Physical.xml
  55. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.Abstractions.dll
  56. 507 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.Abstractions.xml
  57. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.dll
  58. 31 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.xml
  59. BIN
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Primitives.dll
  60. 470 0
      parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Primitives.xml
  61. BIN
      parkspace_manager/sdk/dotNetty/Newtonsoft.Json.dll
  62. 10887 0
      parkspace_manager/sdk/dotNetty/Newtonsoft.Json.xml
  63. BIN
      parkspace_manager/sdk/dotNetty/System.Collections.Immutable.dll
  64. 4908 0
      parkspace_manager/sdk/dotNetty/System.Collections.Immutable.xml
  65. BIN
      parkspace_manager/sdk/dotNetty/System.Runtime.CompilerServices.Unsafe.dll
  66. 200 0
      parkspace_manager/sdk/dotNetty/System.Runtime.CompilerServices.Unsafe.xml
  67. BIN
      parkspace_manager/sdk/dotNetty/System.Runtime.InteropServices.RuntimeInformation.dll
  68. BIN
      parkspace_manager/sdk/dotNetty/System.Threading.Tasks.Extensions.dll
  69. 166 0
      parkspace_manager/sdk/dotNetty/System.Threading.Tasks.Extensions.xml
  70. BIN
      parkspace_manager/sdk/dotNetty/netstandard.dll
  71. BIN
      parkspace_manager/sdk/dotNetty/nettyCommunication.dll
  72. BIN
      parkspace_manager/sdk/mysql/MySql.Data.dll
  73. BIN
      parkspace_manager/sdk/mysql/db.dll
  74. 2 0
      parkspace_manager/sdk/proto_compile.bat
  75. BIN
      parkspace_manager/x64/libnanomsg.so
  76. BIN
      parkspace_manager/x64/nanomsg.dll
  77. BIN
      parkspace_manager/x86/libnanomsg.so
  78. BIN
      parkspace_manager/x86/nanomsg.dll

+ 32 - 0
.gitignore

@@ -0,0 +1,32 @@
+
+#Ignore thumbnails created by Windows
+Thumbs.db
+#Ignore files built by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+.vs/
+#Nuget packages folder
+packages/

+ 25 - 0
chutian_modules.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27428.2043
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "parkspace_manager", "parkspace_manager\parkspace_manager.csproj", "{B4FF8229-BC04-4D00-833F-1C250AAF2470}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{B4FF8229-BC04-4D00-833F-1C250AAF2470}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B4FF8229-BC04-4D00-833F-1C250AAF2470}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B4FF8229-BC04-4D00-833F-1C250AAF2470}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B4FF8229-BC04-4D00-833F-1C250AAF2470}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {F6DAA6DF-E38B-4530-B62A-9381DFDDD3B1}
+	EndGlobalSection
+EndGlobal

+ 10 - 0
parkspace_manager/App.config

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+    </startup>
+  <appSettings>
+    <!--日志写入地址配置文件-->
+    <add key="LogAddress" value="c:\\c#workspace\\LogDemo\\LoggerTest" />
+  </appSettings>
+</configuration>

+ 87 - 0
parkspace_manager/Form1.Designer.cs

@@ -0,0 +1,87 @@
+namespace parkspace_manager
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.button1 = new System.Windows.Forms.Button();
+            this.button2 = new System.Windows.Forms.Button();
+            this.button3 = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(52, 44);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 0;
+            this.button1.Text = "开始";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // button2
+            // 
+            this.button2.Location = new System.Drawing.Point(177, 44);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 1;
+            this.button2.Text = "结束";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.button2_Click);
+            // 
+            // button3
+            // 
+            this.button3.Location = new System.Drawing.Point(304, 197);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(134, 108);
+            this.button3.TabIndex = 2;
+            this.button3.Text = "打开窗口";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.button3_Click);
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(724, 451);
+            this.Controls.Add(this.button3);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.button1);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button button3;
+    }
+}
+

+ 40 - 0
parkspace_manager/Form1.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace parkspace_manager
+{
+    public partial class Form1 : Form
+    {
+        Communicator com;
+        public Form1()
+        {
+            InitializeComponent();
+            com = Communicator.Instance;
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            com.Init();
+            com.Bind("tcp://192.168.2.144:20000");
+            com.Connect("tcp://192.168.2.125:20000");
+        }
+
+        private void button2_Click(object sender, EventArgs e)
+        {
+            com.Uninit();
+        }
+
+        private void button3_Click(object sender, EventArgs e)
+        {
+            FormParkSpaceStatus formParkSpaceStatus = new FormParkSpaceStatus();
+            formParkSpaceStatus.Show();
+        }
+    }
+}

+ 120 - 0
parkspace_manager/Form1.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 58 - 0
parkspace_manager/FormParkSpaceStatus.Designer.cs

@@ -0,0 +1,58 @@
+namespace parkspace_manager
+{
+    partial class FormParkSpaceStatus
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.ParkingSpaceMonitorPanel = new System.Windows.Forms.Panel();
+            this.SuspendLayout();
+            // 
+            // ParkingSpaceMonitorPanel
+            // 
+            this.ParkingSpaceMonitorPanel.Location = new System.Drawing.Point(34, 12);
+            this.ParkingSpaceMonitorPanel.Name = "ParkingSpaceMonitorPanel";
+            this.ParkingSpaceMonitorPanel.Size = new System.Drawing.Size(1414, 782);
+            this.ParkingSpaceMonitorPanel.TabIndex = 0;
+            // 
+            // FormParkSpaceStatus
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1484, 806);
+            this.Controls.Add(this.ParkingSpaceMonitorPanel);
+            this.Name = "FormParkSpaceStatus";
+            this.Text = "FormParkSpaceStatus";
+            this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormParkSpaceStatus_FormClosed);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Panel ParkingSpaceMonitorPanel;
+    }
+}

+ 221 - 0
parkspace_manager/FormParkSpaceStatus.cs

@@ -0,0 +1,221 @@
+using Message;
+using parkMonitor.LOG;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace parkspace_manager
+{
+    public partial class FormParkSpaceStatus : Form
+    {
+        public static int spacesInRow = 15;
+        public static int floors = 11;
+        public static int rows = 1;
+        public bool isClosing;
+        private Dictionary<int, Parkspace_info> idPssMap;
+        public FormParkSpaceStatus()
+        {
+            isClosing = false;
+
+            InitializeComponent();
+
+            Communicator.Instance.Init();
+            Communicator.Instance.Bind("tcp://192.168.2.144:20000");
+            Communicator.Instance.Connect("tcp://192.168.2.125:20000");
+
+            // 库位显示
+            Task.Factory.StartNew(() =>
+            {
+                UpdateParkingSpaceView();
+            });
+        }
+
+        /// <summary>
+        /// 更新立体停车位显示
+        /// </summary>
+        private void UpdateParkingSpaceView()
+        {
+            bool needUpdate = false;
+            Parkspace_allocation_status_msg parkspace_status = new Parkspace_allocation_status_msg();
+            while (!isClosing)
+            {
+                bool get_status_result = Communicator.Instance.Get_parkspace_status(ref parkspace_status);
+                if (!get_status_result || parkspace_status.ParkspaceInfo == null)
+                    continue;
+                List<Parkspace_info> psList = parkspace_status.ParkspaceInfo.ToList();
+                if (psList == null || psList.Count <= 0)
+                {
+                    Thread.Sleep(10000);
+                    continue;
+                }
+                //更新映射表
+                try
+                {
+                    if (idPssMap.Count != psList.Count)
+                    {
+                        idPssMap.Clear();
+                        for (int i = 0; i < psList.Count; i++)
+                        {
+                            idPssMap.Add(psList[i].ParkspaceId, psList[i]);
+                        }
+                    }
+                    else
+                    {
+                        for (int i = 0; i < psList.Count; i++)
+                        {
+                            idPssMap[psList[i].ParkspaceId] = psList[i];
+                        }
+                    }
+                }
+                catch { Log.WriteLog(LogType.process, LogFile.WARNING, "实时更新所有库位异常"); }
+
+                TableLayoutPanel tlp = new TableLayoutPanel();
+                tlp.Name = "tlp_ParkingSpace";
+                tlp.ColumnCount = rows;
+                tlp.RowCount = 1;
+                tlp.Dock = DockStyle.Fill;
+                tlp.AutoScroll = true;
+                tlp.BackColor = SystemColors.GradientActiveCaption;
+                this.Invoke(new Action(() =>
+                {
+                    //List<TableLayoutPanel> tlpList = new List<TableLayoutPanel>();
+                    int blockSize = spacesInRow * floors * rows;
+                    int offset = (rows + 1 - ((blockSize / spacesInRow) % rows)) * spacesInRow;
+                    //创建控件
+                    if (ParkingSpaceMonitorPanel.Controls.Count == 0 || needUpdate)
+                    {
+                        for (int i = 0; i < rows; i++)
+                        {
+                            TableLayoutPanel temp = new TableLayoutPanel();
+                            temp.Name = "tlp_ParkingSpaceSection" + (i + 1).ToString();
+                            temp.RowCount = floors;
+                            temp.ColumnCount = spacesInRow;
+                            temp.Dock = DockStyle.Fill;
+                            temp.AutoSize = true;
+                            temp.BackColor = SystemColors.GradientActiveCaption;
+                            temp.Margin = new Padding(5, 2, 5, 2);
+                            for (int j = Math.Max(psList.Count, blockSize) - 1; j >= 0; j--)
+                            {
+                                Button btn = new Button();
+                                btn.Anchor = (AnchorStyles.Top | AnchorStyles.Left);
+                                btn.AutoSize = true;
+                                btn.Location = new Point(10, 10);
+                                btn.Margin = new Padding(3, 10, 3, 10);
+                                btn.Padding = new Padding(5);
+                                btn.Name = "lb_parkingSpace" + j;
+                                btn.TextAlign = ContentAlignment.MiddleCenter;
+                                if (((j + offset) / spacesInRow) % rows == i)
+                                {
+                                    if (j > psList.Count - 1)
+                                    {
+                                        btn.Text = "#####";
+                                        temp.Controls.Add(btn);
+                                        btn.BackColor = GetPSColor(Parkspace_status.EParkspaceError);
+                                    }
+                                    else
+                                    {
+                                        try
+                                        {
+                                            btn.Text = "车位" + psList[j].ParkspaceId;
+                                            btn.BackColor = GetPSColor(psList[j].ParkspaceStatus);
+                                            temp.Controls.Add(btn);
+                                        }
+                                        catch { Log.WriteLog(LogType.process, LogFile.WARNING, "实时更新单一库位异常"); }
+                                    }
+                                }
+                            }
+                            tlp.Controls.Add(temp);
+                            //tlpList.Add(temp);
+                        }
+                        ParkingSpaceMonitorPanel.Controls.Clear();
+                        ParkingSpaceMonitorPanel.Controls.Add(tlp);
+                        needUpdate = false;
+                    }
+                    //更新控件
+                    else
+                    {
+                        Control.ControlCollection psCC = ParkingSpaceMonitorPanel.Controls;
+                        foreach (Control segment in psCC)
+                        {
+                            Control.ControlCollection segmentCC = segment.Controls;
+                            //Console.WriteLine("seg::"+segmentCC.Count);
+                            foreach (Control spaces in segmentCC)
+                            {
+                                Control.ControlCollection spaceCC = spaces.Controls;
+                                //Console.WriteLine("spaces::"+spaceCC.Count);
+                                foreach (Control space in spaceCC)
+                                {
+                                    if (space.GetType() == typeof(Label))
+                                    {
+                                        int index = -1;
+                                        bool result = int.TryParse(space.Text.Substring(2), out index);
+                                        //Console.WriteLine("text is :" + space.Text+", index:"+index);
+                                        if (idPssMap.ContainsKey(index))
+                                        {
+                                            //Console.WriteLine("index:" + index+", status:"+ idPssMap[index].spaceStatus);
+                                            space.BackColor = GetPSColor(idPssMap[index].ParkspaceStatus);
+                                        }
+                                        else if (result)
+                                        {
+                                            needUpdate = true;
+                                            //Console.WriteLine("need update:"+index);
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                            if (needUpdate)
+                            {
+                                break;
+                            }
+                        }
+                    }
+                }));
+                Thread.Sleep(5000);
+            }
+        }
+
+        /// <summary>
+        /// 按钮点击事件
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Btnvalue_Click(object sender, EventArgs e)
+        {
+            Button btn = (Button)sender;
+            //实例化窗口,选择待修改状态
+            
+        }
+
+        /// <summary>
+        /// 获取状态对应颜色
+        /// </summary>
+        /// <param name="status"></param>
+        /// <returns></returns>
+        private Color GetPSColor(Parkspace_status status)
+        {
+            switch (status)
+            {
+                case Parkspace_status.EParkspaceEmpty: return Color.White;
+                case Parkspace_status.EParkspaceOccupied: return Color.Yellow;
+                case Parkspace_status.EParkspaceReserved: return Color.SkyBlue;
+                case Parkspace_status.EParkspaceLocked: return Color.Blue;
+                case Parkspace_status.EParkspaceError: return Color.Red;
+                default: return Color.Violet;
+            }
+        }
+
+        private void FormParkSpaceStatus_FormClosed(object sender, FormClosedEventArgs e)
+        {
+            isClosing = true;
+            Communicator.Instance.Uninit();
+        }
+    }
+}

+ 120 - 0
parkspace_manager/FormParkSpaceStatus.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 66 - 0
parkspace_manager/LOG/Credence.cs

@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkMonitor.LOG
+{
+    /// <summary>
+    /// 凭证
+    /// </summary>
+    public class Credence
+    {
+        private static List<string> digitCredence = new List<string>();
+        /// <summary>
+        /// 获取一个凭证
+        /// </summary>
+        /// <param name="terminalFlag">终端机标识</param>
+        /// <param name="num">随机码位数</param>
+        /// <returns></returns>
+        public static string GetOneCredence()
+        {
+            string context = "";
+            //digitCredence = CredentialsGenerator.GetCredential(terminalFlag,num);
+            if (digitCredence.Count != 0)
+            {
+                context = digitCredence[0];
+                digitCredence.RemoveAt(0);
+            }
+            return context;
+        }
+        /// <summary>
+        /// 读取所有凭证
+        /// </summary>
+        /// <returns></returns>
+        public static bool ReadCredence()
+        {
+            digitCredence.Clear();
+            //string date = System.DateTime.Now.ToString("yyyy-MM-dd");
+            //string filePath = logAddress + "\\\\" + date + "\\\\" + "CREDENCES.log";
+            string filePath = LogManager.logAddress + "\\\\" + "CREDENCES.log";
+            try
+            {
+                List<string> logLines = null;
+                if (File.Exists(filePath))
+                {
+                    logLines = new List<string>(File.ReadAllLines(filePath));
+                    File.Delete(filePath);
+                }
+                if (logLines != null)
+                {
+                    for (int i = 0; i < 300; i++)
+                    {
+                        string logLine = logLines[i];
+                        digitCredence.Add(logLine);
+                        logLines.RemoveAt(i);
+                    }
+                    File.WriteAllLines(filePath, logLines.ToArray());
+                }
+            }
+            catch (Exception e) { Console.WriteLine(e.Message); Log.WriteLog(LogType.process, LogFile.ERROR, "凭证获取失败");return false; }
+            return true;
+        }
+    }
+}

+ 194 - 0
parkspace_manager/LOG/LogManager.cs

@@ -0,0 +1,194 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+using System.Configuration;
+
+namespace parkMonitor.LOG
+{
+    /// <summary>
+    /// 日志管理
+    /// </summary>
+    public class LogManager
+    {
+        public static string logAddressStr = "LogAddress";
+        public static string logAddress;
+        DateTime time;                                        //文件创建时间
+        private string logFileExtName = "log";     //日志文件扩展名
+        private Encoding logFileEncoding = Encoding.UTF8;   //日志文件编码格式
+        private string logFileName = string.Empty;  //日志文件名
+        private string logPath = "";            //日志文件路径
+        private bool writeLogTime = true;     //log文件是否写时间
+        private bool writeStatus = false;        //是否写入标志位
+        private static object obj = new object();
+        /// <summary>
+        /// 配置文件初始化
+        /// </summary>
+        public static void Init()
+        {
+            try
+            {
+                logAddress = ConfigurationManager.AppSettings[logAddressStr];
+            }
+            catch
+            {
+                Console.WriteLine("配置文件有误");
+            }
+        }
+        /// <summary>
+        /// 日志文件路径
+        /// </summary>
+        public string CreateLogPath()
+        {
+            if (logPath == null || logPath == string.Empty || time.ToString("yyyy-MM-dd") != System.DateTime.Now.ToString("yyyy-MM-dd"))
+            {
+                try
+                {
+                    time = System.DateTime.Now;
+                    logPath = System.IO.Path.Combine(logAddress, time.ToString("yyyy-MM-dd"));
+                }
+                catch
+                {
+                    Console.WriteLine("路径合成失败");
+                }
+            }
+            if (!logPath.EndsWith(@"\"))
+            {
+                logPath += @"\";
+            }
+            if (!Directory.Exists(logPath))
+            {
+                try
+                {
+                    Directory.CreateDirectory(logPath);
+                }
+                catch
+                {
+                    Console.WriteLine("创建文件路径失败");
+                }
+            }
+            return logPath;
+        }
+        /// <summary>
+        /// 写日志
+        /// </summary>
+        public void WriteLog(LogType logType, string logFile, string msg)
+        {
+            CreateLogPath();
+            lock (obj)
+            {
+                try
+                {
+                    //创建log文件
+                    logFileName = string.Format("{0}{1}.{2}", logPath, logType, this.logFileExtName);
+                    using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding))
+                    {
+                        //是否写时间
+                        if (logType == LogType.database)
+                        {
+                            writeLogTime = false;
+                        }
+                        else
+                        {
+                            writeLogTime = true;
+                        }
+                        ////sql类型
+                        //if (logType == LogType.DATABASE)
+                        //{
+                        //    writeStatus = true;
+                        //}
+                        //else
+                        //{
+                        //    writeStatus = false;
+                        //}
+                        if (writeLogTime)
+                        {
+                            sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:") + logFile + ":" + msg);
+                        }
+                        else
+                        {
+                            sw.WriteLine(logFile + ":" + msg);
+
+                        }
+                    }
+                }
+                catch { }
+            }
+        }
+        /// <summary>
+        /// log类型不定
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="logFile"></param>
+        /// <param name="msg"></param>
+        public void WriteLog(LogType logType, LogFile logFile, string msg)
+        {
+            this.WriteLog(logType, logFile.ToString(), msg);
+        }
+        /// <summary>
+        /// log类型为null
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="msg"></param>
+        public void WriteLog(LogType logType, string msg)
+        {
+            this.WriteLog(logType, string.Empty, msg);
+        }
+        /// <summary>
+        /// 读日志文件
+        /// </summary>
+        /// <param name="sqlStatus"></param>
+        /// <param name="sqlMsg"></param>
+        public void ReadLog(out string sqlStatus, out string sqlMsg, out int count)
+        {
+            sqlStatus = null;
+            sqlMsg = null;
+            count = 0;
+            string date = System.DateTime.Now.ToString("yyyy-MM-dd");
+            string filePath = logAddress + "\\\\" + date + "\\\\" + "DATABASE.log";
+            try
+            {
+                List<string> logLines = null;
+                if (File.Exists(filePath))
+                {
+                    logLines = new List<string>(File.ReadAllLines(filePath));
+                }
+                if (logLines != null)
+                {
+                    count = logLines.Count;
+                    string logLine = logLines[0];
+                    sqlStatus = logLine.Substring(0, 1);
+                    sqlMsg = logLine.Substring(2, logLine.Length - 2);
+                    logLines.RemoveAt(0);
+                    File.WriteAllLines(filePath, logLines.ToArray());
+                }
+            }
+            catch (Exception e) { Console.WriteLine(e.Message); }
+        }
+
+
+
+    }
+    /// <summary>
+    /// log类型
+    /// </summary>
+    public enum LogFile
+    {
+        LOG,
+        RESET,
+        ERROR,
+        WARNING,
+        INFO,
+        ERROR_NUMBERPLATE
+    }
+    /// <summary>
+    /// log文件类型
+    /// </summary>
+    public enum LogType
+    {
+        database,
+        process
+    }
+}

+ 25 - 0
parkspace_manager/LOG/LogTest.cs

@@ -0,0 +1,25 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace parkMonitor.LOG
+//{
+//    //日志测试用例
+//    class LogTest
+//    {
+//        public void TestMethod()
+//        {
+//            //三种方式写入文件
+//            //第一种:WriteLog( string msg) 默认是INFO类型
+//            //第二种:WriteLog(string logFile,string msg) log类型和信息
+//            //第三种:WriteLog(LogFile logFile,string msg) 枚举的log类型以及相应信息
+//            LogFile logFile = LogFile.ERROR;
+//            string msg = "2";
+//            Log.WriteLog("",logFile, msg);
+//            Log.WriteLog("",msg);
+//            Log.WriteLog("WARNING", "22");
+//        }
+//    }
+//}

+ 87 - 0
parkspace_manager/LOG/log.cs

@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkMonitor.LOG
+{
+    public static class Log
+    {
+        private static LogManager logManager;
+        static Log()
+        {
+            LogManager.Init();
+            logManager = new LogManager();
+        }
+        /// <summary>
+        /// 写文件类型
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="logFile"></param>
+        /// <param name="msg"></param>
+        public static void WriteLog(LogType logType, LogFile logFile, string msg)
+        {
+            try
+            {
+                logManager.WriteLog(logType, logFile, msg);
+            }
+            catch
+            {
+
+            }
+        }
+        /// <summary>
+        /// 文件类型为null
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="msg"></param>
+        public static void WriteLog(LogType logType, string msg)
+        {
+            try
+            {
+                logManager.WriteLog(logType, string.Empty, msg);
+            }
+            catch
+            {
+
+            }
+        }
+        /// <summary>
+        /// 数据库异常的标志位
+        /// 0表示update,1表示insert
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="status"></param>
+        /// <param name="msg"></param>
+        public static void WriteLog(LogType logType, string status, string msg)
+        {
+            try
+            {
+                logManager.WriteLog(logType, status, msg);
+            }
+            catch
+            {
+
+            }
+        }
+        /// <summary>
+        /// 读日志文件
+        /// </summary>
+        /// <param name="sqlStatus"></param>
+        /// <param name="sqlMsg"></param>
+        /// <param name="count"></param>      
+        public static void ReadLog(out string sqlStatus, out string sqlMsg,out int count)
+        {
+            sqlStatus = null;
+            sqlMsg = null;
+            count = 0;
+            try
+            {
+                logManager.ReadLog(out sqlStatus,out sqlMsg,out count);
+            }
+            catch { }
+        }
+
+    }
+}

+ 27 - 0
parkspace_manager/Monitor/Monitor.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkspace_manager.Monitor
+{
+    class Monitor
+    {
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public Monitor()
+        {
+
+        }
+
+        /// <summary>
+        /// 析构函数
+        /// </summary>
+        ~Monitor()
+        {
+
+        }
+    }
+}

+ 22 - 0
parkspace_manager/Program.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace parkspace_manager
+{
+    static class Program
+    {
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}

+ 36 - 0
parkspace_manager/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("parkspace_manager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("parkspace_manager")]
+[assembly: AssemblyCopyright("Copyright ©  2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("b4ff8229-bc04-4d00-833f-1c250aaf2470")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
+// 方法是按如下所示使用“*”: :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 71 - 0
parkspace_manager/Properties/Resources.Designer.cs

@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本: 4.0.30319.42000
+//
+//     对此文件的更改可能导致不正确的行为,如果
+//     重新生成代码,则所做更改将丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace parkspace_manager.Properties
+{
+
+
+    /// <summary>
+    ///   强类型资源类,用于查找本地化字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   返回此类使用的缓存 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("parkspace_manager.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   覆盖当前线程的 CurrentUICulture 属性
+        ///   使用此强类型的资源类的资源查找。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
parkspace_manager/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 30 - 0
parkspace_manager/Properties/Settings.Designer.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace parkspace_manager.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
parkspace_manager/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

+ 25 - 0
parkspace_manager/WebServer/IWebServer.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace centralController.WebServer
+{
+    public interface IWebServer
+    {
+        bool Start(int port);
+
+        void Stop();
+
+        void BookParkRecord();
+
+        void BookFetchRecord();
+
+        bool ReservedCarCheck(string license);
+
+        void Connect();
+
+        bool GetConnectStatus();
+    }
+}

+ 793 - 0
parkspace_manager/WebServer/WebServer.cs

@@ -0,0 +1,793 @@
+using centralController.model;
+using db;
+using nettyCommunication;
+using parkMonitor.LOG;
+using PLCS7;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Terminal;
+
+namespace centralController.WebServer
+{
+    class MyWebServer : IWebServer
+    {
+        private Queue<MessageUTF8> waitToReserveQueue = null;
+        private Queue<MessageUTF8> reservedQueue = null;
+        private object waitToReserveLock = new object();
+        private object reservedLock = new object();
+        private object parkLock = new object();
+        private object fetchLock = new object();
+        private object connectLock = new object();
+        private Communication comm = null;
+        private Thread receiveMsg = null;
+        private bool isClosing { get; set; }
+        /// <summary>
+        /// 是否正在调用函数进行连接
+        /// </summary>
+        private bool connecting { get; set; }
+        /// <summary>
+        /// 连接状态
+        /// </summary>
+        private bool connected { get; set; }
+
+        public void BookFetchRecord()
+        {
+            throw new NotImplementedException();
+        }
+
+        public void BookParkRecord()
+        {
+            throw new NotImplementedException();
+        }
+        /// <summary>
+        /// 更新预约车车辆状态
+        /// </summary>
+        /// <param name="localDB"></param>
+        /// <param name="state"></param>
+        /// <param name="orderRecordsID"></param>
+        /// <param name="license"></param>
+        /// <returns></returns>
+        private bool UpdateVehicleState(bool localDB, int state, int orderRecordsID, string license)
+        {
+            string vehicleUpdateSql = "";
+            string vehicleInsertSql = "";
+            if (orderRecordsID > 0)
+            {
+                if (state >= 0)
+                {
+                    vehicleUpdateSql = "update vehicle set vehiclepParkState = " + state + " ,orderRecordsID = " + orderRecordsID + " where numberPlate = '" + license + "';";
+                    vehicleInsertSql = "insert into vehicle (numberPlate,vehiclepParkState,orderRecordsID) values " +
+                            "('" + license + "'," + state + "," + orderRecordsID + ");";
+                }
+                else
+                {
+                    vehicleUpdateSql = "update vehicle set orderRecordsID = " + orderRecordsID + " where numberPlate = '" + license + "';";
+                    vehicleInsertSql = "insert into vehicle (numberPlate,orderRecordsID) values " +
+                            "('" + license + "'," + orderRecordsID + ");";
+                }
+            }
+            else
+            {
+                if (state >= 0)
+                {
+                    vehicleUpdateSql = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + license + "';";
+                    vehicleInsertSql = "insert into vehicle (numberPlate,vehiclepParkState) values " +
+                            "('" + license + "'," + state + ");";
+                }
+                else
+                {
+                    return false;
+                }
+            }
+            List<string> vehicleUpdateList = new List<string>();
+            List<string> vehicleInsertList = new List<string>();
+            vehicleUpdateList.Add(vehicleUpdateSql);
+            vehicleInsertList.Add(vehicleInsertSql);
+            DBOperation dbHandle = null;
+            if (localDB)
+                dbHandle = Monitor.Monitor.localDBOper;
+            else
+                dbHandle = Monitor.Monitor.remoteDBOper;
+            if (!dbHandle.UpdateTransaction(vehicleUpdateList))
+            {
+                int id = 0;
+                if (!dbHandle.Insert(vehicleInsertList, out id))
+                    return false;
+                else
+                    return true;
+            }
+            else return true;
+        }
+        /// <summary>
+        /// 插入预约记录
+        /// </summary>
+        /// <param name="localDB"></param>
+        /// <param name="userID"></param>
+        /// <param name="parking"></param>
+        /// <param name="license"></param>
+        /// <param name="orderTime"></param>
+        /// <param name="orderLength"></param>
+        /// <returns></returns>
+        private bool InsertOrderRecord(bool localDB, string userID, bool parking, string license, string orderTime, int orderLength, out int id)
+        {
+            bool result = false;
+            string orderRecordInsertSql;
+            if (parking)
+            {
+                orderRecordInsertSql = "insert into orderrecords (userID,numberPlate,garageID, bookParkTime, bookHour, bookPrice,bookState) " +
+                "VALUES (" + userID + ", '" + license + "', '" + Monitor.Monitor.garageID + "', '" + orderTime + "', " + orderLength + ",NULL, '0');";
+            }
+            else
+            {
+                orderRecordInsertSql = "insert into orderrecords (userID,numberPlate,garageID, bookFetchTime, bookHour, bookPrice,bookState) " +
+                "VALUES (" + userID + ", '" + license + "', '" + Monitor.Monitor.garageID + "', '" + orderTime + "', " + orderLength + ",NULL, '2');";
+            }
+            List<string> orderList = new List<string>();
+            orderList.Add(orderRecordInsertSql);
+            if (localDB)
+                result = Monitor.Monitor.localDBOper.Insert(orderList, out id);
+            else
+                result = Monitor.Monitor.remoteDBOper.Insert(orderList, out id);
+            return result;
+        }
+        /// <summary>
+        /// 找到当前预约记录ID,暂未使用
+        /// </summary>
+        /// <param name="localDB"></param>
+        /// <param name="license"></param>
+        /// <param name="latestIndex">最近第几条记录,1表示最新一条</param>
+        /// <returns></returns>
+        private int FindCurrentOrderRecordID(bool localDB, string license, int latestIndex = 1)
+        {
+            int currentID = 0;
+            int count = 10;
+            while (count-- > 0 && currentID == 0)
+            {
+                List<object[]> orderRecords = Monitor.Monitor.GetOrderRecords(localDB, license, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
+                if (orderRecords.Count != 0)
+                {
+                    try
+                    {
+                        currentID = (int)(UInt32)orderRecords[latestIndex - 1][0];
+                    }
+                    catch { }
+                }
+            }
+            return currentID;
+        }
+        /// <summary>
+        /// 预约数据库操作
+        /// </summary>
+        /// <param name="localDB"></param>
+        /// <param name="userID"></param>
+        /// <param name="parking"></param>
+        /// <param name="license"></param>
+        /// <param name="orderTime"></param>
+        /// <param name="orderLength"></param>
+        /// <returns></returns>
+        private bool ReserveDBOperation(bool localDB, string userID, bool parking, string license, string orderTime, int orderLength)
+        {
+            UpdateVehicleState(localDB, parking ? 4 : 5, 0, license);
+            //预约记录插入db
+            int currentID = 0;
+            InsertOrderRecord(localDB, userID, parking, license, orderTime, orderLength, out currentID);
+            ////查询预约记录id号
+            //int currentID = FindCurrentOrderRecordID(localDB, license);
+            if (currentID == 0) { /*反馈web,预约失败*/ return false; }
+            //更新车辆状态
+            UpdateVehicleState(localDB, parking ? 4 : 5, currentID, license);
+            return true;
+        }
+        /// <summary>
+        /// 检查预约指令是否可行
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <returns></returns>
+        private bool ReservationValidate(MessageUTF8 msg)
+        {
+            int allBookableSpace, count;
+            lock (waitToReserveLock)
+            {
+                //可预约车位总数
+                allBookableSpace = Monitor.Monitor.ins.GetFreeSpaceCount(4);
+                count = 0;
+                DateTime start, end;
+                try
+                {
+                    start = DateTime.Parse(msg.bookTime);
+                    end = start.AddHours(msg.bookLength);
+                    //Console.WriteLine("--------"+msg.bookTime+","+msg.bookLength);
+                }
+                catch { Console.WriteLine("时间解析异常1"); return false; }
+
+                Queue<MessageUTF8>.Enumerator enumer = waitToReserveQueue.GetEnumerator();
+                while (enumer.MoveNext())
+                {
+                    DateTime tempStart, tempEnd;
+                    try
+                    {
+                        tempStart = DateTime.Parse(enumer.Current.bookTime);
+                        tempEnd = tempStart.AddHours(enumer.Current.bookLength);
+                        //Console.WriteLine("#########" + enumer.Current.bookTime + "," + enumer.Current.bookLength);
+                    }
+                    catch { Console.WriteLine("时间解析异常2"); return false; }
+                    //Console.WriteLine("**********" + start.ToString() + "," + end.ToString() + "," + tempStart.ToString() + "," + tempEnd.ToString());
+                    //Console.WriteLine("**********" + ((tempStart - end).TotalMinutes > 0)+","+ ((start - tempEnd).TotalMinutes > 0));
+                    if (!((tempStart - end).TotalMinutes > 0 || (start - tempEnd).TotalMinutes > 0)) { count += 1; }
+                }
+                Queue<MessageUTF8>.Enumerator enumer2 = reservedQueue.GetEnumerator();
+                while (enumer2.MoveNext())
+                {
+                    DateTime tempStart, tempEnd;
+                    try
+                    {
+                        tempStart = DateTime.Parse(enumer2.Current.bookTime);
+                        tempEnd = tempStart.AddHours(enumer2.Current.bookLength);
+                        //Console.WriteLine("#########" + enumer.Current.bookTime + "," + enumer.Current.bookLength);
+                    }
+                    catch { Console.WriteLine("时间解析异常2"); return false; }
+                    //Console.WriteLine("**********" + start.ToString() + "," + end.ToString() + "," + tempStart.ToString() + "," + tempEnd.ToString());
+                    //Console.WriteLine("**********" + ((tempStart - end).TotalMinutes > 0)+","+ ((start - tempEnd).TotalMinutes > 0));
+                    if (!((tempStart - end).TotalMinutes > 0 || (start - tempEnd).TotalMinutes > 0)) { count += 1; }
+                }
+            }
+            Console.WriteLine("----------" + msg.context + ":" + allBookableSpace + "," + count);
+            if (allBookableSpace > count)
+                return true;
+            else
+                return false;
+        }
+        /// <summary>
+        /// 根据消息类型分别处理
+        /// </summary>
+        /// <param name="msg"></param>
+        private void MsgHandling(MessageUTF8 msg)
+        {
+            try
+            {
+                MessageUTF8 returnMsg = new MessageUTF8();
+                switch (msg.cmd)
+                {
+                    //预约停
+                    case "RESERVE":
+                        if (msg.userID != "" && msg.bookTime != "" && msg.bookLength != 0)
+                        {
+                            if (!ReservationValidate(msg))
+                            {
+                                //回复预约失败给web
+                                returnMsg.cmd = "RESERVEFAILED";
+                                returnMsg.userID = msg.userID;
+                                returnMsg.context = msg.context;
+                                returnMsg.garageID = ClientSettings.GarageID;
+                                comm.SendMessage(returnMsg);
+                                Monitor.Monitor.SetNotification("车辆" + msg.context + "预约停车,已无可预约车位", parkMonitor.model.TextColor.Warning);
+                            }
+                            else
+                            {
+                                bool DBOperResult = true;
+                                lock (waitToReserveLock)
+                                {
+                                    waitToReserveQueue.Enqueue(msg);
+                                }
+                                //预约记录与车辆状态写入数据库
+                                DBOperResult = DBOperResult && ReserveDBOperation(true, msg.userID, true, msg.context, msg.bookTime, msg.bookLength);
+                                DBOperResult = DBOperResult && ReserveDBOperation(false, msg.userID, true, msg.context, msg.bookTime, msg.bookLength);
+                                //回复成功给web
+                                if (!DBOperResult)
+                                    Log.WriteLog(LogType.process, LogFile.WARNING, msg.context + "从" + msg.bookTime + "开始预约" + msg.bookLength + "小时,预约指令数据库操作未获得记录ID");
+                                returnMsg.cmd = "RESERVEOK";
+                                returnMsg.userID = msg.userID;
+                                returnMsg.context = msg.context;
+                                returnMsg.garageID = ClientSettings.GarageID;
+                                comm.SendMessage(returnMsg);
+                                Monitor.Monitor.SetNotification("车辆" + msg.context + "预约停车,操作成功", parkMonitor.model.TextColor.Log);
+                            }
+                        }
+                        break;
+
+                    case "CANCELRESERVE":
+                        //IEqualityComparer<MessageUTF8> comparer ; 
+                        //if(waitToReserveQueue.Contains(msg, )
+
+                        break;
+                    //预约取
+                    case "PREFETCH":
+                        break;
+                    //停车
+                    case "PARK":
+                        lock (parkLock)
+                        {
+                            returnMsg = new MessageUTF8();
+                            int id = 0;
+                            int countdown = 2;
+                            int resultCode = 8;
+                            //根据号牌寻找对应号牌机编号,找不到则返回失败信息
+                            if (msg.context != "" && msg.userID != "")
+                            {
+                                while (id == 0 && countdown-- > 0)
+                                {
+                                    try
+                                    {
+                                        id = Terminal.Terminal.GetIdAccordingToLicense(msg.context.Split('.')[2]);
+                                        //id = 1;
+                                        //id = Monitor.Monitor.numMachineLinker.GetLicenseID(msg.context.Split('.')[2]);
+                                    }
+                                    catch { Console.WriteLine("号牌截取异常"); }
+                                }
+                            }
+                            if (id > 0)
+                            //判断号牌机编号对应PLC数据块是否空闲,空闲则判断按钮状态并发送停车指令与号牌到PLC,否则返回失败信息
+                            {
+                                try
+                                {
+                                    resultCode = TerminalSimul.ParkTermOper(id, msg.context);
+                                }
+                                catch { resultCode = 8; }
+                            }
+                            else { resultCode = 1; }
+                            Thread.Sleep(1000);
+                            switch (resultCode)
+                            {
+                                case 0:
+                                    returnMsg.cmd = "PARKOK";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "正在进行停车", parkMonitor.model.TextColor.Info); break;
+                                case 1:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("未识别到车辆" + msg.context.Split('.')[2] + ",终端" + id + "停放位置,请确认车辆已入场", parkMonitor.model.TextColor.Warning); break;
+                                case 2:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "生成凭证号失败", parkMonitor.model.TextColor.Warning); break;
+                                case 3:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "凭证转换异常", parkMonitor.model.TextColor.Warning); break;
+                                case 4:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "停车码解析异常", parkMonitor.model.TextColor.Warning); break;
+                                case 5:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "地感异常,当前位置无地感", parkMonitor.model.TextColor.Warning); break;
+                                case 6:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "状态异常,非停车终端", parkMonitor.model.TextColor.Warning); break;
+                                case 7:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "状态异常,已有停车指令在处理中", parkMonitor.model.TextColor.Warning); break;
+                                case 8:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "其他异常", parkMonitor.model.TextColor.Warning);
+                                    Log.WriteLog(LogType.process, LogFile.ERROR, "凭证号" + msg.context + "出现未知异常,无法停车"); break;
+                                case 9:
+                                    returnMsg.cmd = "PARKFAILED";
+                                    Monitor.Monitor.SetNotification("车辆" + msg.context.Split('.')[2] + ",终端" + id + "无空闲车位", parkMonitor.model.TextColor.Warning);break;
+                            }
+                            returnMsg.userID = msg.userID;
+                            returnMsg.garageID = Monitor.Monitor.garageID;
+                            returnMsg.context = msg.context;
+                            comm.SendMessage(returnMsg);
+                        }
+                        break;
+                    //取车
+                    case "FETCH":
+                        lock (fetchLock)
+                        {
+                            returnMsg = new MessageUTF8();
+                            int resultCode = TerminalSimul.FetchTermOper(msg.context);
+                            Thread.Sleep(1500);
+                            switch (resultCode)
+                            {
+                                case 0:
+                                    returnMsg.cmd = "FETCHOK";
+                                    Monitor.Monitor.SetNotification("凭证号" + msg.context + "正在取车", parkMonitor.model.TextColor.Info); break;
+                                case 1:
+                                    returnMsg.cmd = "FETCHFAILED";
+                                    Monitor.Monitor.SetNotification("凭证号" + msg.context + "地感异常,有地感时无法取车", parkMonitor.model.TextColor.Warning); break;
+                                case 2:
+                                    returnMsg.cmd = "FETCHFAILED";
+                                    Monitor.Monitor.SetNotification("凭证号" + msg.context + "终端状态异常,当前非取车终端", parkMonitor.model.TextColor.Warning); break;
+                                case 3:
+                                    returnMsg.cmd = "FETCHFAILED";
+                                    Monitor.Monitor.SetNotification("凭证号" + msg.context + "指令占用异常,已有取车指令在处理中", parkMonitor.model.TextColor.Warning); break;
+                                case 4:
+                                    returnMsg.cmd = "FETCHFAILED";
+                                    Monitor.Monitor.SetNotification("凭证号" + msg.context + "凭证解析异常,无法解析该凭证号", parkMonitor.model.TextColor.Warning); break;
+                                case 5:
+                                    returnMsg.cmd = "FETCHFAILED";
+                                    Monitor.Monitor.SetNotification("凭证号" + msg.context + "其他异常", parkMonitor.model.TextColor.Warning);
+                                    Log.WriteLog(LogType.process, LogFile.ERROR, "凭证号" + msg.context + "出现未知异常,无法取车"); break;
+                            }
+                            returnMsg.userID = msg.userID;
+                            returnMsg.garageID = Monitor.Monitor.garageID;
+                            returnMsg.context = msg.context;
+                            comm.SendMessage(returnMsg);
+                        }
+                        break;
+                    //连接断开消息
+                    case "DISCONNECT":
+                        Monitor.Monitor.SetNotification("收到连接断开提示消息", parkMonitor.model.TextColor.Warning);
+                        break;
+                    //更新广告
+                    case "ADVERT":
+                        string adAlert = "";
+                        bool result = Monitor.Monitor.advertMgr.UpdateAdvert(out adAlert);
+                        if (!result)
+                        {
+                            Monitor.Monitor.SetNotification("广告更新失败,请尝试手动更新", parkMonitor.model.TextColor.Warning);
+                        }
+                        else
+                        {
+                            Monitor.Monitor.SetNotification("广告更新成功\n" + adAlert, parkMonitor.model.TextColor.Log);
+                        }
+                        break;
+                    case "RESPONSE":
+                        if (msg.context == "REGSUCCESS")
+                        {
+                            Console.WriteLine("收到web注册指令");
+                        }
+                        else if (msg.context == "HEARTSUCCESS")
+                        {
+                            Console.WriteLine("收到web心跳指令");
+                        }
+                        break;
+                    default:
+                        Monitor.Monitor.SetNotification("接收到无法识别的指令", parkMonitor.model.TextColor.Warning);
+                        break;
+                }
+            }
+            catch (Exception ex) { Console.WriteLine("收消息," + ex.Message + "\n" + ex.StackTrace); }
+        }
+
+        private void SendBookCmd(bool parking, int state)
+        {
+            int countdown = 5;
+            while (countdown-- > 0)
+            {
+                if (Monitor.Monitor.mainBlockInfo.bookParkCmd != 0 && countdown > 1)
+                {
+                    Thread.Sleep(300);
+                    if (countdown == 2)
+                    {
+                        Monitor.Monitor.SetNotification("未能获取预约指令位0状态,尝试手动清除", parkMonitor.model.TextColor.Warning);
+                        MainBlockStru mbs = new MainBlockStru
+                        {
+                            centralHearbeat = -1,
+                            bookParkCmd = parking ? (short)0 : (short)-1,
+                            bookFetchCmd = !parking ? (short)0 : (short)-1,
+                            processCompleted = (short)-1,
+                            licenseReceived = -1
+                        };
+                        Monitor.Monitor.PLC.WriteToPLC(mbs, PLCDataType.central);
+                        Thread.Sleep(500);
+                    }
+                    continue;
+                }
+                MainBlockStru mb = new MainBlockStru
+                {
+                    centralHearbeat = -1,
+                    bookParkCmd = parking ? (short)state : (short)-1,
+                    bookFetchCmd = !parking ? (short)state : (short)-1,
+                    processCompleted = (short)-1,
+                    licenseReceived = -1
+                };
+                Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
+                Monitor.Monitor.SetNotification(mb.bookParkCmd + "," + mb.bookFetchCmd + "; 预约停车指令写入PLC", parkMonitor.model.TextColor.Log);
+                Log.WriteLog(LogType.process, LogFile.INFO, mb.bookParkCmd + "," + mb.bookFetchCmd + "预约停车指令写入PLC");
+                break;
+            }
+        }
+        /// <summary>
+        /// 根据时间段处理所有准备预约及已预约指令
+        /// </summary>
+        private void ReserveMsgHandling()
+        {
+            while (!isClosing)
+            {
+                //处理准备预约指令队列
+                lock (waitToReserveLock)
+                {
+                    for (int i = 0; i < waitToReserveQueue.Count; i++)
+                    {
+                        try
+                        {
+                            MessageUTF8 msg = waitToReserveQueue.Dequeue();
+                            DateTime startTime = DateTime.Parse(msg.bookTime);
+                            TimeSpan ts = DateTime.Now - startTime;
+                            //达到预约启动时间,放入已预约队列
+                            Console.WriteLine("当前时间差:" + ts.TotalMinutes + ",指令类型:" + msg.cmd);
+                            if (ts.TotalMinutes >= 0)
+                            {
+                                //如果是预约停车,通知PLC减少一个可预约车位数
+                                if (msg.cmd == "RESERVE")
+                                {
+                                    //本地车位更新,2->3
+                                    for (int j = 0; j < Monitor.Monitor.parkingSpaceInfo.Count; j++)
+                                    {
+                                        if (Monitor.Monitor.parkingSpaceInfo[j].spaceStatus == 2)
+                                        {
+                                            ParkingSpaceStru ps = Monitor.Monitor.parkingSpaceInfo[j];
+                                            ps.spaceStatus = 3;
+                                            Monitor.Monitor.parkingSpaceInfo[j] = ps;
+                                            break;
+                                        }
+                                    }
+                                    SendBookCmd(true, 1);
+                                    Monitor.Monitor.SetNotification("通知PLC减少可预约车位", parkMonitor.model.TextColor.Log);
+                                }
+                                reservedQueue.Enqueue(msg);
+                            }
+                            //还未达到启动时间
+                            else
+                            {
+                                waitToReserveQueue.Enqueue(msg);
+                            }
+                        }
+                        catch { }
+                    }
+                }
+                lock (reservedLock)
+                {
+                    for (int i = 0; i < reservedQueue.Count; i++)
+                    {
+                        try
+                        {
+                            MessageUTF8 msg = reservedQueue.Dequeue();
+                            DateTime startTime = DateTime.Parse(msg.bookTime);
+                            TimeSpan ts = DateTime.Now - startTime;
+                            //预约超时
+                            if (ts.TotalMinutes > msg.bookLength * 60)
+                            {
+                                Monitor.Monitor.SetNotification(msg.context + " 预约已超时", parkMonitor.model.TextColor.Warning);
+                                Log.WriteLog(LogType.process, LogFile.INFO, msg.context + " 预约已超时");
+                                //本地车位更新,3->2
+                                for (int j = 0; j < Monitor.Monitor.parkingSpaceInfo.Count; j++)
+                                {
+                                    if (Monitor.Monitor.parkingSpaceInfo[j].spaceStatus == 3)
+                                    {
+                                        ParkingSpaceStru ps = Monitor.Monitor.parkingSpaceInfo[j];
+                                        ps.spaceStatus = 2;
+                                        Monitor.Monitor.parkingSpaceInfo[j] = ps;
+                                        break;
+                                    }
+                                }
+                                //通知PLC将可预约车位数恢复一个
+                                SendBookCmd(true, 2);
+                                //恢复车辆状态
+                                UpdateVehicleState(true, 0, 0, msg.context);
+                                UpdateVehicleState(false, 0, 0, msg.context);
+                            }
+                            else
+                            {
+                                reservedQueue.Enqueue(msg);
+                            }
+                        }
+                        catch { }
+                    }
+                }
+                Thread.Sleep(5000);
+            }
+        }
+        /// <summary>
+        /// 启动消息接收,启动超时指令处理
+        /// </summary>
+        /// <param name="port"></param>
+        /// <returns></returns>
+        public bool Start(int port)
+        {
+            isClosing = false;
+            connecting = false;
+            waitToReserveQueue = new Queue<MessageUTF8>();
+            reservedQueue = new Queue<MessageUTF8>();
+            //MessageUTF8 message = new MessageUTF8();
+            //message.context = "sending message test";
+            //message.cmd = "S";
+            //message.parkingRecordsID = 1;
+            //持续进行连接尝试
+            Task.Factory.StartNew(() =>
+            {
+                //初始化后与web持续连接
+                try
+                {
+                    Connections.Connection();
+                    connected = true;
+                    while (!isClosing)
+                    {
+                        if (Connections.isAlive())
+                        {
+                            comm = new Communication();
+                            break;
+                        }
+                        else
+                        {
+                            Connections.close();
+                            Connections.Connection();
+                        }
+                        Thread.Sleep(1000);
+                    }
+                }
+                catch (Exception)
+                {
+                    connected = false;
+                    Console.WriteLine("初始web服务连接异常");
+                }
+                Connect();
+            });
+            //持续接收消息
+            receiveMsg = new Thread(() =>
+            {
+                while (!isClosing)
+                {
+                    try
+                    {
+                        if (connected && comm != null)
+                        {
+                            //byte[] bytes = new byte[256];
+                            MessageUTF8 msg = ((MessageUTF8)comm.ReceiveMessage());
+                            //string str = "";
+                            //str = Encoding.Default.GetString(bytes);
+                            //Console.WriteLine(str);
+                            if (msg != null)
+                            {
+                                MsgHandling(msg);
+                            }
+                            //Monitor.Monitor.SetNotification(msg.context);
+                        }
+                        Thread.Sleep(200);
+                    }
+                    catch { Console.WriteLine("线程已中断"); }
+                }
+            });
+            receiveMsg.Start();
+            //根据所处时间段处理预约指令
+            Task.Factory.StartNew(() =>
+            {
+                ReserveMsgHandling();
+            });
+            return true;
+        }
+        /// <summary>
+        /// 停止消息接收模块
+        /// </summary>
+        public void Stop()
+        {
+            isClosing = true;
+            try
+            {
+                Connections.close();
+            }
+            catch { }
+            //throw new NotImplementedException();
+        }
+        /// <summary>
+        /// 预约车辆入场检测
+        /// </summary>
+        /// <param name="license"></param>
+        /// <returns></returns>
+        public bool ReservedCarCheck(string license)
+        {
+            //对提前入场车辆,将预约指令丢出
+            lock (waitToReserveLock)
+            {
+                for (int i = 0; i < waitToReserveQueue.Count; i++)
+                {
+                    MessageUTF8 msg = waitToReserveQueue.Dequeue();
+                    if (msg.context != license)
+                    {
+                        waitToReserveQueue.Enqueue(msg);
+                    }
+                }
+            }
+            //已进入预约状态车辆入场,审核确认后指令丢出
+            lock (reservedLock)
+            {
+                for (int i = 0; i < reservedQueue.Count; i++)
+                {
+                    MessageUTF8 msg = reservedQueue.Dequeue();
+                    if (msg.context == license)
+                    {
+                        return true;
+                    }
+                    else
+                    {
+                        reservedQueue.Enqueue(msg);
+                    }
+                }
+            }
+            return false;
+        }
+        /// <summary>
+        /// 主动连接web服务器
+        /// </summary>
+        public void Connect()
+        {
+            //持续判断连接状态并重连
+            if (!connecting)
+            {
+                lock (connectLock)
+                {
+                    connecting = true;
+                    int count = 3;
+                    while (!isClosing)
+                    {
+                        //if (receiveMsg != null)
+                        //    Console.WriteLine(Connections.isAlive() + ", " + receiveMsg.ThreadState.ToString());
+                        Console.WriteLine(Connections.isAlive() + "," + count + "," + connected);
+                        if (Connections.isAlive())
+                        {
+                            if (!connected)
+                            {
+                                comm = new Communication();
+                                Monitor.Monitor.SetNotification("web已连接上", parkMonitor.model.TextColor.Info);
+                            }
+                            count = 3;
+                            connected = true;
+                            if (receiveMsg != null && receiveMsg.ThreadState == ThreadState.Aborted)
+                            {
+                                try
+                                {
+                                    receiveMsg.Start();
+                                }
+                                catch (Exception ex) { Console.WriteLine(ex.Message); }
+                            }
+                        }
+                        else
+                        {
+                            if (count == 3 && connected)
+                                Monitor.Monitor.SetNotification("web连接已断开", parkMonitor.model.TextColor.Warning);
+                            else if (count == 0)
+                            {
+                                try
+                                {
+                                    Connections.close();
+                                    //comm = null;
+                                }
+                                catch (Exception ex) { Console.WriteLine("网络异常,停止尝试"); }
+                                break;
+                            }
+                            else if (connected)
+                            {
+                                try { Connections.close(); }
+                                catch (Exception) { Console.WriteLine("服务没有开启,请检查服务器"); }
+                            }
+                            connected = false;
+                            count--;
+                            try
+                            {
+                                if (receiveMsg != null && receiveMsg.ThreadState == ThreadState.WaitSleepJoin)
+                                {
+                                    receiveMsg.Interrupt();
+                                }
+                            }
+                            catch (Exception ex)
+                            {
+                                Monitor.Monitor.SetNotification("连接断开,终止消息接收线程", parkMonitor.model.TextColor.Log);
+                            }
+                            Console.WriteLine(" 连接关闭,需要重新连接注册");
+                            try { Connections.Connection(); } catch { Console.WriteLine("尝试连接异常"); }
+                        }
+                        Thread.Sleep(1000);
+                    }
+                    Monitor.Monitor.SetNotification("重连web服务器超时,请检查网络并手动连接web服务器", parkMonitor.model.TextColor.Error);
+                    connecting = false;
+                }
+            }
+            else
+            {
+                if (!connected)
+                    Monitor.Monitor.SetNotification("正在尝试连接,请勿重复点击", parkMonitor.model.TextColor.Warning);
+                else
+                    Monitor.Monitor.SetNotification("已连接,请勿重复点击", parkMonitor.model.TextColor.Info);
+            }
+        }
+        /// <summary>
+        /// 获取连接状态
+        /// </summary>
+        /// <returns></returns>
+        public bool GetConnectStatus()
+        {
+            return Connections.isAlive();
+        }
+    }
+}

+ 338 - 0
parkspace_manager/communication/Communicator.cs

@@ -0,0 +1,338 @@
+using NNanomsg;
+using NNanomsg.Protocols;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Google.Protobuf;
+using Message;
+
+namespace parkspace_manager
+{
+    class Communicator
+    {
+        private readonly static object lockObj = new object();
+        /// <summary>
+        /// 单例
+        /// </summary>
+        private static Communicator instance = null;
+        /// <summary>
+        /// 消息超时时间
+        /// </summary>
+        private static int timeout_milli = 2000;
+        /// <summary>
+        /// 接收解析锁
+        /// </summary>
+        private object m_receive_lock;
+        /// <summary>
+        /// 发送锁
+        /// </summary>
+        private object m_send_lock;
+        /// <summary>
+        /// 车位状态访问锁
+        /// </summary>
+        private object m_parkspace_status_access_lock;
+        /// <summary>
+        /// 车位消息队列
+        /// </summary>
+        private Parkspace_allocation_status_msg m_parkspace_current_status;
+        /// <summary>
+        /// 当前时间
+        /// </summary>
+        private DateTime m_last_parkspace_status_time;
+        /// <summary>
+        /// 车位状态超时
+        /// </summary>
+        private bool mb_parkspace_status_timeout;
+        /// <summary>
+        /// 发送队列
+        /// </summary>
+        private Queue<ByteString> m_send_queue;
+        /// <summary>
+        /// 接收队列
+        /// </summary>
+        private Queue<ByteString> m_receive_queue;
+        /// <summary>
+        /// 发送线程
+        /// </summary>
+        private Thread m_thread_send;
+        /// <summary>
+        /// 接收线程
+        /// </summary>
+        private Thread m_thread_receive;
+        /// <summary>
+        /// 解析接收string到protobuf消息
+        /// </summary>
+        private Thread m_thread_decode_receive;
+        /// <summary>
+        /// nanomsg 通信句柄
+        /// </summary>
+        private BusSocket m_socket;
+        /// <summary>
+        /// 实例退出标记
+        /// </summary>
+        private bool mb_exit;
+        /// <summary>
+        /// 初始化标记
+        /// </summary>
+        private bool mb_initialized;
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        /// <param name="server_ip"></param>
+        /// <param name="server_port"></param>
+        private Communicator()
+        {
+            mb_exit = false;
+            mb_initialized = false;
+            mb_parkspace_status_timeout = false;
+            m_receive_lock = new object();
+            m_send_lock = new object();
+            m_parkspace_status_access_lock = new object();
+            m_receive_queue = new Queue<ByteString>();
+            m_send_queue = new Queue<ByteString>();
+            m_parkspace_current_status = new Parkspace_allocation_status_msg();
+        }
+
+        /// <summary>
+        /// 析构函数
+        /// </summary>
+        ~Communicator()
+        {
+            mb_exit = true;
+            if (m_thread_send != null)
+            {
+                m_thread_send.Abort();
+            }
+            if (m_thread_receive != null)
+            {
+                m_thread_receive.Abort();
+            }
+            if (m_thread_decode_receive != null)
+                m_thread_decode_receive.Abort();
+        }
+
+        /// <summary>
+        /// 单例访问
+        /// </summary>
+        public static Communicator Instance
+        {
+            get
+            {
+                if (instance == null)
+                {
+                    lock (lockObj)
+                    {
+                        if (instance == null)
+                        {
+                            instance = new Communicator();
+                        }
+                    }
+                }
+                return instance;
+            }
+        }
+
+        /// <summary>
+        /// 初始化
+        /// </summary>
+        /// <returns></returns>
+        public bool Init()
+        {
+            mb_initialized = true; 
+            m_socket = new BusSocket();
+            m_thread_receive = new Thread(new ParameterizedThreadStart(Receive_thread_function));
+            m_thread_send = new Thread(new ParameterizedThreadStart(Send_thread_function));
+            m_thread_decode_receive = new Thread(new ParameterizedThreadStart(Decode_thread_function));
+            m_thread_receive.Start(this);
+            m_thread_send.Start(this);
+            m_thread_decode_receive.Start(this);
+            return true;
+        }
+
+        /// <summary>
+        /// 反初始化
+        /// </summary>
+        /// <returns></returns>
+        public bool Uninit()
+        {
+            mb_exit = true;
+            if(m_thread_receive!=null)
+                m_thread_receive.Join();
+            if(m_thread_send!=null)
+                m_thread_send.Join();
+            if (m_thread_decode_receive != null)
+                m_thread_decode_receive.Join();
+            return true;
+        }
+
+        /// <summary>
+        /// 连接
+        /// </summary>
+        /// <param name="server_address"></param>
+        /// <returns></returns>
+        public bool Connect(string server_address)
+        {
+            if (m_socket == null)
+                return false;
+            NanomsgEndpoint end_point = m_socket.Connect(server_address);
+            return true;
+        }
+
+        /// <summary>
+        /// 绑定本地端口监听
+        /// </summary>
+        /// <param name="self_address"></param>
+        /// <returns></returns>
+        public bool Bind(string self_address)
+        {
+            if (m_socket == null)
+                return false;
+            NanomsgEndpoint end_point = m_socket.Bind(self_address);
+            return true;
+        }
+
+        /// <summary>
+        /// 获取当前车位状态
+        /// </summary>
+        public bool Get_parkspace_status(ref Parkspace_allocation_status_msg msg)
+        {
+            lock (m_parkspace_status_access_lock)
+            {
+                msg.MergeFrom(m_parkspace_current_status);
+            }
+            if((DateTime.Now-m_last_parkspace_status_time).Milliseconds > timeout_milli)
+            {
+                return false;
+            }
+            else
+            {
+                return true;
+            }
+        }
+
+        /// <summary>
+        /// 发送手动更新车位消息
+        /// </summary>
+        /// <returns></returns>
+        public bool Send_msg()
+        {
+
+        }
+
+        /// <summary>
+        /// 接收线程函数
+        /// </summary>
+        /// <param name="handle"></param>
+        private static void Receive_thread_function(object handle)
+        {
+            if (handle == null)
+                return;
+            Communicator comm = (Communicator)handle;
+            while(!comm.mb_exit)
+            {
+                if (!comm.mb_initialized || comm.m_socket==null)
+                    continue;
+                byte[] data = comm.m_socket.ReceiveImmediate();
+                if(data!=null && data.Length>0)
+                {
+                    lock (comm.m_receive_lock)
+                    {
+                        //ByteString tmp = ByteString.CopyFrom(data);
+                        //Base_msg base_msg = Base_msg.Parser.ParseFrom(tmp);
+                        //Console.WriteLine(base_msg.ToString());
+                        comm.m_receive_queue.Enqueue(ByteString.CopyFrom(data));
+                    }
+                }
+                Thread.Sleep(50);
+            }
+            Console.WriteLine("receive thread exit");
+        }
+
+        /// <summary>
+        /// 发送线程函数
+        /// </summary>
+        /// <param name="handle"></param>
+        private static void Send_thread_function(object handle)
+        {
+            if (handle == null)
+                return;
+            Communicator comm = (Communicator)handle;
+            while (!comm.mb_exit)
+            {
+                if (!comm.mb_initialized || comm.m_socket == null)
+                    continue;
+                lock(comm.m_send_lock)
+                {
+
+                }
+
+                Thread.Sleep(500);
+            }
+            Console.WriteLine("send thread exit");
+        }
+
+        /// <summary>
+        /// 解析线程函数
+        /// </summary>
+        /// <param name="handle"></param>
+        private static void Decode_thread_function(object handle)
+        {
+            if (handle == null)
+                return;
+            Communicator comm = (Communicator)handle;
+            while (!comm.mb_exit)
+            {
+                DateTime current_time = DateTime.Now;
+
+                if (!comm.mb_initialized)
+                    continue;
+                Parkspace_allocation_status_msg parkspace_status = null;
+                lock (comm.m_receive_lock)
+                {
+                    if (comm.m_receive_queue.Count > 0)
+                    {
+                        ByteString msg_str = comm.m_receive_queue.Dequeue();
+                        parkspace_status = comm.Decode_msg(msg_str);
+                        if (parkspace_status != null)
+                        {
+                            comm.m_last_parkspace_status_time = DateTime.Now;
+                            Console.WriteLine(parkspace_status.ToString());
+                        }
+                    }
+                }
+                if(parkspace_status != null)
+                {
+                    lock (comm.m_parkspace_status_access_lock)
+                    {
+                        comm.m_parkspace_current_status = parkspace_status;
+                        //comm.m_parkspace_current_status.MergeFrom(parkspace_status);
+                    }
+                }
+                Thread.Sleep(50);
+            }
+            Console.WriteLine("decode thread exit");
+        }
+
+        /// <summary>
+        /// 解析string到protobuf消息
+        /// </summary>
+        private Parkspace_allocation_status_msg Decode_msg(ByteString msg)
+        {
+            Base_msg base_msg = Base_msg.Parser.ParseFrom(msg);
+            if(base_msg.BaseInfo.MsgType == Message_type.EParkspaceAllocationStatusMsg)
+            {
+                Parkspace_allocation_status_msg parsed_msg = Parkspace_allocation_status_msg.Parser.ParseFrom(msg);
+                return parsed_msg;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+    }
+}

+ 477 - 0
parkspace_manager/db_manager/DBManager.cs

@@ -0,0 +1,477 @@
+using db;
+using MySql.Data.MySqlClient;
+using parkMonitor.LOG;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkspace_manager
+{
+    class DBManager
+    {
+        /// <summary>
+        /// 远程数据库操作句柄
+        /// </summary>
+        public static DBOperation remoteDBOper;
+        /// <summary>
+        /// 本地数据库操作句柄
+        /// </summary>
+        public static DBOperation localDBOper;
+
+        public DBManager()
+        {
+
+        }
+        ~DBManager()
+        {
+
+        }
+        ///// <summary>
+        ///// 返回停车记录信息
+        ///// </summary>
+        ///// <returns></returns>
+        //public static List<object[]> GetParkingRecords(string license = "", string startTime = "", string endTime = "")
+        //{
+        //    DateTime now = DateTime.Now;
+        //    List<object[]> result = new List<object[]>();
+        //    string getParkingRecordsSql = "";
+        //    if (startTime == "" || endTime == "")
+        //    {
+        //        DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
+        //        DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
+        //        getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice,paymentStatus " +
+        //        "from parkingrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and (realParkTime like '" + now.ToString("yyyy-MM-dd") + "%' or realParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "%' or realParkTime like '" + twoDaysAgo.ToString("yyyy-MM-dd") + "%');";
+        //    }
+        //    else
+        //    {
+        //        getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice,paymentStatus " +
+        //        "from parkingrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and realParkTime >= '" + startTime + "' and realParkTime <= '" + endTime + "';";
+        //    }
+        //    if (localDBOper != null)
+        //    {
+        //        lock (localDBOper)
+        //        {
+        //            MySqlDataReader reader = localDBOper.Query(getParkingRecordsSql);
+        //            try
+        //            {
+        //                while (reader != null && reader.Read())
+        //                {
+        //                    if (reader.HasRows)
+        //                    {
+        //                        object[] temp = new object[reader.FieldCount];
+        //                        reader.GetValues(temp);
+        //                        result.Add(temp);
+        //                    }
+        //                }
+        //            }
+        //            catch (Exception e) { Console.WriteLine(e.Message); }
+        //            try
+        //            {
+        //                if (reader != null)
+        //                {
+        //                    reader.Close();
+        //                    reader.Dispose();
+        //                }
+        //            }
+        //            catch (Exception e) { Console.WriteLine(e.Message); }
+        //        }
+        //    }
+        //    result.Reverse();
+        //    return result;
+        //}
+        ///// <summary>
+        ///// 返回预约记录信息
+        ///// </summary>
+        ///// <returns></returns>
+        //public static List<object[]> GetOrderRecords(bool localDB, string license = "", string startTime = "", string endTime = "")
+        //{
+        //    DateTime now = DateTime.Now;
+        //    List<object[]> result = new List<object[]>();
+        //    string getOrderRecordsSql = "";
+        //    if (startTime == "" || endTime == "")
+        //    {
+        //        DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
+        //        DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
+        //        getOrderRecordsSql = "select orderRecordsID,userID,numberPlate,bookParkTime,cancelBookTime,bookFetchTime,bookHour,bookPrice,bookState " +
+        //        "from orderrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and (bookParkTime like '" + now.ToString("yyyy-MM-dd") +
+        //        "%' or bookParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "%' or bookFetchTime like '" + now.ToString("yyyy-MM-dd") + "%' or bookFetchTime like '" + yesterday.ToString("yyyy-MM-dd") + "%');";
+        //    }
+        //    else
+        //    {
+        //        getOrderRecordsSql = "select orderRecordsID,userID,numberPlate,bookParkTime,cancelBookTime,bookFetchTime,bookHour,bookPrice,bookState " +
+        //        "from orderrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and ((bookParkTime >= '" + startTime + "' and bookParkTime <= '" + endTime + "') or (bookFetchTime >= '" + startTime + "' and bookFetchTime <= '" + endTime + "'));";
+        //    }
+        //    if (localDBOper != null)
+        //    {
+        //        lock (localDBOper)
+        //        {
+        //            MySqlDataReader reader;
+        //            if (localDB)
+        //                reader = localDBOper.Query(getOrderRecordsSql);
+        //            else
+        //                reader = remoteDBOper.Query(getOrderRecordsSql);
+        //            try
+        //            {
+        //                while (reader != null && reader.Read())
+        //                {
+        //                    if (reader.HasRows)
+        //                    {
+        //                        object[] temp = new object[reader.FieldCount];
+        //                        reader.GetValues(temp);
+        //                        result.Add(temp);
+        //                    }
+        //                }
+        //            }
+        //            catch (Exception e) { Console.WriteLine(e.Message); }
+        //            try
+        //            {
+        //                if (reader != null)
+        //                {
+        //                    reader.Close();
+        //                    reader.Dispose();
+        //                }
+        //            }
+        //            catch (Exception e) { Console.WriteLine(e.Message); }
+        //        }
+        //    }
+        //    result.Reverse();
+        //    return result;
+        //}
+        ///// <summary>
+        ///// 更新停车记录关于支付的信息
+        ///// </summary>
+        ///// <param name="license"></param>
+        ///// <param name="receiptNum"></param>
+        ///// <param name="parkingFee"></param>
+        ///// <param name="paymentStatus"></param>
+        ///// <returns></returns>
+        //public static bool UpdateParkingRecords(string license, string receiptNum, string parkingFee, string paymentStatus, bool local)
+        //{
+        //    bool result = false;
+        //    string updateRecordsSql = "update parkingrecords set parkingPrice = " + parkingFee + " ,paymentStatus = " + paymentStatus + " where numberPlate = '" + license + "' and receiptNum = " + receiptNum + ";";
+        //    List<string> updateList = new List<string>();
+        //    updateList.Add(updateRecordsSql);
+        //    if (local && localDBOper != null)
+        //    {
+        //        lock (localDBOper)
+        //        {
+        //            try
+        //            {
+        //                result = localDBOper.UpdateTransaction(updateList);
+        //            }
+        //            catch { Log.WriteLog(LogType.database, "更新本地停车记录中支付信息出现异常。\n" + updateRecordsSql); return false; }
+        //        }
+        //    }
+        //    else if (!local && remoteDBOper != null)
+        //    {
+        //        lock (remoteDBOper)
+        //        {
+        //            try
+        //            {
+        //                result = remoteDBOper.UpdateTransaction(updateList);
+        //            }
+        //            catch { Log.WriteLog(LogType.database, "更新云端记录中支付信息出现异常。\n" + updateRecordsSql); return false; }
+        //        }
+        //    }
+        //    return result;
+        //}
+        ///// <summary>
+        ///// 更新所有车位信息
+        ///// </summary>
+        //private static void UpdateAllParkingSpace(bool remote)
+        //{
+        //    string findParkingSpace = "select parkingSpaceID from parkingspace;";
+        //    HashSet<int> recordsIDSet = new HashSet<int>();
+        //    DBOperation dbHandle = null;
+        //    if (!remote)
+        //    {
+        //        dbHandle = localDBOper;
+        //    }
+        //    else
+        //    {
+        //        dbHandle = remoteDBOper;
+        //    }
+        //    lock (dbHandle)
+        //    {
+        //        MySqlDataReader reader = dbHandle.Query(findParkingSpace);
+        //        if (reader != null)
+        //        {
+        //            try
+        //            {
+        //                while (reader.Read())
+        //                {
+        //                    if (reader.HasRows)
+        //                    {
+        //                        recordsIDSet.Add(reader.GetInt32("parkingSpaceID"));
+        //                    }
+        //                }
+        //            }
+        //            catch { Log.WriteLog(LogType.process, LogFile.INFO, "数据库车位查询异常"); }
+        //            try
+        //            {
+        //                reader.Close();
+        //                reader.Dispose();
+        //            }
+        //            catch { }
+        //        }
+        //    }
+        //    List<string> updateSpaceList = new List<string>();
+        //    List<string> insertSpaceList = new List<string>();
+        //    string updateParkingSpace = "";
+        //    string insertParkingSpace = "";
+        //    for (int i = 0; i < parkingSpaceInfo.Count; i++)
+        //    {
+        //        if (recordsIDSet.Contains(parkingSpaceInfo[i].parkingSpace))
+        //        {
+        //            updateParkingSpace = "update parkingspace set parkingSpaceX = " + parkingSpaceInfo[i].coordX +
+        //                ",parkingSpaceY = " + parkingSpaceInfo[i].coordY + ",parkingSpaceZ = " + parkingSpaceInfo[i].floorNo + ",parkingSpaceState = " + parkingSpaceInfo[i].spaceStatus + " where (parkingSpaceID = " + parkingSpaceInfo[i].parkingSpace + ");";
+        //            updateSpaceList.Add(updateParkingSpace);
+        //        }
+        //        else
+        //        {
+        //            if (!remote)
+        //            {
+        //                insertParkingSpace = "insert into parkingspace (parkingSpaceID,parkingSpaceX,parkingSpaceY,parkingSpaceZ,parkingSpaceState) values (" + parkingSpaceInfo[i].parkingSpace + "," + parkingSpaceInfo[i].coordX +
+        //                    "," + parkingSpaceInfo[i].coordY + "," + parkingSpaceInfo[i].floorNo + "," + parkingSpaceInfo[i].spaceStatus + ");";
+        //                insertSpaceList.Add(insertParkingSpace);
+        //            }
+        //            else
+        //            {
+        //                insertParkingSpace = "insert into parkingspace (parkingSpaceID,parkingSpaceX,parkingSpaceY,parkingSpaceZ,parkingSpaceState,garageID,parkingSpaceName) values (" + parkingSpaceInfo[i].parkingSpace + "," + parkingSpaceInfo[i].coordX +
+        //                    "," + parkingSpaceInfo[i].coordY + "," + parkingSpaceInfo[i].floorNo + "," + parkingSpaceInfo[i].spaceStatus + "," + garageID + ",'默认');";
+        //                insertSpaceList.Add(insertParkingSpace);
+        //            }
+        //        }
+        //    }
+        //    try
+        //    {
+        //        lock (dbHandle)
+        //        {
+        //            int id = 0;
+        //            dbHandle.UpdateTransaction(updateSpaceList);
+        //            dbHandle.Insert(insertSpaceList, out id);
+        //        }
+        //    }
+        //    catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "更新本地所有车位异常"); Console.WriteLine("更新本地所有车位异常" + e.Message); }
+        //}
+        ///// <summary>
+        ///// 更新车辆状态
+        ///// </summary>
+        ///// <param name="lic"></param>
+        ///// <param name="state"></param>
+        //private static void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote, int parkingSpaceID)
+        //{
+        //    if (lic != "")
+        //    {
+        //        MySqlDataReader reader;
+        //        //查询车辆是否在车辆表中
+        //        string checkVehicleState = "select * from vehicle where numberPlate = '" + lic + "';";
+        //        if (!remote)
+        //        {
+        //            reader = localDBOper.Query(checkVehicleState);
+        //        }
+        //        else
+        //        {
+        //            //Log.WriteLog(LogType.database, "update, query: \n");
+        //            reader = remoteDBOper.Query(checkVehicleState);
+        //            //Log.WriteLog(LogType.database, "update, query: \n" + checkVehicleState);
+        //        }
+        //        if (reader != null)
+        //        {
+        //            if (reader.Read() && reader.HasRows)
+        //            {
+        //                //更新车辆状态
+        //                string updateVehicleState = "";
+        //                string updateRemoteVehicleState = "";
+        //                if (park)
+        //                {
+        //                    if (parkingRecordsID > 0)
+        //                    {
+        //                        if (parkingSpaceID == 0)
+        //                        {
+        //                            updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
+        //                            updateRemoteVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",garageID = " + garageID + " where numberPlate = '" + lic + "';";
+        //                        }
+        //                        else
+        //                        {
+        //                            updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",parkingSpaceID = " + parkingSpaceID + " where numberPlate = '" + lic + "';";
+        //                            updateRemoteVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",parkingSpaceID = " + parkingSpaceID + ",garageID = " + garageID + " where numberPlate = '" + lic + "';";
+        //                        }
+        //                    }
+        //                    else
+        //                    {
+        //                        updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+        //                        updateRemoteVehicleState = updateVehicleState;
+        //                    }
+        //                }
+        //                else
+        //                {
+        //                    updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+        //                    updateRemoteVehicleState = updateVehicleState;
+        //                }
+        //                List<string> list = new List<string>();
+        //                if (!remote)
+        //                {
+        //                    list.Add(updateVehicleState);
+        //                    localDBOper.UpdateTransaction(list);
+        //                }
+        //                else
+        //                {
+        //                    //Log.WriteLog(LogType.database, "update, update: \n");
+        //                    list.Add(updateRemoteVehicleState);
+        //                    remoteDBOper.UpdateTransaction(list);
+        //                    //Log.WriteLog(LogType.database, "update, update: \n" + updateRemoteVehicleState);
+        //                }
+        //            }
+        //            else
+        //            {
+        //                //插入车辆
+        //                string insertVehicleWithState = "";
+        //                if (park)
+        //                {
+        //                    if (parkingRecordsID > 0)
+        //                        insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState,parkingRecordsID) values " +
+        //                    "('" + lic + "',NULL,'" + state + "'," + parkingRecordsID + ");";
+        //                    else
+        //                        insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState) values " +
+        //                    "('" + lic + "',NULL,'" + state + "');";
+        //                }
+        //                else
+        //                {
+        //                    Log.WriteLog(LogType.process, LogFile.ERROR, "取车无法获得车辆信息");
+        //                    Console.WriteLine("明显异常,取车发现无车辆");
+        //                    try
+        //                    {
+        //                        reader.Close();
+        //                        reader.Dispose();
+        //                    }
+        //                    catch { }
+        //                    return;
+        //                }
+
+        //                List<string> list = new List<string>();
+        //                list.Add(insertVehicleWithState);
+        //                int id = 0;
+        //                if (!remote)
+        //                {
+        //                    localDBOper.Insert(list, out id);
+        //                }
+        //                else
+        //                {
+        //                    remoteDBOper.Insert(list, out id);
+        //                }
+        //            }
+        //            try
+        //            {
+        //                reader.Close();
+        //                reader.Dispose();
+        //            }
+        //            catch { }
+        //        }
+        //    }
+        //}
+        ///// <summary>
+        ///// 验证会员信息
+        ///// </summary>
+        ///// <param name="ts"></param>
+        ///// <param name="userID"></param>
+        ///// <param name="license"></param>
+        ///// <param name="status"></param>
+        //private static void ValidateUserInfo(TerminalStru ts, int userID, string license, out int status)
+        //{
+        //    status = 0;
+        //    //与云端数据比对
+        //    string checkNetSql = "select * from user where userID = 1;";
+        //    MySqlDataReader readerTest = remoteDBOper.Query(checkNetSql);
+        //    if (readerTest != null)
+        //    {
+        //        if (readerTest.Read() && readerTest.HasRows)
+        //        {
+        //            try
+        //            {
+        //                readerTest.Close();
+        //                readerTest.Dispose();
+        //            }
+        //            catch { }
+        //            string userInfoCheckSql = "select * from usercarrelation where userID = '" + userID + "' and numberPlate = '" + license + "';";
+        //            MySqlDataReader reader = remoteDBOper.Query(userInfoCheckSql);
+        //            if (reader != null && reader.Read() && reader.HasRows && userID != 0 && license != "")
+        //            {
+        //                //ts.licVerification = 1;//验证成功
+        //                //PLC.WriteToPLC(ts, PLCDataType.central);
+        //                status = 1;
+        //                Log.WriteLog(LogType.process, LogFile.INFO, "号牌验证成功");
+        //                SetNotification("注册用户,号牌验证成功", parkMonitor.model.TextColor.Info);
+        //            }
+        //            else
+        //            {
+        //                //ts.licVerification = 1;//验证失败
+        //                //PLC.WriteToPLC(ts, PLCDataType.central);
+        //                status = 2;
+        //                Log.WriteLog(LogType.process, LogFile.WARNING, "号牌验证失败");
+        //                SetNotification("注册用户,号牌验证失败", parkMonitor.model.TextColor.Error);
+        //            }
+        //            try
+        //            {
+        //                reader.Close();
+        //                reader.Dispose();
+        //            }
+        //            catch { }
+        //        }
+        //        else
+        //        {
+        //            try
+        //            {
+        //                readerTest.Close();
+        //                readerTest.Dispose();
+        //            }
+        //            catch { }
+        //            //ts.licVerification = 1;//网络异常,跳过验证
+        //            //PLC.WriteToPLC(ts, PLCDataType.central);
+        //            status = 1;
+        //            Log.WriteLog(LogType.process, LogFile.ERROR, "网络异常,无法验证号牌");
+        //        }
+        //    }
+        //}
+        ///// <summary>
+        ///// 查询停车记录id
+        ///// </summary>
+        ///// <param name="querySql"></param>
+        ///// <param name="recordsID"></param>
+        ///// <param name="remote"></param>
+        //private static void QueryParkingRecordsID(string querySql, out int recordsID, bool remote)
+        //{
+        //    recordsID = 0;
+        //    MySqlDataReader reader = null;
+        //    if (!remote)
+        //    {
+        //        reader = localDBOper.Query(querySql);
+        //    }
+        //    else
+        //    {
+        //        reader = remoteDBOper.Query(querySql);
+        //    }
+        //    if (reader != null)
+        //    {
+        //        try
+        //        {
+        //            while (reader.Read())
+        //            {
+        //                if (reader.HasRows)
+        //                    recordsID = reader.GetInt32("parkingRecordsID");
+        //            }
+        //        }
+        //        catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "查询停车记录id失败"); Console.WriteLine(e.Message); };
+        //        try
+        //        {
+        //            reader.Close();
+        //            reader.Dispose();
+        //        }
+        //        catch { }
+        //    }
+        //}
+
+    }
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 2287 - 0
parkspace_manager/message/MessageBase.cs


Diff do ficheiro suprimidas por serem muito extensas
+ 2764 - 0
parkspace_manager/message/ParkspaceAllocationMessage.cs


+ 158 - 0
parkspace_manager/message/message_base.proto

@@ -0,0 +1,158 @@
+syntax = "proto2";
+package message;
+
+//消息类型定义;每个在网络上传输的消息必须含有这个属性
+enum Message_type
+{
+    eBase_msg=0x00;
+    eCommand_msg=0x01;                      //指令消息
+
+
+    eLocate_status_msg=0x11;                //定位模块状态消息
+    eLocate_request_msg=0x12;               //定位请求消息
+    eLocate_response_msg=0x13;              //定位反馈消息
+
+
+    eDispatch_status_msg=0x21;                //调度模块硬件状态消息
+    eDispatch_request_msg=0x22;              //请求调度消息
+    eDispatch_response_msg=0x23;             //调度结果反馈消息
+
+    eParkspace_allocation_status_msg=0x31;  //车位分配模块状态消息,包括车位信息
+    eParkspace_allocation_request_msg=0x32; //请求分配车位消息
+    eParkspace_allocation_response_msg=0x33;//分配车位结果反馈消息
+    eParkspace_search_request_msg = 0x34;		//查询车位请求消息
+    eParkspace_search_response_msg = 0x35;		//查询车位反馈消息
+    eParkspace_release_request_msg = 0x36;		//释放车位请求消息
+    eParkspace_release_response_msg = 0x37;		//释放车位反馈消息
+    eParkspace_force_update_request_msg = 0x38;	//手动修改车位消息
+    eParkspace_force_update_response_msg = 0x39;//手动修改车位反馈消息
+    eParkspace_confirm_alloc_request_msg = 0x3A;//确认分配车位请求消息
+    eParkspace_confirm_alloc_response_msg = 0x3B;//确认分配车位反馈消息
+
+
+    eStore_command_request_msg=0x41;        //终端停车请求消息
+    eStore_command_response_msg=0x42;       //停车请求反馈消息
+    ePickup_command_request_msg=0x43;       //取车请求消息
+    ePickup_command_response_msg=0x44;       //取车请求反馈消息
+
+
+
+    eStoring_process_statu_msg=0x90;        //停车进度条消息
+    ePicking_process_statu_msg=0x91;        //取车进度消息
+
+
+}
+
+//通讯单元
+enum Communicator
+{
+    eEmpty=0x0000;
+    eMain=0x0001;    //主流程
+
+    eTerminor=0x0100;
+    //车位表
+    eParkspace=0x0200;
+    //测量单元
+    eMeasurer=0x0300;
+    //调度机构
+    eDispatch=0x0400;
+    //...
+
+
+}
+////base message 用于解析未知类型的消息
+message Base_info
+{
+    required Message_type               msg_type=1;
+    optional int32                      timeout_ms=2;
+    required Communicator               sender=3;                       //发送者
+    required Communicator               receiver=4;                     //接收者
+}
+
+// 事件,停车或者取车
+enum Event
+{
+    eStoring=1;
+    ePicking=2;
+}
+
+message Base_msg
+{
+    required Base_info                  base_info=1;
+}
+
+//错误等级,用来做故障处理
+enum Error_level
+{
+    NORMAL                = 0;      //    正常,没有错误,默认值0
+
+    NEGLIGIBLE_ERROR      = 1;      //    轻微故障;可忽略的故障,NEGLIGIBLE_ERROR
+
+    MINOR_ERROR           = 2;      //    一般故障,MINOR_ERROR
+
+    MAJOR_ERROR           = 3;      //    严重故障,MAJOR_ERROR
+
+    CRITICAL_ERROR        = 4;      //    致命故障,CRITICAL_ERROR
+
+}
+
+message Error_manager
+{
+    required int32                      error_code = 1;
+    optional Error_level                error_level = 2;
+    optional string                     error_description = 3;
+}
+
+//测量结果结构体
+message Locate_information
+{    
+    optional float locate_x = 1;				//整车的中心点x值; 四轮的中心
+    optional float locate_y = 2;				//整车的中心点y值; 四轮的中心
+    optional float locate_angle = 3;			//整车的旋转角; 四轮的旋转角
+    optional float locate_length = 4;		    //整车的长度; 用于规避碰撞
+    optional float locate_width = 5;			//整车的宽度; 用于规避碰撞
+    optional float locate_height = 6;		    //整车的高度; 用于规避碰撞
+    optional float locate_wheel_base = 7;	    //整车的轮距; 前后轮的距离; 用于机器人或agv的抓车
+    optional float locate_wheel_width = 8;	    //整车的轮距; 左右轮的距离; 用于机器人或agv的抓车
+    optional bool locate_correct = 9;		    //整车的校准标记位
+}
+
+message Car_info
+{
+    optional float                      car_length=1;           //车长
+    optional float                      car_width=2;            //车宽
+    optional float                      car_height=3;           //车高
+    optional string                     license=4;              //车辆凭证号
+}
+
+//车位状态枚举
+enum Parkspace_status
+{
+    eParkspace_empty            = 0;         //空闲,可分配
+    eParkspace_occupied         = 1;         //被占用,不可分配
+    eParkspace_reserved        = 2;         //被预约,预约车辆可分配
+    eParkspace_locked           = 3;         //临时锁定,不可分配
+    eParkspace_error            = 4;         //车位机械结构或硬件故障   
+}
+
+enum Direction
+{
+    eForward = 1;
+    eBackward = 2;
+}
+
+//单个车位基本信息与状态信息
+message Parkspace_info
+{
+    optional int32              parkspace_id=1;         //车位编号
+    optional int32              index=2;                //同层编号
+    optional Direction          direction=3;            //前后
+    optional int32              floor=4;                //楼层
+    optional float              length=5;               //车位长
+    optional float              width=6;                //车位宽
+    optional float              height=7;               //车位高
+    optional Parkspace_status   parkspace_status=8;     //车位当前状态
+    optional Car_info           car_info=9;              //当前车位存入车辆的凭证号
+    optional string             entry_time=10;          //入场时间
+    optional string             leave_time=11;          //离场时间
+}

+ 116 - 0
parkspace_manager/message/parkspace_allocation_message.proto

@@ -0,0 +1,116 @@
+syntax = "proto2";
+package message;
+import "message_base.proto";
+
+// 请求
+// 1.分配车位
+// 2.查询车辆位置
+// 3.解锁车位
+// 4.手动操作修改车位状态
+// 5.临时锁定车位
+
+//车辆状态枚举
+enum Vehicle_status
+{
+    eVehicle_idle           = 0;         //车辆空闲
+    eVehicle_in_garage      = 1;         //车辆已入库
+    eVehicle_parking        = 2;         //车辆停车中
+    eVehicle_fetching       = 3;         //车辆取车中
+    eVehicle_reserved       = 4;         //已预约未停入
+    eVehicle_unknown        = 5;         //未知状态
+}
+
+//1.分配车位请求
+message Parkspace_allocation_request_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Car_info                   car_info=3;
+    required int32                      terminal_id=4;          //终端id,优化车位分配用
+}
+
+//分配车位反馈
+message Parkspace_allocation_response_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Error_manager              error_manager=3;        //分配成功与否标志
+    required Parkspace_info             allocated_space_info=4; //分配车位信息
+}
+
+//2.查询车辆位置请求
+message Parkspace_search_request_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Car_info                   car_info=3;              //车辆凭证或号牌
+}
+
+//查询车辆位置反馈
+message Parkspace_search_response_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Error_manager              error_manager=3;        //分配成功与否标志
+    optional Parkspace_info             car_position=4;         //待查询车辆存放位置
+}
+
+//3.解锁车位请求
+message Parkspace_release_request_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Parkspace_info             release_space_info=3;   //待释放车位信息
+}
+
+//解锁车位反馈
+message Parkspace_release_response_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Error_manager              error_manager=3;        //分配成功与否标志
+    required Parkspace_info             release_space_info=4;   //待释放车位信息
+}
+
+// 4.手动操作修改车位状态
+message Parkspace_force_update_request_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Parkspace_info             update_space_info=3;    //待手动修改车位信息,通过id定位
+}
+
+//手动操作反馈
+message Parkspace_force_update_response_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Error_manager              error_manager=3;        //分配成功与否标志
+    required Parkspace_info             update_space_info=4;    //已修改后的车位信息
+}
+
+// 5.临时锁定车位
+message Parkspace_confirm_alloc_request_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Parkspace_info             confirm_space_info=3;    //已修改后的车位信息
+}
+
+message Parkspace_confirm_alloc_response_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required string                     command_key=2;           //指令唯一标识符id
+    required Error_manager              error_manager=3;        //分配成功与否标志
+    required Parkspace_info             confirm_alloc_space_info=4;    //已修改后的车位信息
+}
+
+// 车位心跳状态信息
+message Parkspace_allocation_status_msg
+{
+    required Base_info                  base_info=1;            //消息类型
+    required Error_manager              error_manager=2;
+    repeated Parkspace_info             parkspace_info=3;       //车位状态
+}
+
+

+ 9 - 0
parkspace_manager/packages.config

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="Google.Protobuf" version="3.12.4" targetFramework="net45" />
+  <package id="Google.Protobuf.Tools" version="3.12.4" targetFramework="net45" />
+  <package id="NNanomsg" version="0.5.2" targetFramework="net45" />
+  <package id="System.Buffers" version="4.4.0" targetFramework="net45" />
+  <package id="System.Memory" version="4.5.2" targetFramework="net45" />
+  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net45" />
+</packages>

+ 199 - 0
parkspace_manager/parkspace_manager.csproj

@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{B4FF8229-BC04-4D00-833F-1C250AAF2470}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>parkspace_manager</RootNamespace>
+    <AssemblyName>parkspace_manager</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <NuGetPackageImportStamp>
+    </NuGetPackageImportStamp>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="db, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>sdk\mysql\db.dll</HintPath>
+    </Reference>
+    <Reference Include="Google.Protobuf, Version=3.12.4.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+      <HintPath>..\packages\Google.Protobuf.3.12.4\lib\net45\Google.Protobuf.dll</HintPath>
+    </Reference>
+    <Reference Include="MySql.Data, Version=6.7.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>sdk\mysql\MySql.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="NNanomsg, Version=0.5.2.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\NNanomsg.0.5.2\lib\net40\NNanomsg.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Buffers.4.4.0\lib\netstandard1.1\System.Buffers.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Memory.4.5.2\lib\netstandard1.1\System.Memory.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="communication\Communicator.cs" />
+    <Compile Include="db_manager\DBManager.cs" />
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="FormParkSpaceStatus.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FormParkSpaceStatus.Designer.cs">
+      <DependentUpon>FormParkSpaceStatus.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LOG\Credence.cs" />
+    <Compile Include="LOG\log.cs" />
+    <Compile Include="LOG\LogManager.cs" />
+    <Compile Include="LOG\LogTest.cs" />
+    <Compile Include="message\MessageBase.cs" />
+    <Compile Include="message\ParkspaceAllocationMessage.cs" />
+    <Compile Include="Monitor\Monitor.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="FormParkSpaceStatus.resx">
+      <DependentUpon>FormParkSpaceStatus.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="message\message_base.proto" />
+    <None Include="message\parkspace_allocation_message.proto" />
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <None Include="x64\libnanomsg.so">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="x86\libnanomsg.so">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config">
+      <SubType>Designer</SubType>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="sdk\dotNetty\DotNetty.Buffers.dll" />
+    <Content Include="sdk\dotNetty\DotNetty.Buffers.xml" />
+    <Content Include="sdk\dotNetty\DotNetty.Codecs.dll" />
+    <Content Include="sdk\dotNetty\DotNetty.Codecs.xml" />
+    <Content Include="sdk\dotNetty\DotNetty.Common.dll" />
+    <Content Include="sdk\dotNetty\DotNetty.Common.xml" />
+    <Content Include="sdk\dotNetty\DotNetty.Handlers.dll" />
+    <Content Include="sdk\dotNetty\DotNetty.Handlers.xml" />
+    <Content Include="sdk\dotNetty\DotNetty.Transport.dll" />
+    <Content Include="sdk\dotNetty\DotNetty.Transport.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.Abstractions.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.Abstractions.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.FileExtensions.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.FileExtensions.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.Json.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.Json.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Configuration.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.DependencyInjection.Abstractions.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.DependencyInjection.Abstractions.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.FileProviders.Abstractions.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.FileProviders.Abstractions.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.FileProviders.Physical.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.FileProviders.Physical.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Logging.Abstractions.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Logging.Abstractions.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Logging.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Logging.xml" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Primitives.dll" />
+    <Content Include="sdk\dotNetty\Microsoft.Extensions.Primitives.xml" />
+    <Content Include="sdk\dotNetty\netstandard.dll" />
+    <Content Include="sdk\dotNetty\nettyCommunication.dll" />
+    <Content Include="sdk\dotNetty\Newtonsoft.Json.dll" />
+    <Content Include="sdk\dotNetty\Newtonsoft.Json.xml" />
+    <Content Include="sdk\dotNetty\System.Collections.Immutable.dll" />
+    <Content Include="sdk\dotNetty\System.Collections.Immutable.xml" />
+    <Content Include="sdk\dotNetty\System.Runtime.CompilerServices.Unsafe.dll" />
+    <Content Include="sdk\dotNetty\System.Runtime.CompilerServices.Unsafe.xml" />
+    <Content Include="sdk\dotNetty\System.Runtime.InteropServices.RuntimeInformation.dll" />
+    <Content Include="sdk\dotNetty\System.Threading.Tasks.Extensions.dll" />
+    <Content Include="sdk\dotNetty\System.Threading.Tasks.Extensions.xml" />
+    <Content Include="sdk\mysql\db.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="sdk\mysql\MySql.Data.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="x64\nanomsg.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="x86\nanomsg.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\Google.Protobuf.Tools.3.12.4\build\Google.Protobuf.Tools.targets" Condition="Exists('..\packages\Google.Protobuf.Tools.3.12.4\build\Google.Protobuf.Tools.targets')" />
+  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+    <PropertyGroup>
+      <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
+    </PropertyGroup>
+    <Error Condition="!Exists('..\packages\Google.Protobuf.Tools.3.12.4\build\Google.Protobuf.Tools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Google.Protobuf.Tools.3.12.4\build\Google.Protobuf.Tools.targets'))" />
+  </Target>
+</Project>

BIN
parkspace_manager/sdk/dotNetty/DotNetty.Buffers.dll


Diff do ficheiro suprimidas por serem muito extensas
+ 1978 - 0
parkspace_manager/sdk/dotNetty/DotNetty.Buffers.xml


BIN
parkspace_manager/sdk/dotNetty/DotNetty.Codecs.dll


+ 646 - 0
parkspace_manager/sdk/dotNetty/DotNetty.Codecs.xml

@@ -0,0 +1,646 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>DotNetty.Codecs</name>
+    </assembly>
+    <members>
+        <member name="F:DotNetty.Codecs.Base64.Base64Dialect.STANDARD">
+            <summary>
+                http://www.faqs.org/rfcs/rfc3548.html
+                Table 1: The Base 64 Alphabet
+            </summary>
+        </member>
+        <member name="F:DotNetty.Codecs.Base64.Base64Dialect.URL_SAFE">
+            <summary>
+                http://www.faqs.org/rfcs/rfc3548.html
+                Table 2: The "URL and Filename safe" Base 64 Alphabet
+            </summary>
+        </member>
+        <member name="F:DotNetty.Codecs.ByteToMessageDecoder.MergeCumulator">
+            <summary>
+                Cumulates instances of <see cref="T:DotNetty.Buffers.IByteBuffer" /> by merging them into one <see cref="T:DotNetty.Buffers.IByteBuffer" />, using memory
+                copies.
+            </summary>
+        </member>
+        <member name="F:DotNetty.Codecs.ByteToMessageDecoder.CompositionCumulation">
+            <summary>
+                Cumulate instances of <see cref="T:DotNetty.Buffers.IByteBuffer" /> by add them to a <see cref="T:DotNetty.Buffers.CompositeByteBuffer" /> and therefore
+                avoiding memory copy when possible.
+            </summary>
+            <remarks>
+                Be aware that <see cref="T:DotNetty.Buffers.CompositeByteBuffer" /> use a more complex indexing implementation so depending on your
+                use-case
+                and the decoder implementation this may be slower then just use the <see cref="F:DotNetty.Codecs.ByteToMessageDecoder.MergeCumulator" />.
+            </remarks>
+        </member>
+        <member name="P:DotNetty.Codecs.ByteToMessageDecoder.SingleDecode">
+            <summary>
+                Determines whether only one message should be decoded per <see cref="M:DotNetty.Codecs.ByteToMessageDecoder.ChannelRead(DotNetty.Transport.Channels.IChannelHandlerContext,System.Object)" /> call.
+                Default is <code>false</code> as this has performance impacts.
+            </summary>
+            <remarks>Is particularly useful in support of protocol upgrade scenarios.</remarks>
+        </member>
+        <member name="P:DotNetty.Codecs.ByteToMessageDecoder.ActualReadableBytes">
+            <summary>
+                Returns the actual number of readable bytes in the internal cumulative
+                buffer of this decoder. You usually do not need to rely on this value
+                to write a decoder. Use it only when you must use it at your own risk.
+                This method is a shortcut to <see cref="P:DotNetty.Buffers.IByteBuffer.ReadableBytes" /> of <see cref="P:DotNetty.Codecs.ByteToMessageDecoder.InternalBuffer" />.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.CodecException">
+            <summary>
+                An <see cref="T:System.Exception" /> which is thrown by a codec.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.Adler32">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/Adler32.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.CRC32">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/CRC32.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.Deflate">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/Deflate.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.Deflater">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/Deflater.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.GZIPException">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/GZIPException.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.GZIPHeader">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/GZIPHeader.java
+            
+            http://www.ietf.org/rfc/rfc1952.txt
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.InfBlocks">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/InfBlocks.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.InfCodes">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/InfCodes.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.Inflate">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/Inflate.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.Inflater">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/Inflater.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.InfTree">
+            <summary>
+             https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/InfTree.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.JZlib">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/JZlib.java
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.Compression.JZlibEncoder.#ctor(DotNetty.Codecs.Compression.ZlibWrapper,System.Int32,System.Int32,System.Int32)">
+             Creates a new zlib encoder with the specified {@code compressionLevel},
+             the specified {@code windowBits}, the specified {@code memLevel}, and
+             the specified wrapper.
+            
+             @param compressionLevel
+                    {@code 1} yields the fastest compression and {@code 9} yields the
+                    best compression.  {@code 0} means no compression.  The default
+                    compression level is {@code 6}.
+             @param windowBits
+                    The base two logarithm of the size of the history buffer.  The
+                    value should be in the range {@code 9} to {@code 15} inclusive.
+                    Larger values result in better compression at the expense of
+                    memory usage.  The default value is {@code 15}.
+             @param memLevel
+                    How much memory should be allocated for the internal compression
+                    state.  {@code 1} uses minimum memory and {@code 9} uses maximum
+                    memory.  Larger values result in better and faster compression
+                    at the expense of memory usage.  The default value is {@code 8}
+            
+             @throws CompressionException if failed to initialize zlib
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.StaticTree">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/StaticTree.java
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.Tree">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/Tree.java
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.Compression.ZlibEncoder.CloseAsync">
+             Close this {@link ZlibEncoder} and so finish the encoding.
+            
+             The returned {@link ChannelFuture} will be notified once the
+             operation completes.
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.ZlibWrapper">
+            The container file formats that wrap the stream compressed by the DEFLATE
+            algorithm.
+        </member>
+        <member name="F:DotNetty.Codecs.Compression.ZlibWrapper.Zlib">
+            The ZLIB wrapper as specified in <a href="http://tools.ietf.org/html/rfc1950">RFC 1950</a>.
+        </member>
+        <member name="F:DotNetty.Codecs.Compression.ZlibWrapper.Gzip">
+            The GZIP wrapper as specified in <a href="http://tools.ietf.org/html/rfc1952">RFC 1952</a>.
+        </member>
+        <member name="F:DotNetty.Codecs.Compression.ZlibWrapper.None">
+            Raw DEFLATE stream only (no header and no footer).
+        </member>
+        <member name="F:DotNetty.Codecs.Compression.ZlibWrapper.ZlibOrNone">
+            Try {@link #ZLIB} first and then {@link #NONE} if the first attempt fails.
+            Please note that you can specify this wrapper type only when decompressing.
+        </member>
+        <member name="T:DotNetty.Codecs.Compression.ZStream">
+            <summary>
+            https://github.com/ymnk/jzlib/blob/master/src/main/java/com/jcraft/jzlib/ZStream.java
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.Compression.ZStream.End">
+            Those methods are expected to be override by Inflater and Deflater.
+            In the future, they will become abstract methods.
+        </member>
+        <member name="T:DotNetty.Codecs.CorruptedFrameException">
+            <summary>
+                A <see cref="T:DotNetty.Codecs.DecoderException" /> which is thrown when the received frame data could not
+                be decoded by an inbound handler.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.DelimiterBasedFrameDecoder">
+            <summary>
+                A decoder that splits the received <see cref="T:DotNetty.Buffers.IByteBuffer" /> by one or more
+                delimiters.It is particularly useful for decoding the frames which ends
+                with a delimiter such as <see cref="M:DotNetty.Codecs.Delimiters.NullDelimiter" /> or
+                <see cref="M:DotNetty.Codecs.Delimiters.LineDelimiter" />
+                <h3>Specifying more than one delimiter </h3>
+                <see cref="M:DotNetty.Codecs.Delimiters.NullDelimiter" /> allows you to specify more than one
+                delimiter.  If more than one delimiter is found in the buffer, it chooses
+                the delimiter which produces the shortest frame.  For example, if you have
+                the following data in the buffer:
+                +--------------+
+                | ABC\nDEF\r\n |
+                +--------------+
+                a <see cref="M:DotNetty.Codecs.Delimiters.LineDelimiter" /> will choose '\n' as the first delimiter and produce two
+                frames:
+                +-----+-----+
+                | ABC | DEF |
+                +-----+-----+
+                rather than incorrectly choosing '\r\n' as the first delimiter:
+                +----------+
+                | ABC\nDEF |
+                +----------+
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.DelimiterBasedFrameDecoder.#ctor(System.Int32,System.Boolean,System.Boolean,DotNetty.Buffers.IByteBuffer[])">
+            <summary>Common constructor</summary>
+            <param name="maxFrameLength">
+                The maximum length of the decoded frame
+                NOTE: A see <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is thrown if the length of the frame exceeds this
+                value.
+            </param>
+            <param name="stripDelimiter">whether the decoded frame should strip out the delimiter or not</param>
+            <param name="failFast">
+                If true, a <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is
+                thrown as soon as the decoder notices the length of the
+                frame will exceed<tt>maxFrameLength</tt> regardless of
+                whether the entire frame has been read.
+                If false, a <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is
+                thrown after the entire frame that exceeds maxFrameLength has been read.
+            </param>
+            <param name="delimiters">delimiters</param>
+        </member>
+        <member name="M:DotNetty.Codecs.DelimiterBasedFrameDecoder.IsLineBased(DotNetty.Buffers.IByteBuffer[])">
+            <summary>Returns true if the delimiters are "\n" and "\r\n"</summary>
+        </member>
+        <member name="M:DotNetty.Codecs.DelimiterBasedFrameDecoder.IsSubclass">
+            <summary>ReturnsReturn true if the current instance is a subclass of DelimiterBasedFrameDecoder</summary>
+        </member>
+        <member name="M:DotNetty.Codecs.DelimiterBasedFrameDecoder.Decode(DotNetty.Transport.Channels.IChannelHandlerContext,DotNetty.Buffers.IByteBuffer)">
+            <summary>Create a frame out of the <see cref="T:DotNetty.Buffers.IByteBuffer" /> and return it</summary>
+            <param name="ctx">
+                the <see cref="T:DotNetty.Transport.Channels.IChannelHandlerContext" /> which this
+                <see cref="T:DotNetty.Codecs.ByteToMessageDecoder" /> belongs to
+            </param>
+            <param name="buffer">the <see cref="T:DotNetty.Buffers.IByteBuffer" /> from which to read data</param>
+            <returns>
+                the <see cref="T:DotNetty.Buffers.IByteBuffer" /> which represent the frame or null if no frame could be
+                created.
+            </returns>
+        </member>
+        <member name="M:DotNetty.Codecs.DelimiterBasedFrameDecoder.IndexOf(DotNetty.Buffers.IByteBuffer,DotNetty.Buffers.IByteBuffer)">
+            Returns the number of bytes between the readerIndex of the haystack and
+            the first needle found in the haystack.  -1 is returned if no needle is
+            found in the haystack.
+        </member>
+        <member name="M:DotNetty.Codecs.Delimiters.NullDelimiter">
+            <summary>Returns a null (0x00) delimiter, which could be used for Flash XML socket or any similar protocols</summary>
+        </member>
+        <member name="M:DotNetty.Codecs.Delimiters.LineDelimiter">
+            <summary>
+                Returns {@code CR ('\r')} and {@code LF ('\n')} delimiters, which could
+                be used for text-based line protocols.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Json.JsonObjectDecoder">
+            <summary>
+                Splits a byte stream of JSON objects and arrays into individual objects/arrays and passes them up the
+                <see cref="T:DotNetty.Transport.Channels.IChannelPipeline" />.
+                This class does not do any real parsing or validation. A sequence of bytes is considered a JSON object/array
+                if it contains a matching number of opening and closing braces/brackets. It's up to a subsequent
+                <see cref="T:DotNetty.Transport.Channels.IChannelHandler" />
+                to parse the JSON text into a more usable form i.e.a POCO.
+            </summary>
+        </member>
+        <!-- Badly formed XML comment ignored for member "T:DotNetty.Codecs.LengthFieldBasedFrameDecoder" -->
+        <member name="M:DotNetty.Codecs.LengthFieldBasedFrameDecoder.#ctor(System.Int32,System.Int32,System.Int32)">
+            <summary>
+                Create a new instance.
+            </summary>
+            <param name="maxFrameLength">
+                The maximum length of the frame.  If the length of the frame is
+                greater than this value then <see cref="T:DotNetty.Codecs.TooLongFrameException" /> will be thrown.
+            </param>
+            <param name="lengthFieldOffset">The offset of the length field.</param>
+            <param name="lengthFieldLength">The length of the length field.</param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldBasedFrameDecoder.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
+            <summary>
+                Create a new instance.
+            </summary>
+            <param name="maxFrameLength">
+                The maximum length of the frame.  If the length of the frame is
+                greater than this value then <see cref="T:DotNetty.Codecs.TooLongFrameException" /> will be thrown.
+            </param>
+            <param name="lengthFieldOffset">The offset of the length field.</param>
+            <param name="lengthFieldLength">The length of the length field.</param>
+            <param name="lengthAdjustment">The compensation value to add to the value of the length field.</param>
+            <param name="initialBytesToStrip">the number of first bytes to strip out from the decoded frame.</param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldBasedFrameDecoder.#ctor(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean)">
+            <summary>
+                Create a new instance.
+            </summary>
+            <param name="maxFrameLength">
+                The maximum length of the frame.  If the length of the frame is
+                greater than this value then <see cref="T:DotNetty.Codecs.TooLongFrameException" /> will be thrown.
+            </param>
+            <param name="lengthFieldOffset">The offset of the length field.</param>
+            <param name="lengthFieldLength">The length of the length field.</param>
+            <param name="lengthAdjustment">The compensation value to add to the value of the length field.</param>
+            <param name="initialBytesToStrip">the number of first bytes to strip out from the decoded frame.</param>
+            <param name="failFast">
+                If <c>true</c>, a <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is thrown as soon as the decoder notices the length
+                of the frame will exceeed <see cref="F:DotNetty.Codecs.LengthFieldBasedFrameDecoder.maxFrameLength" /> regardless of whether the entire frame has been
+                read. If <c>false</c>, a <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is thrown after the entire frame that exceeds
+                <see cref="F:DotNetty.Codecs.LengthFieldBasedFrameDecoder.maxFrameLength" /> has been read.
+                Defaults to <c>true</c> in other overloads.
+            </param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldBasedFrameDecoder.#ctor(DotNetty.Buffers.ByteOrder,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Boolean)">
+            <summary>
+                Create a new instance.
+            </summary>
+            <param name="byteOrder">The <see cref="T:DotNetty.Buffers.ByteOrder" /> of the lenght field.</param>
+            <param name="maxFrameLength">
+                The maximum length of the frame.  If the length of the frame is
+                greater than this value then <see cref="T:DotNetty.Codecs.TooLongFrameException" /> will be thrown.
+            </param>
+            <param name="lengthFieldOffset">The offset of the length field.</param>
+            <param name="lengthFieldLength">The length of the length field.</param>
+            <param name="lengthAdjustment">The compensation value to add to the value of the length field.</param>
+            <param name="initialBytesToStrip">the number of first bytes to strip out from the decoded frame.</param>
+            <param name="failFast">
+                If <c>true</c>, a <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is thrown as soon as the decoder notices the length
+                of the frame will exceeed <see cref="F:DotNetty.Codecs.LengthFieldBasedFrameDecoder.maxFrameLength" /> regardless of whether the entire frame has been
+                read. If <c>false</c>, a <see cref="T:DotNetty.Codecs.TooLongFrameException" /> is thrown after the entire frame that exceeds
+                <see cref="F:DotNetty.Codecs.LengthFieldBasedFrameDecoder.maxFrameLength" /> has been read.
+                Defaults to <c>true</c> in other overloads.
+            </param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldBasedFrameDecoder.Decode(DotNetty.Transport.Channels.IChannelHandlerContext,DotNetty.Buffers.IByteBuffer)">
+            <summary>
+                Create a frame out of the <see cref="T:DotNetty.Buffers.IByteBuffer" /> and return it.
+            </summary>
+            <param name="context">
+                The <see cref="T:DotNetty.Transport.Channels.IChannelHandlerContext" /> which this <see cref="T:DotNetty.Codecs.ByteToMessageDecoder" /> belongs
+                to.
+            </param>
+            <param name="input">The <see cref="T:DotNetty.Buffers.IByteBuffer" /> from which to read data.</param>
+            <returns>The <see cref="T:DotNetty.Buffers.IByteBuffer" /> which represents the frame or <c>null</c> if no frame could be created.</returns>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldBasedFrameDecoder.GetUnadjustedFrameLength(DotNetty.Buffers.IByteBuffer,System.Int32,System.Int32,DotNetty.Buffers.ByteOrder)">
+            <summary>
+                Decodes the specified region of the buffer into an unadjusted frame length.  The default implementation is
+                capable of decoding the specified region into an unsigned 8/16/24/32/64 bit integer.  Override this method to
+                decode the length field encoded differently.
+                Note that this method must not modify the state of the specified buffer (e.g.
+                <see cref="P:DotNetty.Buffers.IByteBuffer.ReaderIndex" />,
+                <see cref="P:DotNetty.Buffers.IByteBuffer.WriterIndex" />, and the content of the buffer.)
+            </summary>
+            <param name="buffer">The buffer we'll be extracting the frame length from.</param>
+            <param name="offset">The offset from the absolute <see cref="P:DotNetty.Buffers.IByteBuffer.ReaderIndex" />.</param>
+            <param name="length">The length of the framelenght field. Expected: 1, 2, 3, 4, or 8.</param>
+            <param name="order">The preferred <see cref="T:DotNetty.Buffers.ByteOrder" /> of buffer.</param>
+            <returns>A long integer that represents the unadjusted length of the next frame.</returns>
+        </member>
+        <member name="T:DotNetty.Codecs.LengthFieldPrepender">
+            <summary>
+                An encoder that prepends the length of the message.  The length value is
+                prepended as a binary form.
+                <p />
+                For example, <tt>{@link LengthFieldPrepender}(2)</tt> will encode the
+                following 12-bytes string:
+                <pre>
+                    +----------------+
+                    | "HELLO, WORLD" |
+                    +----------------+
+                </pre>
+                into the following:
+                <pre>
+                    +--------+----------------+
+                    + 0x000C | "HELLO, WORLD" |
+                    +--------+----------------+
+                </pre>
+                If you turned on the {@code lengthIncludesLengthFieldLength} flag in the
+                constructor, the encoded data would look like the following
+                (12 (original data) + 2 (prepended data) = 14 (0xE)):
+                <pre>
+                    +--------+----------------+
+                    + 0x000E | "HELLO, WORLD" |
+                    +--------+----------------+
+                </pre>
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldPrepender.#ctor(System.Int32)">
+            <summary>
+                Creates a new <see cref="T:DotNetty.Codecs.LengthFieldPrepender" /> instance.
+            </summary>
+            <param name="lengthFieldLength">
+                The length of the prepended length field.
+                Only 1, 2, 3, 4, and 8 are allowed.
+            </param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldPrepender.#ctor(System.Int32,System.Boolean)">
+            <summary>
+                Creates a new <see cref="T:DotNetty.Codecs.LengthFieldPrepender" /> instance.
+            </summary>
+            <param name="lengthFieldLength">
+                The length of the prepended length field.
+                Only 1, 2, 3, 4, and 8 are allowed.
+            </param>
+            <param name="lengthFieldIncludesLengthFieldLength">
+                If <c>true</c>, the length of the prepended length field is added
+                to the value of the prepended length field.
+            </param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldPrepender.#ctor(System.Int32,System.Int32)">
+            <summary>
+                Creates a new <see cref="T:DotNetty.Codecs.LengthFieldPrepender" /> instance.
+            </summary>
+            <param name="lengthFieldLength">
+                The length of the prepended length field.
+                Only 1, 2, 3, 4, and 8 are allowed.
+            </param>
+            <param name="lengthAdjustment">The compensation value to add to the value of the length field.</param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldPrepender.#ctor(System.Int32,System.Int32,System.Boolean)">
+            <summary>
+                Creates a new <see cref="T:DotNetty.Codecs.LengthFieldPrepender" /> instance.
+            </summary>
+            <param name="lengthFieldLength">
+                The length of the prepended length field.
+                Only 1, 2, 3, 4, and 8 are allowed.
+            </param>
+            <param name="lengthFieldIncludesLengthFieldLength">
+                If <c>true</c>, the length of the prepended length field is added
+                to the value of the prepended length field.
+            </param>
+            <param name="lengthAdjustment">The compensation value to add to the value of the length field.</param>
+        </member>
+        <member name="M:DotNetty.Codecs.LengthFieldPrepender.#ctor(DotNetty.Buffers.ByteOrder,System.Int32,System.Int32,System.Boolean)">
+            <summary>
+                Creates a new <see cref="T:DotNetty.Codecs.LengthFieldPrepender" /> instance.
+            </summary>
+            <param name="byteOrder">The <see cref="T:DotNetty.Buffers.ByteOrder" /> of the length field.</param>
+            <param name="lengthFieldLength">
+                The length of the prepended length field.
+                Only 1, 2, 3, 4, and 8 are allowed.
+            </param>
+            <param name="lengthFieldIncludesLengthFieldLength">
+                If <c>true</c>, the length of the prepended length field is added
+                to the value of the prepended length field.
+            </param>
+            <param name="lengthAdjustment">The compensation value to add to the value of the length field.</param>
+        </member>
+        <member name="T:DotNetty.Codecs.LineBasedFrameDecoder">
+            <summary>
+                A decoder that splits the received {@link ByteBuf}s on line endings.
+                Both {@code "\n"} and {@code "\r\n"} are handled.
+                For a more general delimiter-based decoder, see {@link DelimiterBasedFrameDecoder}.
+            </summary>
+        </member>
+        <member name="F:DotNetty.Codecs.LineBasedFrameDecoder.maxLength">
+            Maximum length of a frame we're willing to decode.  
+        </member>
+        <member name="F:DotNetty.Codecs.LineBasedFrameDecoder.failFast">
+            Whether or not to throw an exception as soon as we exceed maxLength. 
+        </member>
+        <member name="F:DotNetty.Codecs.LineBasedFrameDecoder.discarding">
+            True if we're discarding input because we're already over maxLength.  
+        </member>
+        <member name="M:DotNetty.Codecs.LineBasedFrameDecoder.#ctor(System.Int32)">
+            <summary>
+                Initializes a new instance of the <see cref="T:DotNetty.Codecs.LineBasedFrameDecoder" /> class.
+            </summary>
+            <param name="maxLength">
+                the maximum length of the decoded frame.
+                A {@link TooLongFrameException} is thrown if
+                the length of the frame exceeds this value.
+            </param>
+        </member>
+        <member name="M:DotNetty.Codecs.LineBasedFrameDecoder.#ctor(System.Int32,System.Boolean,System.Boolean)">
+            <summary>
+                Initializes a new instance of the <see cref="T:DotNetty.Codecs.LineBasedFrameDecoder" /> class.
+            </summary>
+            <param name="maxLength">
+                the maximum length of the decoded frame.
+                A {@link TooLongFrameException} is thrown if
+                the length of the frame exceeds this value.
+            </param>
+            <param name="stripDelimiter">
+                whether the decoded frame should strip out the
+                delimiter or not
+            </param>
+            <param name="failFast">
+                If <tt>true</tt>, a {@link TooLongFrameException} is
+                thrown as soon as the decoder notices the length of the
+                frame will exceed <tt>maxFrameLength</tt> regardless of
+                whether the entire frame has been read.
+                If <tt>false</tt>, a {@link TooLongFrameException} is
+                thrown after the entire frame that exceeds
+                <tt>maxFrameLength</tt> has been read.
+            </param>
+        </member>
+        <member name="M:DotNetty.Codecs.LineBasedFrameDecoder.Decode(DotNetty.Transport.Channels.IChannelHandlerContext,DotNetty.Buffers.IByteBuffer)">
+            <summary>
+                Create a frame out of the {@link ByteBuf} and return it.
+            </summary>
+            <param name="ctx">the {@link ChannelHandlerContext} which this {@link ByteToMessageDecoder} belongs to</param>
+            <param name="buffer">the {@link ByteBuf} from which to read data</param>
+        </member>
+        <member name="T:DotNetty.Codecs.MessageAggregator`4">
+            <inheritdoc />
+            <summary>
+            An abstract <see cref="T:DotNetty.Transport.Channels.IChannelHandler" /> that aggregates a series of message objects 
+            into a single aggregated message.
+            'A series of messages' is composed of the following:
+            a single start message which optionally contains the first part of the content, and
+            1 or more content messages. The content of the aggregated message will be the merged 
+            content of the start message and its following content messages. If this aggregator 
+            encounters a content message where { @link #isLastContentMessage(ByteBufHolder)}
+            return true for, the aggregator will finish the aggregation and produce the aggregated 
+            message and expect another start message.
+            </summary>
+            <typeparam name="TMessage">The type that covers both start message and content message</typeparam>
+            <typeparam name="TStart">The type of the start message</typeparam>
+            <typeparam name="TContent">The type of the content message</typeparam>
+            <typeparam name="TOutput">The type of the aggregated message</typeparam>
+        </member>
+        <member name="T:DotNetty.Codecs.MessageToMessageDecoder`1">
+            <summary>
+                Message to message decoder.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.MessageToMessageDecoder`1.Decode(DotNetty.Transport.Channels.IChannelHandlerContext,`0,System.Collections.Generic.List{System.Object})">
+            <summary>
+                Decode from one message to an other. This method will be called for each written message that can be handled
+                by this encoder.
+            </summary>
+            <param name="context">the {@link ChannelHandlerContext} which this {@link MessageToMessageDecoder} belongs to</param>
+            <param name="message">the message to decode to an other one</param>
+            <param name="output">the {@link List} to which decoded messages should be added</param>
+        </member>
+        <member name="M:DotNetty.Codecs.MessageToMessageEncoder`1.AcceptOutboundMessage(System.Object)">
+            <summary>
+                Returns {@code true} if the given message should be handled. If {@code false} it will be passed to the next
+                {@link ChannelHandler} in the {@link ChannelPipeline}.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.MessageToMessageEncoder`1.Encode(DotNetty.Transport.Channels.IChannelHandlerContext,`0,System.Collections.Generic.List{System.Object})">
+            <summary>
+                Encode from one message to an other. This method will be called for each written message that can be handled
+                by this encoder.
+                @param context           the {@link ChannelHandlerContext} which this {@link MessageToMessageEncoder} belongs to
+                @param message           the message to encode to an other one
+                @param output           the {@link List} into which the encoded message should be added
+                needs to do some kind of aggragation
+                @throws Exception    is thrown if an error accour
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.Protobuf.ProtobufVarint32FrameDecoder">
+            
+             A decoder that splits the received {@link ByteBuf}s dynamically by the
+             value of the Google Protocol Buffers
+             http://code.google.com/apis/protocolbuffers/docs/encoding.html#varints
+             Base 128 Varints integer length field in the message. 
+             For example:
+             
+             BEFORE DECODE (302 bytes)       AFTER DECODE (300 bytes)
+             +--------+---------------+      +---------------+
+             | Length | Protobuf Data |----->| Protobuf Data |
+             | 0xAC02 |  (300 bytes)  |      |  (300 bytes)  |
+             +--------+---------------+      +---------------+
+            
+        </member>
+        <member name="T:DotNetty.Codecs.Protobuf.ProtobufVarint32LengthFieldPrepender">
+            
+             An encoder that prepends the the Google Protocol Buffers
+             http://code.google.com/apis/protocolbuffers/docs/encoding.html#varints
+             Base 128 Varints integer length field. 
+             For example:
+             
+             BEFORE ENCODE (300 bytes)       AFTER ENCODE (302 bytes)
+              +---------------+               +--------+---------------+
+              | Protobuf Data |-------------->| Length | Protobuf Data |
+              |  (300 bytes)  |               | 0xAC02 |  (300 bytes)  |
+              +---------------+               +--------+---------------+
+        </member>
+        <member name="M:DotNetty.Codecs.StringDecoder.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:DotNetty.Codecs.StringDecoder" /> class with the current system
+                character set.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.StringDecoder.#ctor(System.Text.Encoding)">
+            <summary>
+                Initializes a new instance of the <see cref="T:DotNetty.Codecs.StringDecoder" /> class with the specified character
+                set..
+            </summary>
+            <param name="encoding">Encoding.</param>
+        </member>
+        <member name="T:DotNetty.Codecs.StringEncoder">
+             Encodes the requested {@link String} into a {@link ByteBuf}.
+             A typical setup for a text-based line protocol in a TCP/IP socket would be:
+             <pre>
+             {@link ChannelPipeline} pipeline = ...;
+            
+             // Decoders
+             pipeline.addLast("frameDecoder", new {@link LineBasedFrameDecoder}(80));
+             pipeline.addLast("stringDecoder", new {@link StringDecoder}(CharsetUtil.UTF_8));
+            
+             // Encoder
+             pipeline.addLast("stringEncoder", new {@link StringEncoder}(CharsetUtil.UTF_8));
+             </pre>
+             and then you can use a {@link String} instead of a {@link ByteBuf}
+             as a message:
+             <pre>
+             void channelRead({@link ChannelHandlerContext} ctx, {@link String} msg) {
+                 ch.write("Did you say '" + msg + "'?\n");
+             }
+             </pre>
+        </member>
+        <member name="M:DotNetty.Codecs.StringEncoder.#ctor">
+            <summary>
+                Initializes a new instance of the <see cref="T:DotNetty.Codecs.StringEncoder" /> class with the current system
+                character set.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Codecs.StringEncoder.#ctor(System.Text.Encoding)">
+            <summary>
+                Initializes a new instance of the <see cref="T:DotNetty.Codecs.StringEncoder" /> class with the specified character
+                set..
+            </summary>
+            <param name="encoding">Encoding.</param>
+        </member>
+        <member name="T:DotNetty.Codecs.TooLongFrameException">
+            <summary>
+                A <see cref="T:DotNetty.Codecs.DecoderException" /> which is thrown when the length of the frame
+                decoded is greater than the allowed maximum.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Codecs.UnsupportedMessageTypeException">
+            <summary>
+                Thrown if an unsupported message is received by an codec.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/DotNetty.Common.dll


Diff do ficheiro suprimidas por serem muito extensas
+ 2479 - 0
parkspace_manager/sdk/dotNetty/DotNetty.Common.xml


BIN
parkspace_manager/sdk/dotNetty/DotNetty.Handlers.dll


+ 591 - 0
parkspace_manager/sdk/dotNetty/DotNetty.Handlers.xml

@@ -0,0 +1,591 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>DotNetty.Handlers</name>
+    </assembly>
+    <members>
+        <member name="T:DotNetty.Handlers.Flow.FlowControlHandler">
+             The {@link FlowControlHandler} ensures that only one message per {@code read()} is sent downstream.
+            
+             Classes such as {@link ByteToMessageDecoder} or {@link MessageToByteEncoder} are free to emit as
+             many events as they like for any given input. A channel's auto reading configuration doesn't usually
+             apply in these scenarios. This is causing problems in downstream {@link ChannelHandler}s that would
+             like to hold subsequent events while they're processing one event. It's a common problem with the
+             {@code HttpObjectDecoder} that will very often fire a {@code HttpRequest} that is immediately followed
+             by a {@code LastHttpContent} event.
+            
+             <pre>{@code
+             ChannelPipeline pipeline = ...;
+            
+             pipeline.addLast(new HttpServerCodec());
+             pipeline.addLast(new FlowControlHandler());
+            
+             pipeline.addLast(new MyExampleHandler());
+            
+             class MyExampleHandler extends ChannelInboundHandlerAdapter {
+               @Override
+               public void channelRead(IChannelHandlerContext ctx, Object msg) {
+                 if (msg instanceof HttpRequest) {
+                   ctx.channel().config().setAutoRead(false);
+            
+                   // The FlowControlHandler will hold any subsequent events that
+                   // were emitted by HttpObjectDecoder until auto reading is turned
+                   // back on or Channel#read() is being called.
+                 }
+               }
+             }
+             }</pre>
+            
+             @see ChannelConfig#setAutoRead(bool)
+        </member>
+        <member name="P:DotNetty.Handlers.Flow.FlowControlHandler.IsQueueEmpty">
+            Determine if the underlying {@link Queue} is empty. This method exists for
+            testing, debugging and inspection purposes and it is not Thread safe!
+        </member>
+        <member name="M:DotNetty.Handlers.Flow.FlowControlHandler.Destroy">
+            Releases all messages and destroys the {@link Queue}.
+        </member>
+        <member name="M:DotNetty.Handlers.Flow.FlowControlHandler.Dequeue(DotNetty.Transport.Channels.IChannelHandlerContext,System.Int32)">
+             Dequeues one or many (or none) messages depending on the channel's auto
+             reading state and returns the number of messages that were consumed from
+             the internal queue.
+            
+             The {@code minConsume} argument is used to force {@code dequeue()} into
+             consuming that number of messages regardless of the channel's auto
+             reading configuration.
+            
+             @see #read(ChannelHandlerContext)
+             @see #channelRead(ChannelHandlerContext, Object)
+        </member>
+        <member name="T:DotNetty.Handlers.Logging.LoggingHandler">
+            <summary>
+                A <see cref="T:DotNetty.Transport.Channels.IChannelHandler" /> that logs all events using a logging framework.
+                By default, all events are logged at <tt>DEBUG</tt> level.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.#ctor">
+            <summary>
+                Creates a new instance whose logger name is the fully qualified class
+                name of the instance with hex dump enabled.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.#ctor(DotNetty.Handlers.Logging.LogLevel)">
+            <summary>
+                Creates a new instance whose logger name is the fully qualified class
+                name of the instance
+            </summary>
+            <param name="level">the log level</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.#ctor(System.Type)">
+            <summary>
+                Creates a new instance with the specified logger name and with hex dump
+                enabled
+            </summary>
+            <param name="type">the class type to generate the logger for</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.#ctor(System.Type,DotNetty.Handlers.Logging.LogLevel)">
+            <summary>
+                Creates a new instance with the specified logger name.
+            </summary>
+            <param name="type">the class type to generate the logger for</param>
+            <param name="level">the log level</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.#ctor(System.String)">
+            <summary>
+                Creates a new instance with the specified logger name using the default log level.
+            </summary>
+            <param name="name">the name of the class to use for the logger</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.#ctor(System.String,DotNetty.Handlers.Logging.LogLevel)">
+            <summary>
+                Creates a new instance with the specified logger name.
+            </summary>
+            <param name="name">the name of the class to use for the logger</param>
+            <param name="level">the log level</param>
+        </member>
+        <member name="P:DotNetty.Handlers.Logging.LoggingHandler.Level">
+            <summary>
+                Returns the <see cref="T:DotNetty.Handlers.Logging.LogLevel" /> that this handler uses to log
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.Format(DotNetty.Transport.Channels.IChannelHandlerContext,System.String)">
+            <summary>
+                Formats an event and returns the formatted message
+            </summary>
+            <param name="eventName">the name of the event</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.Format(DotNetty.Transport.Channels.IChannelHandlerContext,System.String,System.Object)">
+            <summary>
+                Formats an event and returns the formatted message.
+            </summary>
+            <param name="eventName">the name of the event</param>
+            <param name="arg">the argument of the event</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.Format(DotNetty.Transport.Channels.IChannelHandlerContext,System.String,System.Object,System.Object)">
+            <summary>
+                Formats an event and returns the formatted message.  This method is currently only used for formatting
+                <see cref="M:DotNetty.Transport.Channels.IChannelHandler.ConnectAsync(DotNetty.Transport.Channels.IChannelHandlerContext,System.Net.EndPoint,System.Net.EndPoint)" />
+            </summary>
+            <param name="eventName">the name of the event</param>
+            <param name="firstArg">the first argument of the event</param>
+            <param name="secondArg">the second argument of the event</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.FormatByteBuffer(DotNetty.Transport.Channels.IChannelHandlerContext,System.String,DotNetty.Buffers.IByteBuffer)">
+            <summary>
+                Generates the default log message of the specified event whose argument is a  <see cref="T:DotNetty.Buffers.IByteBuffer" />.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.FormatByteBufferHolder(DotNetty.Transport.Channels.IChannelHandlerContext,System.String,DotNetty.Buffers.IByteBufferHolder)">
+            <summary>
+                Generates the default log message of the specified event whose argument is a <see cref="T:DotNetty.Buffers.IByteBufferHolder" />.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Logging.LoggingHandler.FormatSimple(DotNetty.Transport.Channels.IChannelHandlerContext,System.String,System.Object)">
+            <summary>
+                Generates the default log message of the specified event whose argument is an arbitrary object.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Handlers.Timeout.IdleState">
+            <summary>
+            An <see cref="T:System.Enum"/> that represents the idle state of a <see cref="T:DotNetty.Transport.Channels.IChannel"/>.
+            </summary>
+        </member>
+        <member name="F:DotNetty.Handlers.Timeout.IdleState.ReaderIdle">
+            <summary>
+            No data was received for a while.
+            </summary>
+        </member>
+        <member name="F:DotNetty.Handlers.Timeout.IdleState.WriterIdle">
+            <summary>
+            No data was sent for a while.
+            </summary>
+        </member>
+        <member name="F:DotNetty.Handlers.Timeout.IdleState.AllIdle">
+            <summary>
+            No data was either received or sent for a while.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Handlers.Timeout.IdleStateEvent">
+            <summary>
+            A user event triggered by <see cref="T:DotNetty.Handlers.Timeout.IdleStateHandler"/> when a <see cref="T:DotNetty.Transport.Channels.IChannel"/> is idle.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateEvent.#ctor(DotNetty.Handlers.Timeout.IdleState,System.Boolean)">
+            <summary>
+            Constructor for sub-classes.
+            </summary>
+            <param name="state">the <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> which triggered the event.</param>
+            <param name="first"><code>true</code> if its the first idle event for the <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>.</param>
+        </member>
+        <member name="P:DotNetty.Handlers.Timeout.IdleStateEvent.State">
+            <summary>
+            Returns the idle state.
+            </summary>
+            <value>The state.</value>
+        </member>
+        <member name="P:DotNetty.Handlers.Timeout.IdleStateEvent.First">
+            <summary>
+            Returns <code>true</code> if this was the first event for the <see cref="T:DotNetty.Handlers.Timeout.IdleState"/>
+            </summary>
+            <returns><code>true</code> if first; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="T:DotNetty.Handlers.Timeout.IdleStateHandler">
+             <summary>
+             Triggers an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> when a <see cref="T:DotNetty.Transport.Channels.IChannel"/> has not performed
+             read, write, or both operation for a while.
+             
+             <para>
+             
+             <h3>Supported idle states</h3>
+             <table border="1">
+                 <tr>
+                     <th>Property</th><th>Meaning</th>
+                 </tr>
+                 <tr>
+                     <td><code>readerIdleTime</code></td>
+                     <td>an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.ReaderIdle"/>
+                         will be triggered when no read was performed for the specified period of
+                         time.  Specify <code>0</code> to disable.
+                     </td>
+                 </tr>
+                 <tr>
+                     <td><code>writerIdleTime</code></td>
+                     <td>an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.WriterIdle"/>
+                         will be triggered when no write was performed for the specified period of
+                         time.  Specify <code>0</code> to disable.</td>
+                 </tr>
+                 <tr>
+                     <td><code>allIdleTime</code></td>
+                     <td>an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.AllIdle"/>
+                         will be triggered when neither read nor write was performed for the
+                         specified period of time.  Specify <code>0</code> to disable.</td>
+                 </tr>
+             </table>
+             </para>
+             
+             <para>
+             
+             <example>
+            
+             An example that sends a ping message when there is no outbound traffic
+             for 30 seconds.  The connection is closed when there is no inbound traffic
+             for 60 seconds.
+            
+             <c>
+             var bootstrap = new <see cref="T:DotNetty.Transport.Bootstrapping.ServerBootstrap"/>();
+            
+             bootstrap.ChildHandler(new ActionChannelInitializer&lt;ISocketChannel&gt;(channel =>
+             {
+                 IChannelPipeline pipeline = channel.Pipeline;
+                 
+                 pipeline.AddLast("idleStateHandler", new <see cref="T:DotNetty.Handlers.Timeout.IdleStateHandler"/>(60, 30, 0);
+                 pipeline.AddLast("myHandler", new MyHandler());
+             }    
+             </c>
+             
+             Handler should handle the <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>  triggered by <see cref="T:DotNetty.Handlers.Timeout.IdleStateHandler"/>.
+             
+             <c>
+             public class MyHandler : ChannelDuplexHandler 
+             {
+                 public override void UserEventTriggered(<see cref="T:DotNetty.Transport.Channels.IChannelHandlerContext"/> context, <see cref="T:System.Object"/> evt)
+                 {
+                     if(evt is <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>) 
+                     {
+                         <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> e = (<see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>) evt;
+                         if (e.State == <see cref="T:DotNetty.Handlers.Timeout.IdleState"/>.ReaderIdle) 
+                         {
+                             ctx.close();
+                         } 
+                         else if(e.State == <see cref="T:DotNetty.Handlers.Timeout.IdleState"/>.WriterIdle) 
+                         {
+                             ctx.writeAndFlush(new PingMessage());
+                         }
+                      }
+                  }
+             }
+             </c>
+             </example>
+             </para>
+             
+             <seealso cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/>
+             <seealso cref="T:DotNetty.Handlers.Timeout.WriteTimeoutHandler"/>
+             </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.#ctor(System.Int32,System.Int32,System.Int32)">
+            <summary>
+            Initializes a new instance firing <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>s.
+            </summary>
+            <param name="readerIdleTimeSeconds">
+                an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.ReaderIdle"/>
+                will be triggered when no read was performed for the specified
+                period of time.  Specify <code>0</code> to disable.
+            </param>
+            <param name="writerIdleTimeSeconds">
+                an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.WriterIdle"/>
+                will be triggered when no write was performed for the specified
+                period of time.  Specify <code>0</code> to disable.
+            </param>
+            <param name="allIdleTimeSeconds">
+                an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.AllIdle"/>
+                will be triggered when neither read nor write was performed for
+                the specified period of time.  Specify <code>0</code> to disable.
+            </param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.#ctor(System.TimeSpan,System.TimeSpan,System.TimeSpan)">
+            <summary>
+            <see cref="M:DotNetty.Handlers.Timeout.IdleStateHandler.#ctor(System.Boolean,System.TimeSpan,System.TimeSpan,System.TimeSpan)"/>
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.#ctor(System.Boolean,System.TimeSpan,System.TimeSpan,System.TimeSpan)">
+            <summary>
+            Initializes a new instance firing <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>s.
+            </summary>
+            <param name="observeOutput">
+                whether or not the consumption of <code>bytes</code> should be taken into
+                consideration when assessing write idleness. The default is <code>false</code>.
+            </param>
+            <param name="readerIdleTime">
+                an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.ReaderIdle"/>
+                will be triggered when no read was performed for the specified
+                period of time.  Specify <see cref="F:System.TimeSpan.Zero"/> to disable.
+            </param>
+            <param name="writerIdleTime">
+                an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.WriterIdle"/>
+                will be triggered when no write was performed for the specified
+                period of time.  Specify <see cref="F:System.TimeSpan.Zero"/> to disable.
+            </param>
+            <param name="allIdleTime">
+                an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> whose state is <see cref="F:DotNetty.Handlers.Timeout.IdleState.AllIdle"/>
+                will be triggered when neither read nor write was performed for
+                the specified period of time.  Specify <see cref="F:System.TimeSpan.Zero"/> to disable.
+            </param>
+        </member>
+        <member name="P:DotNetty.Handlers.Timeout.IdleStateHandler.ReaderIdleTime">
+            <summary>
+            Return the readerIdleTime that was given when instance this class in milliseconds.
+            </summary>
+            <returns>The reader idle time in millis.</returns>
+        </member>
+        <member name="P:DotNetty.Handlers.Timeout.IdleStateHandler.WriterIdleTime">
+            <summary>
+            Return the writerIdleTime that was given when instance this class in milliseconds.
+            </summary>
+            <returns>The writer idle time in millis.</returns>
+        </member>
+        <member name="P:DotNetty.Handlers.Timeout.IdleStateHandler.AllIdleTime">
+            <summary>
+            Return the allIdleTime that was given when instance this class in milliseconds.
+            </summary>
+            <returns>The all idle time in millis.</returns>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.Ticks">
+            <summary>
+            This method is visible for testing!
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.Schedule(DotNetty.Transport.Channels.IChannelHandlerContext,System.Action{System.Object,System.Object},System.Object,System.Object,System.TimeSpan)">
+            <summary>
+            This method is visible for testing!
+            </summary>
+            <param name="ctx"></param>
+            <param name="task"></param>
+            <param name="context"></param>
+            <param name="state"></param>
+            <param name="delay"></param>
+            <returns></returns>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.ChannelIdle(DotNetty.Transport.Channels.IChannelHandlerContext,DotNetty.Handlers.Timeout.IdleStateEvent)">
+            <summary>
+            Is called when an <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/> should be fired. This implementation calls
+            <see cref="M:DotNetty.Transport.Channels.IChannelHandlerContext.FireUserEventTriggered(System.Object)"/>.
+            </summary>
+            <param name="context">Context.</param>
+            <param name="stateEvent">Evt.</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.NewIdleStateEvent(DotNetty.Handlers.Timeout.IdleState,System.Boolean)">
+            <summary>
+            Returns a <see cref="T:DotNetty.Handlers.Timeout.IdleStateEvent"/>.
+            </summary>
+            <param name="state"></param>
+            <param name="first"></param>
+            <returns></returns>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.InitOutputChanged(DotNetty.Transport.Channels.IChannelHandlerContext)">
+            <summary>
+            <see cref="M:DotNetty.Handlers.Timeout.IdleStateHandler.HasOutputChanged(DotNetty.Transport.Channels.IChannelHandlerContext,System.Boolean)"/>
+            </summary>
+            <param name="ctx"></param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.IdleStateHandler.HasOutputChanged(DotNetty.Transport.Channels.IChannelHandlerContext,System.Boolean)">
+            <summary>
+            Returns <code>true</code> if and only if the <see cref="M:DotNetty.Handlers.Timeout.IdleStateHandler.#ctor(System.Boolean,System.TimeSpan,System.TimeSpan,System.TimeSpan)"/>
+            was constructed
+            with <code>observeOutput</code> enabled and there has been an observed change in the
+            <see cref="T:DotNetty.Transport.Channels.ChannelOutboundBuffer"/> between two consecutive calls of this method.
+            https://github.com/netty/netty/issues/6150
+            </summary>
+            <param name="ctx"></param>
+            <param name="first"></param>
+            <returns></returns>
+        </member>
+        <member name="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler">
+             <summary>
+             Raises a <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutException"/> when no data was read within a certain
+             period of time.
+            
+             <pre>
+             The connection is closed when there is no inbound traffic
+             for 30 seconds.
+            
+             <example>
+             <c>
+             var bootstrap = new <see cref="T:DotNetty.Transport.Bootstrapping.ServerBootstrap"/>();
+            
+             bootstrap.ChildHandler(new ActionChannelInitializer&lt;ISocketChannel&gt;(channel =>
+             {
+                 IChannelPipeline pipeline = channel.Pipeline;
+                 
+                 pipeline.AddLast("readTimeoutHandler", new <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/>(30);
+                 pipeline.AddLast("myHandler", new MyHandler());
+             } 
+             </c>
+                        
+             <c>
+             public class MyHandler : ChannelDuplexHandler 
+             {
+                 public override void ExceptionCaught(<see cref="T:DotNetty.Transport.Channels.IChannelHandlerContext"/> context, <see cref="T:System.Exception"/> exception)
+                 {
+                     if(exception is <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutException"/>) 
+                     {
+                         // do somethind
+                     }
+                     else
+                     {
+                         base.ExceptionCaught(context, cause);
+                     }
+                  }
+             }
+             </c>
+             </example>
+             </pre>
+             
+             <seealso cref="T:DotNetty.Handlers.Timeout.WriteTimeoutHandler"/>
+             <seealso cref="T:DotNetty.Handlers.Timeout.IdleStateHandler"/>
+             </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.ReadTimeoutHandler.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/> class.
+            </summary>
+            <param name="timeoutSeconds">Timeout in seconds.</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.ReadTimeoutHandler.#ctor(System.TimeSpan)">
+            <summary>
+            Initializes a new instance of the <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/> class.
+            </summary>
+            <param name="timeout">Timeout.</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.ReadTimeoutHandler.ReadTimedOut(DotNetty.Transport.Channels.IChannelHandlerContext)">
+            <summary>
+            Is called when a read timeout was detected.
+            </summary>
+            <param name="context">Context.</param>
+        </member>
+        <member name="T:DotNetty.Handlers.Timeout.WriteTimeoutHandler">
+             <summary>
+             Raises a <see cref="T:DotNetty.Handlers.Timeout.WriteTimeoutException"/> when a write operation cannot finish in a certain period of time.
+             
+             <para>
+             <example>
+             
+             The connection is closed when a write operation cannot finish in 30 seconds.
+            
+             <c>
+             var bootstrap = new <see cref="T:DotNetty.Transport.Bootstrapping.ServerBootstrap"/>();
+            
+             bootstrap.ChildHandler(new ActionChannelInitializer&lt;ISocketChannel&gt;(channel =>
+             {
+                 IChannelPipeline pipeline = channel.Pipeline;
+                 
+                 pipeline.AddLast("writeTimeoutHandler", new <see cref="T:DotNetty.Handlers.Timeout.WriteTimeoutHandler"/>(30);
+                 pipeline.AddLast("myHandler", new MyHandler());
+             }    
+             </c>
+             
+             <c>
+             public class MyHandler : ChannelDuplexHandler 
+             {
+                 public override void ExceptionCaught(<see cref="T:DotNetty.Transport.Channels.IChannelHandlerContext"/> context, <see cref="T:System.Exception"/> exception)
+                 {
+                     if(exception is <see cref="T:DotNetty.Handlers.Timeout.WriteTimeoutException"/>) 
+                     {
+                         // do somethind
+                     }
+                     else
+                     {
+                         base.ExceptionCaught(context, cause);
+                     }
+                  }
+             }
+             </c>
+             
+             </example>
+             </para>
+             <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/>
+             <see cref="T:DotNetty.Handlers.Timeout.IdleStateHandler"/>
+             </summary>
+        </member>
+        <member name="F:DotNetty.Handlers.Timeout.WriteTimeoutHandler.tasks">
+            <summary>
+            A doubly-linked list to track all WriteTimeoutTasks.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.WriteTimeoutHandler.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/> class.
+            </summary>
+            <param name="timeoutSeconds">Timeout in seconds.</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.WriteTimeoutHandler.#ctor(System.TimeSpan)">
+            <summary>
+            Initializes a new instance of the <see cref="T:DotNetty.Handlers.Timeout.ReadTimeoutHandler"/> class.
+            </summary>
+            <param name="timeout">Timeout.</param>
+        </member>
+        <member name="M:DotNetty.Handlers.Timeout.WriteTimeoutHandler.WriteTimedOut(DotNetty.Transport.Channels.IChannelHandlerContext)">
+            <summary>
+            Is called when a write timeout was detected
+            </summary>
+            <param name="context">Context.</param>
+        </member>
+        <member name="T:DotNetty.Handlers.Tls.NotSslRecordException">
+            <summary>
+                Special exception which will get thrown if a packet is
+                received that not looks like a TLS/SSL record. A user can check for
+                this <see cref="T:DotNetty.Handlers.Tls.NotSslRecordException" /> and so detect if one peer tries to
+                use secure and the other plain connection.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Tls.TlsHandler.Unwrap(DotNetty.Transport.Channels.IChannelHandlerContext,DotNetty.Buffers.IByteBuffer,System.Int32,System.Int32,System.Collections.Generic.List{System.Int32},System.Collections.Generic.List{System.Object})">
+            <summary>Unwraps inbound SSL records.</summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Tls.TlsHandshakeCompletionEvent.#ctor">
+            <summary>
+                Creates a new event that indicates a successful handshake.
+            </summary>
+        </member>
+        <member name="M:DotNetty.Handlers.Tls.TlsHandshakeCompletionEvent.#ctor(System.Exception)">
+            <summary>
+                Creates a new event that indicates an unsuccessful handshake.
+                Use {@link #SUCCESS} to indicate a successful handshake.
+            </summary>
+        </member>
+        <member name="P:DotNetty.Handlers.Tls.TlsHandshakeCompletionEvent.IsSuccessful">
+            <summary>
+                Return {@code true} if the handshake was successful
+            </summary>
+        </member>
+        <member name="P:DotNetty.Handlers.Tls.TlsHandshakeCompletionEvent.Exception">
+            <summary>
+                Return the {@link Throwable} if {@link #isSuccess()} returns {@code false}
+                and so the handshake failed.
+            </summary>
+        </member>
+        <member name="T:DotNetty.Handlers.Tls.TlsUtils">
+            Utilities for TLS packets.
+        </member>
+        <member name="F:DotNetty.Handlers.Tls.TlsUtils.SSL_CONTENT_TYPE_CHANGE_CIPHER_SPEC">
+            change cipher spec
+        </member>
+        <member name="F:DotNetty.Handlers.Tls.TlsUtils.SSL_CONTENT_TYPE_ALERT">
+            alert
+        </member>
+        <member name="F:DotNetty.Handlers.Tls.TlsUtils.SSL_CONTENT_TYPE_HANDSHAKE">
+            handshake
+        </member>
+        <member name="F:DotNetty.Handlers.Tls.TlsUtils.SSL_CONTENT_TYPE_APPLICATION_DATA">
+            application data
+        </member>
+        <member name="F:DotNetty.Handlers.Tls.TlsUtils.SSL_RECORD_HEADER_LENGTH">
+            the length of the ssl record header (in bytes)
+        </member>
+        <member name="M:DotNetty.Handlers.Tls.TlsUtils.GetEncryptedPacketLength(DotNetty.Buffers.IByteBuffer,System.Int32)">
+            <summary>
+                Return how much bytes can be read out of the encrypted data. Be aware that this method will not increase
+                the readerIndex of the given <see cref="T:DotNetty.Buffers.IByteBuffer"/>.
+            </summary>
+            <param name="buffer">
+                The <see cref="T:DotNetty.Buffers.IByteBuffer"/> to read from. Be aware that it must have at least
+                <see cref="F:DotNetty.Handlers.Tls.TlsUtils.SSL_RECORD_HEADER_LENGTH"/> bytes to read,
+                otherwise it will throw an <see cref="T:System.ArgumentException"/>.
+            </param>
+            <param name="offset">Offset to record start.</param>
+            <returns>
+                The length of the encrypted packet that is included in the buffer. This will
+                return <c>-1</c> if the given <see cref="T:DotNetty.Buffers.IByteBuffer"/> is not encrypted at all.
+            </returns>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/DotNetty.Transport.dll


Diff do ficheiro suprimidas por serem muito extensas
+ 2715 - 0
parkspace_manager/sdk/dotNetty/DotNetty.Transport.xml


BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Abstractions.dll


+ 240 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Abstractions.xml

@@ -0,0 +1,240 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Configuration.Abstractions</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationExtensions">
+            <summary>
+            Extension methods for configuration classes./>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationExtensions.Add``1(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action{``0})">
+            <summary>
+            Adds a new configuration source.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="configureSource">Configures the source secrets.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationExtensions.GetConnectionString(Microsoft.Extensions.Configuration.IConfiguration,System.String)">
+            <summary>
+            Shorthand for GetSection("ConnectionStrings")[name].
+            </summary>
+            <param name="configuration">The configuration.</param>
+            <param name="name">The connection string key.</param>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationExtensions.AsEnumerable(Microsoft.Extensions.Configuration.IConfiguration)">
+            <summary>
+            Get the enumeration of key value pairs within the <see cref="T:Microsoft.Extensions.Configuration.IConfiguration" />
+            </summary>
+            <param name="configuration">The <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/> to enumerate.</param>
+            <returns>An enumeration of key value pairs.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationExtensions.AsEnumerable(Microsoft.Extensions.Configuration.IConfiguration,System.Boolean)">
+            <summary>
+            Get the enumeration of key value pairs within the <see cref="T:Microsoft.Extensions.Configuration.IConfiguration" />
+            </summary>
+            <param name="configuration">The <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/> to enumerate.</param>
+            <param name="makePathsRelative">If true, the child keys returned will have the current configuration's Path trimmed from the front.</param>
+            <returns>An enumeration of key value pairs.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationExtensions.Exists(Microsoft.Extensions.Configuration.IConfigurationSection)">
+            <summary>
+            Determines whether the section has a <see cref="P:Microsoft.Extensions.Configuration.IConfigurationSection.Value"/> or has children 
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationPath">
+            <summary>
+            Utility methods and constants for manipulating Configuration paths
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Configuration.ConfigurationPath.KeyDelimiter">
+            <summary>
+            The delimiter ":" used to separate individual keys in a path.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationPath.Combine(System.String[])">
+            <summary>
+            Combines path segments into one path.
+            </summary>
+            <param name="pathSegments">The path segments to combine.</param>
+            <returns>The combined path.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationPath.Combine(System.Collections.Generic.IEnumerable{System.String})">
+            <summary>
+            Combines path segments into one path.
+            </summary>
+            <param name="pathSegments">The path segments to combine.</param>
+            <returns>The combined path.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationPath.GetSectionKey(System.String)">
+            <summary>
+            Extracts the last path segment from the path.
+            </summary>
+            <param name="path">The path.</param>
+            <returns>The last path segment of the path.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationPath.GetParentPath(System.String)">
+            <summary>
+            Extracts the path corresponding to the parent node for a given path.
+            </summary>
+            <param name="path">The path.</param>
+            <returns>The original path minus the last individual segment found in it. Null if the original path corresponds to a top level node.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.IConfiguration">
+            <summary>
+            Represents a set of key/value application configuration properties.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfiguration.Item(System.String)">
+            <summary>
+            Gets or sets a configuration value.
+            </summary>
+            <param name="key">The configuration key.</param>
+            <returns>The configuration value.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfiguration.GetSection(System.String)">
+            <summary>
+            Gets a configuration sub-section with the specified key.
+            </summary>
+            <param name="key">The key of the configuration section.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSection"/>.</returns>
+            <remarks>
+                This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
+                an empty <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSection"/> will be returned.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfiguration.GetChildren">
+            <summary>
+            Gets the immediate descendant configuration sub-sections.
+            </summary>
+            <returns>The configuration sub-sections.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfiguration.GetReloadToken">
+            <summary>
+            Returns a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that can be used to observe when this configuration is reloaded.
+            </summary>
+            <returns>A <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/>.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.IConfigurationBuilder">
+            <summary>
+            Represents a type used to build application configuration.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Properties">
+            <summary>
+            Gets a key/value collection that can be used to share data between the <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>
+            and the registered <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSource"/>s.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Sources">
+            <summary>
+            Gets the sources used to obtain configuration values
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationBuilder.Add(Microsoft.Extensions.Configuration.IConfigurationSource)">
+            <summary>
+            Adds a new configuration source.
+            </summary>
+            <param name="source">The configuration source to add.</param>
+            <returns>The same <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationBuilder.Build">
+            <summary>
+            Builds an <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/> with keys and values from the set of sources registered in
+            <see cref="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Sources"/>.
+            </summary>
+            <returns>An <see cref="T:Microsoft.Extensions.Configuration.IConfigurationRoot"/> with keys and values from the registered sources.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.IConfigurationProvider">
+            <summary>
+            Provides configuration key/values for an application.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationProvider.TryGet(System.String,System.String@)">
+            <summary>
+            Tries to get a configuration value for the specified key.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="value">The value.</param>
+            <returns><c>True</c> if a value for the specified key was found, otherwise <c>false</c>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationProvider.Set(System.String,System.String)">
+            <summary>
+            Sets a configuration value for the specified key.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="value">The value.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationProvider.GetReloadToken">
+            <summary>
+            Returns a change token if this provider supports change tracking, null otherwise.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationProvider.Load">
+            <summary>
+            Loads configuration values from the source represented by this <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable{System.String},System.String)">
+            <summary>
+            Returns the immediate descendant configuration keys for a given parent path based on this
+            <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>'s data and the set of keys returned by all the preceding
+            <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s.
+            </summary>
+            <param name="earlierKeys">The child keys returned by the preceding providers for the same parent path.</param>
+            <param name="parentPath">The parent path.</param>
+            <returns>The child keys.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.IConfigurationRoot">
+            <summary>
+            Represents the root of an <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/> hierarchy.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationRoot.Reload">
+            <summary>
+            Force the configuration values to be reloaded from the underlying <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfigurationRoot.Providers">
+            <summary>
+            The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s for this configuration.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.IConfigurationSection">
+            <summary>
+            Represents a section of application configuration values.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfigurationSection.Key">
+            <summary>
+            Gets the key this section occupies in its parent.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfigurationSection.Path">
+            <summary>
+            Gets the full path to this section within the <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.IConfigurationSection.Value">
+            <summary>
+            Gets or sets the section value.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.IConfigurationSource">
+            <summary>
+            Represents a source of configuration key/values for an application.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.IConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Builds the <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/> for this source.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>An <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/></returns>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.FileExtensions.dll


+ 175 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.FileExtensions.xml

@@ -0,0 +1,175 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Configuration.FileExtensions</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Configuration.FileConfigurationExtensions">
+            <summary>
+            Extension methods for <see cref="T:Microsoft.Extensions.Configuration.FileConfigurationProvider"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationExtensions.SetFileProvider(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider)">
+            <summary>
+            Sets the default <see cref="T:Microsoft.Extensions.FileProviders.IFileProvider"/> to be used for file-based providers.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="fileProvider">The default file provider instance.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationExtensions.GetFileProvider(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Gets the default <see cref="T:Microsoft.Extensions.FileProviders.IFileProvider"/> to be used for file-based providers.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationExtensions.SetBasePath(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String)">
+            <summary>
+            Sets the FileProvider for file-based providers to a PhysicalFileProvider with the base path.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="basePath">The absolute path of file-based providers.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationExtensions.SetFileLoadExceptionHandler(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action{Microsoft.Extensions.Configuration.FileLoadExceptionContext})">
+            <summary>
+            Sets a default action to be invoked for file-based providers when an error occurs.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="handler">The Action to be invoked on a file load exception.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationExtensions.GetFileLoadExceptionHandler(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Gets the default <see cref="T:Microsoft.Extensions.FileProviders.IFileProvider"/> to be used for file-based providers.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.FileConfigurationProvider">
+            <summary>
+            Base class for file based <see cref="T:Microsoft.Extensions.Configuration.ConfigurationProvider"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationProvider.#ctor(Microsoft.Extensions.Configuration.FileConfigurationSource)">
+            <summary>
+            Initializes a new instance with the specified source.
+            </summary>
+            <param name="source">The source settings.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationProvider.Source">
+            <summary>
+            The source settings for this provider.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationProvider.Load">
+            <summary>
+            Loads the contents of the file at <see cref="T:System.IO.Path"/>.
+            </summary>
+            <exception cref="T:System.IO.FileNotFoundException">If Optional is <c>false</c> on the source and a
+            file does not exist at specified Path.</exception>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(System.IO.Stream)">
+            <summary>
+            Loads this provider's data from a stream.
+            </summary>
+            <param name="stream">The stream to read.</param>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.FileConfigurationSource">
+            <summary>
+            Represents a base class for file based <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSource"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationSource.FileProvider">
+            <summary>
+            Used to access the contents of the file.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationSource.Path">
+            <summary>
+            The path to the file.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationSource.Optional">
+            <summary>
+            Determines if loading the file is optional.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationSource.ReloadOnChange">
+            <summary>
+            Determines whether the source will be loaded if the underlying file changes.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationSource.ReloadDelay">
+            <summary>
+            Number of milliseconds that reload will wait before calling Load.  This helps
+            avoid triggering reload before a file is completely written. Default is 250.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileConfigurationSource.OnLoadException">
+            <summary>
+            Will be called if an uncaught exception occurs in FileConfigurationProvider.Load.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Builds the <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/> for this source.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationSource.EnsureDefaults(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Called to use any default settings on the builder like the FileProvider or FileLoadExceptionHandler.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileConfigurationSource.ResolveFileProvider">
+            <summary>
+            If no file provider has been set, for absolute Path, this will creates a physical file provider 
+            for the nearest existing directory.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.FileLoadExceptionContext">
+            <summary>
+            Contains information about a file load exception.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileLoadExceptionContext.Provider">
+            <summary>
+            The <see cref="T:Microsoft.Extensions.Configuration.FileConfigurationProvider"/> that caused the exception.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileLoadExceptionContext.Exception">
+            <summary>
+            The exception that occured in Load.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileLoadExceptionContext.Ignore">
+            <summary>
+            If true, the exception will not be rethrown.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileExtensions.Resources.Error_ExpectedPhysicalPath">
+            <summary>
+            The expected physical path was '{0}'.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileExtensions.Resources.FormatError_ExpectedPhysicalPath(System.Object)">
+            <summary>
+            The expected physical path was '{0}'.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.FileExtensions.Resources.Error_FileNotFound">
+            <summary>
+            The configuration file '{0}' was not found and is not optional.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.FileExtensions.Resources.FormatError_FileNotFound(System.Object)">
+            <summary>
+            The configuration file '{0}' was not found and is not optional.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Json.dll


+ 132 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.Json.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Configuration.Json</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Configuration.JsonConfigurationExtensions">
+            <summary>
+            Extension methods for adding <see cref="T:Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String)">
+            <summary>
+            Adds the JSON configuration provider at <paramref name="path"/> to <paramref name="builder"/>.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="path">Path relative to the base path stored in 
+            <see cref="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Properties"/> of <paramref name="builder"/>.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean)">
+            <summary>
+            Adds the JSON configuration provider at <paramref name="path"/> to <paramref name="builder"/>.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="path">Path relative to the base path stored in 
+            <see cref="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Properties"/> of <paramref name="builder"/>.</param>
+            <param name="optional">Whether the file is optional.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.String,System.Boolean,System.Boolean)">
+            <summary>
+            Adds the JSON configuration provider at <paramref name="path"/> to <paramref name="builder"/>.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="path">Path relative to the base path stored in 
+            <see cref="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Properties"/> of <paramref name="builder"/>.</param>
+            <param name="optional">Whether the file is optional.</param>
+            <param name="reloadOnChange">Whether the configuration should be reloaded if the file changes.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.FileProviders.IFileProvider,System.String,System.Boolean,System.Boolean)">
+            <summary>
+            Adds a JSON configuration source to <paramref name="builder"/>.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="provider">The <see cref="T:Microsoft.Extensions.FileProviders.IFileProvider"/> to use to access the file.</param>
+            <param name="path">Path relative to the base path stored in 
+            <see cref="P:Microsoft.Extensions.Configuration.IConfigurationBuilder.Properties"/> of <paramref name="builder"/>.</param>
+            <param name="optional">Whether the file is optional.</param>
+            <param name="reloadOnChange">Whether the configuration should be reloaded if the file changes.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.JsonConfigurationExtensions.AddJsonFile(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action{Microsoft.Extensions.Configuration.Json.JsonConfigurationSource})">
+            <summary>
+            Adds a JSON configuration source to <paramref name="builder"/>.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="configureSource">Configures the source.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider">
+            <summary>
+            A JSON file based <see cref="T:Microsoft.Extensions.Configuration.FileConfigurationProvider"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider.#ctor(Microsoft.Extensions.Configuration.Json.JsonConfigurationSource)">
+            <summary>
+            Initializes a new instance with the specified source.
+            </summary>
+            <param name="source">The source settings.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider.Load(System.IO.Stream)">
+            <summary>
+            Loads the JSON data from a stream.
+            </summary>
+            <param name="stream">The stream to read.</param>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.Json.JsonConfigurationSource">
+            <summary>
+            Represents a JSON file as an <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSource"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.JsonConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Builds the <see cref="T:Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider"/> for this source.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider"/></returns>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.Json.Resources.Error_InvalidFilePath">
+            <summary>
+            File path must be a non-empty string.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.Resources.FormatError_InvalidFilePath">
+            <summary>
+            File path must be a non-empty string.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.Json.Resources.Error_JSONParseError">
+            <summary>
+            Could not parse the JSON file. Error on line number '{0}': '{1}'.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.Resources.FormatError_JSONParseError(System.Object,System.Object)">
+            <summary>
+            Could not parse the JSON file. Error on line number '{0}': '{1}'.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.Json.Resources.Error_KeyIsDuplicated">
+            <summary>
+            A duplicate key '{0}' was found.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.Resources.FormatError_KeyIsDuplicated(System.Object)">
+            <summary>
+            A duplicate key '{0}' was found.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.Json.Resources.Error_UnsupportedJSONToken">
+            <summary>
+            Unsupported JSON token '{0}' was found. Path '{1}', line {2} position {3}.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Json.Resources.FormatError_UnsupportedJSONToken(System.Object,System.Object,System.Object,System.Object)">
+            <summary>
+            Unsupported JSON token '{0}' was found. Path '{1}', line {2} position {3}.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.dll


+ 401 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Configuration.xml

@@ -0,0 +1,401 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Configuration</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Configuration.ChainedBuilderExtensions">
+            <summary>
+            IConfigurationBuilder extension methods for the chaind configuration provider.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedBuilderExtensions.AddConfiguration(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration)">
+            <summary>
+            Adds an existing configuration to <paramref name="configurationBuilder"/>.
+            </summary>
+            <param name="configurationBuilder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="config">The <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/> to add.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ChainedConfigurationProvider">
+            <summary>
+            Chained implementation of <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationProvider.#ctor(Microsoft.Extensions.Configuration.ChainedConfigurationSource)">
+            <summary>
+            Initialize a new instance from the source configuration.
+            </summary>
+            <param name="source">The source configuration.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationProvider.TryGet(System.String,System.String@)">
+            <summary>
+            Tries to get a configuration value for the specified key.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="value">The value.</param>
+            <returns><c>True</c> if a value for the specified key was found, otherwise <c>false</c>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationProvider.Set(System.String,System.String)">
+            <summary>
+            Sets a configuration value for the specified key.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="value">The value.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationProvider.GetReloadToken">
+            <summary>
+            Returns a change token if this provider supports change tracking, null otherwise.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationProvider.Load">
+            <summary>
+            Loads configuration values from the source represented by this <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable{System.String},System.String)">
+            <summary>
+            Returns the immediate descendant configuration keys for a given parent path based on this
+            <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>'s data and the set of keys returned by all the preceding
+            <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s.
+            </summary>
+            <param name="earlierKeys">The child keys returned by the preceding providers for the same parent path.</param>
+            <param name="parentPath">The parent path.</param>
+            <returns>The child keys.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ChainedConfigurationSource">
+            <summary>
+            Represents a chained IConfiguration as an <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSource"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ChainedConfigurationSource.Configuration">
+            <summary>
+            The chained configuration.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ChainedConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Builds the <see cref="T:Microsoft.Extensions.Configuration.ChainedConfigurationProvider"/> for this source.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Configuration.ChainedConfigurationProvider"/></returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationBuilder">
+            <summary>
+            Used to build key/value based configuration settings for use in an application.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationBuilder.Sources">
+            <summary>
+            Returns the sources used to obtain configuration values.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationBuilder.Properties">
+            <summary>
+            Gets a key/value collection that can be used to share data between the <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>
+            and the registered <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationBuilder.Add(Microsoft.Extensions.Configuration.IConfigurationSource)">
+            <summary>
+            Adds a new configuration source.
+            </summary>
+            <param name="source">The configuration source to add.</param>
+            <returns>The same <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationBuilder.Build">
+            <summary>
+            Builds an <see cref="T:Microsoft.Extensions.Configuration.IConfiguration"/> with keys and values from the set of providers registered in
+            <see cref="P:Microsoft.Extensions.Configuration.ConfigurationBuilder.Sources"/>.
+            </summary>
+            <returns>An <see cref="T:Microsoft.Extensions.Configuration.IConfigurationRoot"/> with keys and values from the registered providers.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationKeyComparer">
+            <summary>
+            IComparer implementation used to order configuration keys.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationKeyComparer.Instance">
+            <summary>
+            The default instance.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationKeyComparer.Compare(System.String,System.String)">
+            <summary>
+            Compares two strings.
+            </summary>
+            <param name="x">First string.</param>
+            <param name="y">Second string.</param>
+            <returns></returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationProvider">
+            <summary>
+            Base helper class for implementing an <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.#ctor">
+            <summary>
+            Initializes a new <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationProvider.Data">
+            <summary>
+            The configuration key value pairs for this provider.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.TryGet(System.String,System.String@)">
+            <summary>
+            Attempts to find a value with the given key, returns true if one is found, false otherwise.
+            </summary>
+            <param name="key">The key to lookup.</param>
+            <param name="value">The value found at key if one is found.</param>
+            <returns>True if key has a value, false otherwise.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.Set(System.String,System.String)">
+            <summary>
+            Sets a value for a given key.
+            </summary>
+            <param name="key">The configuration key to set.</param>
+            <param name="value">The value to set.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.Load">
+            <summary>
+            Loads (or reloads) the data for this provider.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.GetChildKeys(System.Collections.Generic.IEnumerable{System.String},System.String)">
+            <summary>
+            Returns the list of keys that this provider has.
+            </summary>
+            <param name="earlierKeys">The earlier keys that other providers contain.</param>
+            <param name="parentPath">The path for the parent IConfiguration.</param>
+            <returns>The list of keys for this provider.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.GetReloadToken">
+            <summary>
+            Returns a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that can be used to listen when this provider is reloaded.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationProvider.OnReload">
+            <summary>
+            Triggers the reload change token and creates a new one.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationReloadToken">
+            <summary>
+            Implements <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/>
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationReloadToken.ActiveChangeCallbacks">
+            <summary>
+            Indicates if this token will proactively raise callbacks. Callbacks are still guaranteed to be invoked, eventually.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationReloadToken.HasChanged">
+            <summary>
+            Gets a value that indicates if a change has occurred.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationReloadToken.RegisterChangeCallback(System.Action{System.Object},System.Object)">
+            <summary>
+            Registers for a callback that will be invoked when the entry has changed. <see cref="P:Microsoft.Extensions.Primitives.IChangeToken.HasChanged"/>
+            MUST be set before the callback is invoked.
+            </summary>
+            <param name="callback">The callback to invoke.</param>
+            <param name="state">State to be passed into the callback.</param>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationReloadToken.OnReload">
+            <summary>
+            Used to trigger the change token when a reload occurs.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationRoot">
+            <summary>
+            The root node for a configuration.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationRoot.#ctor(System.Collections.Generic.IList{Microsoft.Extensions.Configuration.IConfigurationProvider})">
+            <summary>
+            Initializes a Configuration root with a list of providers.
+            </summary>
+            <param name="providers">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s for this configuration.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationRoot.Providers">
+            <summary>
+            The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>s for this configuration.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationRoot.Item(System.String)">
+            <summary>
+            Gets or sets the value corresponding to a configuration key.
+            </summary>
+            <param name="key">The configuration key.</param>
+            <returns>The configuration value.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationRoot.GetChildren">
+            <summary>
+            Gets the immediate children sub-sections.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationRoot.GetReloadToken">
+            <summary>
+            Returns a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that can be used to observe when this configuration is reloaded.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationRoot.GetSection(System.String)">
+            <summary>
+            Gets a configuration sub-section with the specified key.
+            </summary>
+            <param name="key">The key of the configuration section.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSection"/>.</returns>
+            <remarks>
+                This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
+                an empty <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSection"/> will be returned.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationRoot.Reload">
+            <summary>
+            Force the configuration values to be reloaded from the underlying sources.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.ConfigurationSection">
+            <summary>
+            Represents a section of application configuration values.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationSection.#ctor(Microsoft.Extensions.Configuration.ConfigurationRoot,System.String)">
+            <summary>
+            Initializes a new instance.
+            </summary>
+            <param name="root">The configuration root.</param>
+            <param name="path">The path to this section.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationSection.Path">
+            <summary>
+            Gets the full path to this section from the <see cref="T:Microsoft.Extensions.Configuration.IConfigurationRoot"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationSection.Key">
+            <summary>
+            Gets the key this section occupies in its parent.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationSection.Value">
+            <summary>
+            Gets or sets the section value.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.ConfigurationSection.Item(System.String)">
+            <summary>
+            Gets or sets the value corresponding to a configuration key.
+            </summary>
+            <param name="key">The configuration key.</param>
+            <returns>The configuration value.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationSection.GetSection(System.String)">
+            <summary>
+            Gets a configuration sub-section with the specified key.
+            </summary>
+            <param name="key">The key of the configuration section.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSection"/>.</returns>
+            <remarks>
+                This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
+                an empty <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSection"/> will be returned.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationSection.GetChildren">
+            <summary>
+            Gets the immediate descendant configuration sub-sections.
+            </summary>
+            <returns>The configuration sub-sections.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.ConfigurationSection.GetReloadToken">
+            <summary>
+            Returns a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that can be used to observe when this configuration is reloaded.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.MemoryConfigurationBuilderExtensions">
+            <summary>
+            IConfigurationBuilder extension methods for the MemoryConfigurationProvider.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.MemoryConfigurationBuilderExtensions.AddInMemoryCollection(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Adds the memory configuration provider to <paramref name="configurationBuilder"/>.
+            </summary>
+            <param name="configurationBuilder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.MemoryConfigurationBuilderExtensions.AddInMemoryCollection(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}})">
+            <summary>
+            Adds the memory configuration provider to <paramref name="configurationBuilder"/>.
+            </summary>
+            <param name="configurationBuilder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/> to add to.</param>
+            <param name="initialData">The data to add to memory configuration provider.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider">
+            <summary>
+            In-memory implementation of <see cref="T:Microsoft.Extensions.Configuration.IConfigurationProvider"/>
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider.#ctor(Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource)">
+            <summary>
+            Initialize a new instance from the source.
+            </summary>
+            <param name="source">The source settings.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider.Add(System.String,System.String)">
+            <summary>
+            Add a new key and value pair.
+            </summary>
+            <param name="key">The configuration key.</param>
+            <param name="value">The configuration value.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the collection.
+            </summary>
+            <returns>An enumerator that can be used to iterate through the collection.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the collection.
+            </summary>
+            <returns>An enumerator that can be used to iterate through the collection.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource">
+            <summary>
+            Represents in-memory data as an <see cref="T:Microsoft.Extensions.Configuration.IConfigurationSource"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource.InitialData">
+            <summary>
+            The initial key value configuration pairs.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder)">
+            <summary>
+            Builds the <see cref="T:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider"/> for this source.
+            </summary>
+            <param name="builder">The <see cref="T:Microsoft.Extensions.Configuration.IConfigurationBuilder"/>.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider"/></returns>
+        </member>
+        <member name="P:Microsoft.Extensions.Configuration.Resources.Error_NoSources">
+            <summary>
+            A configuration source is not registered. Please register one before setting a value.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Configuration.Resources.FormatError_NoSources">
+            <summary>
+            A configuration source is not registered. Please register one before setting a value.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.DependencyInjection.Abstractions.dll


Diff do ficheiro suprimidas por serem muito extensas
+ 1075 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.DependencyInjection.Abstractions.xml


BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Abstractions.dll


+ 207 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Abstractions.xml

@@ -0,0 +1,207 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.FileProviders.Abstractions</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.FileProviders.IDirectoryContents">
+            <summary>
+            Represents a directory's content in the file provider.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IDirectoryContents.Exists">
+            <summary>
+            True if a directory was located at the given path.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.IFileInfo">
+            <summary>
+            Represents a file in the given file provider.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IFileInfo.Exists">
+            <summary>
+            True if resource exists in the underlying storage system.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IFileInfo.Length">
+            <summary>
+            The length of the file in bytes, or -1 for a directory or non-existing files.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IFileInfo.PhysicalPath">
+            <summary>
+            The path to the file, including the file name. Return null if the file is not directly accessible.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IFileInfo.Name">
+            <summary>
+            The name of the file or directory, not including any path.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IFileInfo.LastModified">
+            <summary>
+            When the file was last modified
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.IFileInfo.IsDirectory">
+            <summary>
+            True for the case TryGetDirectoryContents has enumerated a sub-directory
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.IFileInfo.CreateReadStream">
+            <summary>
+            Return file contents as readonly stream. Caller should dispose stream when complete.
+            </summary>
+            <returns>The file stream</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.IFileProvider">
+            <summary>
+            A read-only file provider abstraction.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.IFileProvider.GetFileInfo(System.String)">
+            <summary>
+            Locate a file at the given path.
+            </summary>
+            <param name="subpath">Relative path that identifies the file.</param>
+            <returns>The file information. Caller must check Exists property.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.IFileProvider.GetDirectoryContents(System.String)">
+            <summary>
+            Enumerate a directory at the given path, if any.
+            </summary>
+            <param name="subpath">Relative path that identifies the directory.</param>
+            <returns>Returns the contents of the directory.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.IFileProvider.Watch(System.String)">
+            <summary>
+            Creates a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> for the specified <paramref name="filter"/>.
+            </summary>
+            <param name="filter">Filter string used to determine what files or folders to monitor. Example: **/*.cs, *.*, subFolder/**/*.cshtml.</param>
+            <returns>An <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that is notified when a file matching <paramref name="filter"/> is added, modified or deleted.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents">
+            <summary>
+            Represents a non-existing directory
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents.Singleton">
+            <summary>
+            A shared instance of <see cref="T:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents"/> 
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents.Exists">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents.GetEnumerator">
+            <summary>Returns an enumerator that iterates through the collection.</summary>
+            <returns>An enumerator to an empty collection.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents.System#Collections#IEnumerable#GetEnumerator">
+            <inheritdoc />
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.NotFoundFileInfo">
+            <summary>
+            Represents a non-existing file.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NotFoundFileInfo.#ctor(System.String)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.NotFoundFileInfo"/>.
+            </summary>
+            <param name="name">The name of the file that could not be found</param>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundFileInfo.Exists">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundFileInfo.IsDirectory">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundFileInfo.LastModified">
+            <summary>
+            Returns <see cref="F:System.DateTimeOffset.MinValue"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundFileInfo.Length">
+            <summary>
+            Always equals -1.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundFileInfo.Name">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NotFoundFileInfo.PhysicalPath">
+            <summary>
+            Always null.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NotFoundFileInfo.CreateReadStream">
+            <summary>
+            Always throws. A stream cannot be created for non-existing file.
+            </summary>
+            <exception cref="T:System.IO.FileNotFoundException">Always thrown.</exception>
+            <returns>Does not return</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.NullChangeToken">
+            <summary>
+            An empty change token that doesn't raise any change callbacks.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NullChangeToken.Singleton">
+            <summary>
+            A singleton instance of <see cref="T:Microsoft.Extensions.FileProviders.NullChangeToken"/>
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NullChangeToken.HasChanged">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.NullChangeToken.ActiveChangeCallbacks">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NullChangeToken.RegisterChangeCallback(System.Action{System.Object},System.Object)">
+            <summary>
+            Always returns an empty disposable object. Callbacks will never be called.
+            </summary>
+            <param name="callback">This parameter is ignored</param>
+            <param name="state">This parameter is ignored</param>
+            <returns>A disposable object that noops on dispose.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.NullFileProvider">
+            <summary>
+            An empty file provider with no contents.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NullFileProvider.GetDirectoryContents(System.String)">
+            <summary>
+            Enumerate a non-existent directory.
+            </summary>
+            <param name="subpath">A path under the root directory. This parameter is ignored.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.FileProviders.IDirectoryContents"/> that does not exist and does not contain any contents.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NullFileProvider.GetFileInfo(System.String)">
+            <summary>
+            Locate a non-existent file.
+            </summary>
+            <param name="subpath">A path under the root directory.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.FileProviders.IFileInfo"/> representing a non-existent file at the given path.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.NullFileProvider.Watch(System.String)">
+            <summary>
+            Returns a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that monitors nothing.
+            </summary>
+            <param name="filter">Filter string used to determine what files or folders to monitor. This parameter is ignored.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> that does not register callbacks.</returns>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Physical.dll


+ 329 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.FileProviders.Physical.xml

@@ -0,0 +1,329 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.FileProviders.Physical</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.FileProviders.Physical.ExclusionFilters">
+            <summary>
+            Specifies filtering behavior for files or directories.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.FileProviders.Physical.ExclusionFilters.Sensitive">
+            <summary>
+            Equivalent to <c>DotPrefixed | Hidden | System</c>. Exclude files and directories when the name begins with a period, or has either <see cref="F:System.IO.FileAttributes.Hidden"/> or <see cref="F:System.IO.FileAttributes.System"/> is set on <see cref="P:System.IO.FileSystemInfo.Attributes"/>.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.FileProviders.Physical.ExclusionFilters.DotPrefixed">
+            <summary>
+            Exclude files and directories when the name begins with period.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.FileProviders.Physical.ExclusionFilters.Hidden">
+            <summary>
+            Exclude files and directories when <see cref="F:System.IO.FileAttributes.Hidden"/> is set on <see cref="P:System.IO.FileSystemInfo.Attributes"/>.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.FileProviders.Physical.ExclusionFilters.System">
+            <summary>
+            Exclude files and directories when <see cref="F:System.IO.FileAttributes.System"/> is set on <see cref="P:System.IO.FileSystemInfo.Attributes"/>.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.FileProviders.Physical.ExclusionFilters.None">
+            <summary>
+            Do not exclude any files.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo">
+            <summary>
+            Represents a directory on a physical filesystem
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.#ctor(System.IO.DirectoryInfo)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo"/> that wraps an instance of <see cref="T:System.IO.DirectoryInfo"/>
+            </summary>
+            <param name="info">The directory</param>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.Exists">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.Length">
+            <summary>
+            Always equals -1.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.PhysicalPath">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.Name">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.LastModified">
+            <summary>
+            The time when the directory was last written to.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.IsDirectory">
+            <summary>
+            Always true.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalDirectoryInfo.CreateReadStream">
+            <summary>
+            Always throws an exception because read streams are not support on directories.
+            </summary>
+            <exception cref="T:System.InvalidOperationException">Always thrown</exception>
+            <returns>Never returns</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo">
+            <summary>
+            Represents a file on a physical filesystem
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.#ctor(System.IO.FileInfo)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo"/> that wraps an instance of <see cref="T:System.IO.FileInfo"/>
+            </summary>
+            <param name="info">The <see cref="T:System.IO.FileInfo"/></param>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.Exists">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.Length">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.PhysicalPath">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.Name">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.LastModified">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.IsDirectory">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFileInfo.CreateReadStream">
+            <inheritdoc />
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher">
+            <summary>
+                <para>
+                A file watcher that watches a physical filesystem for changes.
+                </para>
+                <para>
+                Triggers events on <see cref="T:Microsoft.Extensions.Primitives.IChangeToken" /> when files are created, change, renamed, or deleted.
+                </para>
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.#ctor(System.String,System.IO.FileSystemWatcher,System.Boolean)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher" /> that watches files in <paramref name="root" />.
+            Wraps an instance of <see cref="T:System.IO.FileSystemWatcher" />
+            </summary>
+            <param name="root">Root directory for the watcher</param>
+            <param name="fileSystemWatcher">The wrapped watcher that is watching <paramref name="root" /></param>
+            <param name="pollForChanges">
+            True when the watcher should use polling to trigger instances of
+            <see cref="T:Microsoft.Extensions.Primitives.IChangeToken" /> created by <see cref="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(System.String)" />
+            </param>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.#ctor(System.String,System.IO.FileSystemWatcher,System.Boolean,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher" /> that watches files in <paramref name="root" />.
+            Wraps an instance of <see cref="T:System.IO.FileSystemWatcher" />
+            </summary>
+            <param name="root">Root directory for the watcher</param>
+            <param name="fileSystemWatcher">The wrapped watcher that is watching <paramref name="root" /></param>
+            <param name="pollForChanges">
+            True when the watcher should use polling to trigger instances of
+            <see cref="T:Microsoft.Extensions.Primitives.IChangeToken" /> created by <see cref="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(System.String)" />
+            </param>
+            <param name="filters">Specifies which files or directories are excluded. Notifications of changes to are not raised to these.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.CreateFileChangeToken(System.String)">
+            <summary>
+                <para>
+                Creates an instance of <see cref="T:Microsoft.Extensions.Primitives.IChangeToken" /> for all files and directories that match the
+                <paramref name="filter" />
+                </para>
+                <para>
+                Globbing patterns are relative to the root directory given in the constructor
+                <seealso cref="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.#ctor(System.String,System.IO.FileSystemWatcher,System.Boolean)" />. Globbing patterns
+                are interpreted by <seealso cref="T:Microsoft.Extensions.FileSystemGlobbing.Matcher" />.
+                </para>
+            </summary>
+            <param name="filter">A globbing pattern for files and directories to watch</param>
+            <returns>A change token for all files that match the filter</returns>
+            <exception cref="T:System.ArgumentNullException">When <paramref name="filter" /> is null</exception>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.Dispose">
+            <summary>
+            Disposes the file watcher
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken">
+            <summary>
+                <para>
+                A change token that polls for file system changes.
+                </para>
+                <para>
+                This change token does not raise any change callbacks. Callers should watch for <see cref="P:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.HasChanged" /> to turn
+                from false to true
+                and dispose the token after this happens.
+                </para>
+            </summary>
+            <remarks>
+            Polling occurs every 4 seconds.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.#ctor(System.IO.FileInfo)">
+            <summary>
+            Initializes a new instance of <see cref="T:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken" /> that polls the specified file for changes as
+            determined by <see cref="P:System.IO.FileSystemInfo.LastWriteTimeUtc" />.
+            </summary>
+            <param name="fileInfo">The <see cref="T:System.IO.FileInfo"/> to poll</param>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.ActiveChangeCallbacks">
+            <summary>
+            Always false.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.HasChanged">
+            <summary>
+            True when the file has changed since the change token was created. Once the file changes, this value is always true
+            </summary>
+            <remarks>
+            Once true, the value will always be true. Change tokens should not re-used once expired. The caller should discard this
+            instance once it sees <see cref="P:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.HasChanged" /> is true.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.RegisterChangeCallback(System.Action{System.Object},System.Object)">
+            <summary>
+            Does not actually register callbacks.
+            </summary>
+            <param name="callback">This parameter is ignored</param>
+            <param name="state">This parameter is ignored</param>
+            <returns>A disposable object that noops when disposed</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.Physical.PollingWildCardChangeToken">
+            <summary>
+            A polling based <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> for wildcard patterns.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PollingWildCardChangeToken.#ctor(System.String,System.String)">
+            <summary>
+            Initializes a new instance of <see cref="T:Microsoft.Extensions.FileProviders.Physical.PollingWildCardChangeToken"/>.
+            </summary>
+            <param name="root">The root of the file system.</param>
+            <param name="pattern">The pattern to watch.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PollingWildCardChangeToken.ActiveChangeCallbacks">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Physical.PollingWildCardChangeToken.HasChanged">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Physical.PollingWildCardChangeToken.GetLastWriteUtc(System.String)">
+            <summary>
+            Gets the last write time of the file at the specified <paramref name="path"/>.
+            </summary>
+            <param name="path">The root relative path.</param>
+            <returns>The <see cref="T:System.DateTime"/> that the file was last modified.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents">
+            <summary>
+            Represents the contents of a physical file directory
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents.#ctor(System.String)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents"/>
+            </summary>
+            <param name="directory">The directory</param>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents.#ctor(System.String,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters)">
+            <summary>
+            Initializes an instance of <see cref="T:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents"/>
+            </summary>
+            <param name="directory">The directory</param>
+            <param name="filters">Specifies which files or directories are excluded from enumeration.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents.Exists">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.Internal.PhysicalDirectoryContents.GetEnumerator">
+            <inheritdoc />
+        </member>
+        <member name="T:Microsoft.Extensions.FileProviders.PhysicalFileProvider">
+            <summary>
+            Looks up files using the on-disk file system
+            </summary>
+            <remarks>
+            When the environment variable "DOTNET_USE_POLLING_FILE_WATCHER" is set to "1" or "true", calls to
+            <see cref="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(System.String)" /> will use <see cref="T:Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken" />.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of a PhysicalFileProvider at the given root directory.
+            </summary>
+            <param name="root">The root directory. This should be an absolute path.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.#ctor(System.String,Microsoft.Extensions.FileProviders.Physical.ExclusionFilters)">
+            <summary>
+            Initializes a new instance of a PhysicalFileProvider at the given root directory.
+            </summary>
+            <param name="root">The root directory. This should be an absolute path.</param>
+            <param name="filters">Specifies which files or directories are excluded.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.Dispose">
+            <summary>
+            Disposes the provider. Change tokens may not trigger after the provider is disposed.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.FileProviders.PhysicalFileProvider.Root">
+            <summary>
+            The root directory for this instance.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.GetFileInfo(System.String)">
+            <summary>
+            Locate a file at the given path by directly mapping path segments to physical directories.
+            </summary>
+            <param name="subpath">A path under the root directory</param>
+            <returns>The file information. Caller must check <see cref="P:Microsoft.Extensions.FileProviders.IFileInfo.Exists"/> property. </returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.GetDirectoryContents(System.String)">
+            <summary>
+            Enumerate a directory at the given path, if any.
+            </summary>
+            <param name="subpath">A path under the root directory. Leading slashes are ignored.</param>
+            <returns>
+            Contents of the directory. Caller must check <see cref="P:Microsoft.Extensions.FileProviders.IDirectoryContents.Exists"/> property. <see cref="T:Microsoft.Extensions.FileProviders.NotFoundDirectoryContents" /> if
+            <paramref name="subpath" /> is absolute, if the directory does not exist, or <paramref name="subpath" /> has invalid
+            characters.
+            </returns>
+        </member>
+        <member name="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.Watch(System.String)">
+            <summary>
+                <para>Creates a <see cref="T:Microsoft.Extensions.Primitives.IChangeToken" /> for the specified <paramref name="filter" />.</para>
+                <para>Globbing patterns are interpreted by <seealso cref="T:Microsoft.Extensions.FileSystemGlobbing.Matcher" />.</para>
+            </summary>
+            <param name="filter">
+            Filter string used to determine what files or folders to monitor. Example: **/*.cs, *.*,
+            subFolder/**/*.cshtml.
+            </param>
+            <returns>
+            An <see cref="T:Microsoft.Extensions.Primitives.IChangeToken" /> that is notified when a file matching <paramref name="filter" /> is added,
+            modified or deleted. Returns a <see cref="T:Microsoft.Extensions.FileProviders.NullChangeToken" /> if <paramref name="filter" /> has invalid filter
+            characters or if <paramref name="filter" /> is an absolute path or outside the root directory specified in the
+            constructor <seealso cref="M:Microsoft.Extensions.FileProviders.PhysicalFileProvider.#ctor(System.String)" />.
+            </returns>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.Abstractions.dll


+ 507 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.Abstractions.xml

@@ -0,0 +1,507 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Logging.Abstractions</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Logging.ILogger">
+            <summary>
+            Represents a type used to perform logging.
+            </summary>
+            <remarks>Aggregates most logging patterns to a single method.</remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.ILogger.Log``1(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,``0,System.Exception,System.Func{``0,System.Exception,System.String})">
+            <summary>
+            Writes a log entry.
+            </summary>
+            <param name="logLevel">Entry will be written on this level.</param>
+            <param name="eventId">Id of the event.</param>
+            <param name="state">The entry to be written. Can be also an object.</param>
+            <param name="exception">The exception related to this entry.</param>
+            <param name="formatter">Function to create a <c>string</c> message of the <paramref name="state"/> and <paramref name="exception"/>.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.ILogger.IsEnabled(Microsoft.Extensions.Logging.LogLevel)">
+            <summary>
+            Checks if the given <paramref name="logLevel"/> is enabled.
+            </summary>
+            <param name="logLevel">level to be checked.</param>
+            <returns><c>true</c> if enabled.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.ILogger.BeginScope``1(``0)">
+            <summary>
+            Begins a logical operation scope.
+            </summary>
+            <param name="state">The identifier for the scope.</param>
+            <returns>An IDisposable that ends the logical operation scope on dispose.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.ILoggerFactory">
+            <summary>
+            Represents a type used to configure the logging system and create instances of <see cref="T:Microsoft.Extensions.Logging.ILogger"/> from
+            the registered <see cref="T:Microsoft.Extensions.Logging.ILoggerProvider"/>s.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.ILoggerFactory.CreateLogger(System.String)">
+            <summary>
+            Creates a new <see cref="T:Microsoft.Extensions.Logging.ILogger"/> instance.
+            </summary>
+            <param name="categoryName">The category name for messages produced by the logger.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.Logging.ILogger"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.ILoggerFactory.AddProvider(Microsoft.Extensions.Logging.ILoggerProvider)">
+            <summary>
+            Adds an <see cref="T:Microsoft.Extensions.Logging.ILoggerProvider"/> to the logging system.
+            </summary>
+            <param name="provider">The <see cref="T:Microsoft.Extensions.Logging.ILoggerProvider"/>.</param>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.ILogger`1">
+            <summary>
+            A generic interface for logging where the category name is derived from the specified
+            <typeparamref name="TCategoryName"/> type name.
+            Generally used to enable activation of a named <see cref="T:Microsoft.Extensions.Logging.ILogger"/> from dependency injection.
+            </summary>
+            <typeparam name="TCategoryName">The type who's name is used for the logger category name.</typeparam>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.ILoggerProvider">
+            <summary>
+            Represents a type that can create instances of <see cref="T:Microsoft.Extensions.Logging.ILogger"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.ILoggerProvider.CreateLogger(System.String)">
+            <summary>
+            Creates a new <see cref="T:Microsoft.Extensions.Logging.ILogger"/> instance.
+            </summary>
+            <param name="categoryName">The category name for messages produced by the logger.</param>
+            <returns></returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.LoggerExtensions">
+            <summary>
+            ILogger extension methods for common scenarios.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogDebug(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])">
+            <summary>
+            Formats and writes a debug log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="exception">The exception to log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogDebug(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])">
+            <summary>
+            Formats and writes a debug log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogDebug(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats and writes a debug log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogTrace(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])">
+            <summary>
+            Formats and writes a trace log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="exception">The exception to log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogTrace(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])">
+            <summary>
+            Formats and writes a trace log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogTrace(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats and writes a trace log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogInformation(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])">
+            <summary>
+            Formats and writes an informational log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="exception">The exception to log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogInformation(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])">
+            <summary>
+            Formats and writes an informational log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogInformation(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats and writes an informational log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogWarning(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])">
+            <summary>
+            Formats and writes a warning log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="exception">The exception to log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogWarning(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])">
+            <summary>
+            Formats and writes a warning log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogWarning(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats and writes a warning log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogError(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])">
+            <summary>
+            Formats and writes an error log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="exception">The exception to log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogError(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])">
+            <summary>
+            Formats and writes an error log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogError(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats and writes an error log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogCritical(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.Exception,System.String,System.Object[])">
+            <summary>
+            Formats and writes a critical log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="exception">The exception to log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogCritical(Microsoft.Extensions.Logging.ILogger,Microsoft.Extensions.Logging.EventId,System.String,System.Object[])">
+            <summary>
+            Formats and writes a critical log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="eventId">The event id associated with the log.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.LogCritical(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats and writes a critical log message.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to write to.</param>
+            <param name="message">Format string of the log message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerExtensions.BeginScope(Microsoft.Extensions.Logging.ILogger,System.String,System.Object[])">
+            <summary>
+            Formats the message and creates a scope.
+            </summary>
+            <param name="logger">The <see cref="T:Microsoft.Extensions.Logging.ILogger"/> to create the scope in.</param>
+            <param name="messageFormat">Format string of the scope message.</param>
+            <param name="args">An object array that contains zero or more objects to format.</param>
+            <returns>A disposable scope object. Can be null.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.LoggerFactoryExtensions">
+            <summary>
+            ILoggerFactory extension methods for common scenarios.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerFactoryExtensions.CreateLogger``1(Microsoft.Extensions.Logging.ILoggerFactory)">
+            <summary>
+            Creates a new ILogger instance using the full name of the given type.
+            </summary>
+            <typeparam name="T">The type.</typeparam>
+            <param name="factory">The factory.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerFactoryExtensions.CreateLogger(Microsoft.Extensions.Logging.ILoggerFactory,System.Type)">
+            <summary>
+            Creates a new ILogger instance using the full name of the given type.
+            </summary>
+            <param name="factory">The factory.</param>
+            <param name="type">The type.</param>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.LoggerMessage">
+            <summary>
+            Creates delegates which can be later cached to log messages in a performant way.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.DefineScope(System.String)">
+            <summary>
+            Creates a delegate which can be invoked to create a log scope.
+            </summary>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log scope.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.DefineScope``1(System.String)">
+            <summary>
+            Creates a delegate which can be invoked to create a log scope.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log scope.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.DefineScope``2(System.String)">
+            <summary>
+            Creates a delegate which can be invoked to create a log scope.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log scope.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.DefineScope``3(System.String)">
+            <summary>
+            Creates a delegate which can be invoked to create a log scope.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <typeparam name="T3">The type of the third parameter passed to the named format string.</typeparam>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log scope.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define``1(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define``2(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define``3(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <typeparam name="T3">The type of the third parameter passed to the named format string.</typeparam>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define``4(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <typeparam name="T3">The type of the third parameter passed to the named format string.</typeparam>
+            <typeparam name="T4">The type of the fourth parameter passed to the named format string.</typeparam>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define``5(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <typeparam name="T3">The type of the third parameter passed to the named format string.</typeparam>
+            <typeparam name="T4">The type of the fourth parameter passed to the named format string.</typeparam>
+            <typeparam name="T5">The type of the fifth parameter passed to the named format string.</typeparam>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerMessage.Define``6(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,System.String)">
+            <summary>
+            Creates a delegate which can be invoked for logging a message.
+            </summary>
+            <typeparam name="T1">The type of the first parameter passed to the named format string.</typeparam>
+            <typeparam name="T2">The type of the second parameter passed to the named format string.</typeparam>
+            <typeparam name="T3">The type of the third parameter passed to the named format string.</typeparam>
+            <typeparam name="T4">The type of the fourth parameter passed to the named format string.</typeparam>
+            <typeparam name="T5">The type of the fifth parameter passed to the named format string.</typeparam>
+            <typeparam name="T6">The type of the sixth parameter passed to the named format string.</typeparam>
+            <param name="logLevel">The <see cref="T:Microsoft.Extensions.Logging.LogLevel"/></param>
+            <param name="eventId">The event id</param>
+            <param name="formatString">The named format string</param>
+            <returns>A delegate which when invoked creates a log message.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.Logger`1">
+            <summary>
+            Delegates to a new <see cref="T:Microsoft.Extensions.Logging.ILogger"/> instance using the full name of the given type, created by the
+            provided <see cref="T:Microsoft.Extensions.Logging.ILoggerFactory"/>.
+            </summary>
+            <typeparam name="T">The type.</typeparam>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Logger`1.#ctor(Microsoft.Extensions.Logging.ILoggerFactory)">
+            <summary>
+            Creates a new <see cref="T:Microsoft.Extensions.Logging.Logger`1"/>.
+            </summary>
+            <param name="factory">The factory.</param>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.LogLevel">
+            <summary>
+            Defines logging severity levels.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.Trace">
+            <summary>
+            Logs that contain the most detailed messages. These messages may contain sensitive application data.
+            These messages are disabled by default and should never be enabled in a production environment.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.Debug">
+            <summary>
+            Logs that are used for interactive investigation during development.  These logs should primarily contain
+            information useful for debugging and have no long-term value.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.Information">
+            <summary>
+            Logs that track the general flow of the application. These logs should have long-term value.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.Warning">
+            <summary>
+            Logs that highlight an abnormal or unexpected event in the application flow, but do not otherwise cause the
+            application execution to stop.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.Error">
+            <summary>
+            Logs that highlight when the current flow of execution is stopped due to a failure. These should indicate a
+            failure in the current activity, not an application-wide failure.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.Critical">
+            <summary>
+            Logs that describe an unrecoverable application or system crash, or a catastrophic failure that requires
+            immediate attention.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Logging.LogLevel.None">
+            <summary>
+            Not used for writing log messages. Specifies that a logging category should not write any messages.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.Abstractions.NullLogger">
+            <summary>
+            Minimalistic logger that does nothing.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.NullLogger.BeginScope``1(``0)">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.NullLogger.IsEnabled(Microsoft.Extensions.Logging.LogLevel)">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.NullLogger.Log``1(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,``0,System.Exception,System.Func{``0,System.Exception,System.String})">
+            <inheritdoc />
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.Abstractions.NullLoggerProvider">
+            <summary>
+            Provider for the <see cref="T:Microsoft.Extensions.Logging.Abstractions.NullLogger"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.NullLoggerProvider.CreateLogger(System.String)">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.NullLoggerProvider.Dispose">
+            <inheritdoc />
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.Abstractions.Internal.NullScope">
+            <summary>
+            An empty scope without any logic
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.Internal.NullScope.Dispose">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.Logging.Abstractions.Resource.UnexpectedNumberOfNamedParameters">
+            <summary>
+            The format string '{0}' does not have the expected number of named parameters. Expected {1} parameter(s) but found {2} parameter(s).
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.Abstractions.Resource.FormatUnexpectedNumberOfNamedParameters(System.Object,System.Object,System.Object)">
+            <summary>
+            The format string '{0}' does not have the expected number of named parameters. Expected {1} parameter(s) but found {2} parameter(s).
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.Internal.FormattedLogValues">
+            <summary>
+            LogValues to enable formatting options supported by <see cref="M:string.Format"/>.
+            This also enables using {NamedformatItem} in the format string.
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Logging.Internal.LogValuesFormatter">
+            <summary>
+            Formatter to convert the named format items like {NamedformatItem} to <see cref="M:string.Format"/> format.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.dll


+ 31 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Logging.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Logging</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Logging.LoggerFactory">
+            <summary>
+            Summary description for LoggerFactory
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Logging.LoggerFactory.CheckDisposed">
+            <summary>
+            Check if the factory has been disposed.
+            </summary>
+            <returns>True when <see cref="M:Microsoft.Extensions.Logging.LoggerFactory.Dispose"/> as been called</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions">
+            <summary>
+            Extension methods for setting up logging services in an <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" />.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions.AddLogging(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
+            <summary>
+            Adds logging services to the specified <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" />.
+            </summary>
+            <param name="services">The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection" /> to add services to.</param>
+            <returns>The <see cref="T:Microsoft.Extensions.DependencyInjection.IServiceCollection"/> so that additional calls can be chained.</returns>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Primitives.dll


+ 470 - 0
parkspace_manager/sdk/dotNetty/Microsoft.Extensions.Primitives.xml

@@ -0,0 +1,470 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>Microsoft.Extensions.Primitives</name>
+    </assembly>
+    <members>
+        <member name="T:Microsoft.Extensions.Primitives.CancellationChangeToken">
+            <summary>
+            A <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> implementation using <see cref="T:System.Threading.CancellationToken"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.CancellationChangeToken.#ctor(System.Threading.CancellationToken)">
+            <summary>
+            Initializes a new instance of <see cref="T:Microsoft.Extensions.Primitives.CancellationChangeToken"/>.
+            </summary>
+            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/>.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.CancellationChangeToken.ActiveChangeCallbacks">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.CancellationChangeToken.HasChanged">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.CancellationChangeToken.RegisterChangeCallback(System.Action{System.Object},System.Object)">
+            <inheritdoc />
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.ChangeToken">
+            <summary>
+            Propagates notifications that a change has occurred.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.ChangeToken.OnChange(System.Func{Microsoft.Extensions.Primitives.IChangeToken},System.Action)">
+            <summary>
+            Registers the <paramref name="changeTokenConsumer"/> action to be called whenever the token produced changes.
+            </summary>
+            <param name="changeTokenProducer">Produces the change token.</param>
+            <param name="changeTokenConsumer">Action called when the token changes.</param>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.ChangeToken.OnChange``1(System.Func{Microsoft.Extensions.Primitives.IChangeToken},System.Action{``0},``0)">
+            <summary>
+            Registers the <paramref name="changeTokenConsumer"/> action to be called whenever the token produced changes.
+            </summary>
+            <param name="changeTokenProducer">Produces the change token.</param>
+            <param name="changeTokenConsumer">Action called when the token changes.</param>
+            <param name="state">state for the consumer.</param>
+            <returns></returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.CompositeChangeToken">
+            <summary>
+            An <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> which represents one or more <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> instances.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.CompositeChangeToken.#ctor(System.Collections.Generic.IReadOnlyList{Microsoft.Extensions.Primitives.IChangeToken})">
+            <summary>
+            Creates a new instance of <see cref="T:Microsoft.Extensions.Primitives.CompositeChangeToken"/>.
+            </summary>
+            <param name="changeTokens">The list of <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> to compose.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.CompositeChangeToken.ChangeTokens">
+            <summary>
+            Returns the list of <see cref="T:Microsoft.Extensions.Primitives.IChangeToken"/> which compose the current <see cref="T:Microsoft.Extensions.Primitives.CompositeChangeToken"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.CompositeChangeToken.RegisterChangeCallback(System.Action{System.Object},System.Object)">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.CompositeChangeToken.HasChanged">
+            <inheritdoc />
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.CompositeChangeToken.ActiveChangeCallbacks">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.Extensions.Append(System.Text.StringBuilder,Microsoft.Extensions.Primitives.StringSegment)">
+            <summary>
+            Add the given <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to the <see cref="T:System.Text.StringBuilder"/>.
+            </summary>
+            <param name="builder">The <see cref="T:System.Text.StringBuilder"/> to add to.</param>
+            <param name="segment">The <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to add.</param>
+            <returns>The original <see cref="T:System.Text.StringBuilder"/>.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.IChangeToken">
+            <summary>
+            Propagates notifications that a change has occurred.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.IChangeToken.HasChanged">
+            <summary>
+            Gets a value that indicates if a change has occurred.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.IChangeToken.ActiveChangeCallbacks">
+            <summary>
+            Indicates if this token will pro-actively raise callbacks. If <c>false</c>, the token consumer must
+            poll <see cref="P:Microsoft.Extensions.Primitives.IChangeToken.HasChanged" /> to detect changes.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.IChangeToken.RegisterChangeCallback(System.Action{System.Object},System.Object)">
+            <summary>
+            Registers for a callback that will be invoked when the entry has changed.
+            <see cref="P:Microsoft.Extensions.Primitives.IChangeToken.HasChanged"/> MUST be set before the callback is invoked.
+            </summary>
+            <param name="callback">The <see cref="T:System.Action`1"/> to invoke.</param>
+            <param name="state">State to be passed into the callback.</param>
+            <returns>An <see cref="T:System.IDisposable"/> that is used to unregister the callback.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.Resources">
+            <summary>
+               A strongly-typed resource class, for looking up localized strings, etc.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.Resources.ResourceManager">
+            <summary>
+               Returns the cached ResourceManager instance used by this class.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.Resources.Culture">
+            <summary>
+               Overrides the current thread's CurrentUICulture property for all
+               resource lookups using this strongly typed resource class.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.Resources.Argument_InvalidOffsetLength">
+            <summary>
+               Looks up a localized string similar to Offset and length are out of bounds for the string or length is greater than the number of characters from index to the end of the string..
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.Resources.Capacity_CannotChangeAfterWriteStarted">
+            <summary>
+               Looks up a localized string similar to Cannot change capacity after write started..
+            </summary>
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.StringSegment">
+            <summary>
+            An optimized representation of a substring.
+            </summary>
+        </member>
+        <member name="F:Microsoft.Extensions.Primitives.StringSegment.Empty">
+            <summary>
+            A <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> for <see cref="F:System.String.Empty"/>.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.#ctor(System.String)">
+            <summary>
+            Initializes an instance of the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> struct.
+            </summary>
+            <param name="buffer">
+            The original <see cref="T:System.String"/>. The <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> includes the whole <see cref="T:System.String"/>.
+            </param>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.#ctor(System.String,System.Int32,System.Int32)">
+            <summary>
+            Initializes an instance of the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> struct.
+            </summary>
+            <param name="buffer">The original <see cref="T:System.String"/> used as buffer.</param>
+            <param name="offset">The offset of the segment within the <paramref name="buffer"/>.</param>
+            <param name="length">The length of the segment.</param>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.StringSegment.Buffer">
+            <summary>
+            Gets the <see cref="T:System.String"/> buffer for this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.StringSegment.Offset">
+            <summary>
+            Gets the offset within the buffer for this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.StringSegment.Length">
+            <summary>
+            Gets the length of this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.StringSegment.Value">
+            <summary>
+            Gets the value of this segment as a <see cref="T:System.String"/>.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.StringSegment.HasValue">
+            <summary>
+            Gets whether or not this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> contains a valid value.
+            </summary>
+        </member>
+        <member name="P:Microsoft.Extensions.Primitives.StringSegment.Item(System.Int32)">
+            <summary>
+            Gets the <see cref="T:System.Char"/> at a specified position in the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <param name="index">The offset into the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/></param>
+            <returns>The <see cref="T:System.Char"/> at a specified position.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.AsSpan">
+            <summary>
+            Gets a <see cref="T:System.ReadOnlySpan`1"/> from the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <returns>The <see cref="T:System.ReadOnlySpan`1"/> from this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.AsMemory">
+            <summary>
+            Gets a <see cref="T:System.ReadOnlyMemory`1"/> from the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <returns>The <see cref="T:System.ReadOnlyMemory`1"/> from this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Equals(System.Object)">
+            <inheritdoc />
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Equals(Microsoft.Extensions.Primitives.StringSegment)">
+            <summary>
+            Indicates whether the current object is equal to another object of the same type.
+            </summary>
+            <param name="other">An object to compare with this object.</param>
+            <returns><code>true</code> if the current object is equal to the other parameter; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Equals(Microsoft.Extensions.Primitives.StringSegment,System.StringComparison)">
+            <summary>
+            Indicates whether the current object is equal to another object of the same type.
+            </summary>
+            <param name="other">An object to compare with this object.</param>
+            <param name="comparisonType">One of the enumeration values that specifies the rules to use in the comparison.</param>
+            <returns><code>true</code> if the current object is equal to the other parameter; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Equals(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment,System.StringComparison)">
+            <summary>
+            Determines whether two specified StringSegment objects have the same value. A parameter specifies the culture, case, and
+            sort rules used in the comparison.
+            </summary>
+            <param name="a">The first StringSegment to compare.</param>
+            <param name="b">The second StringSegment to compare.</param>
+            <param name="comparisonType">One of the enumeration values that specifies the rules for the comparison.</param>
+            <returns><code>true</code> if the objects are equal; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Equals(System.String)">
+            <summary>
+            Checks if the specified <see cref="T:System.String"/> is equal to the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <param name="text">The <see cref="T:System.String"/> to compare with the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</param>
+            <returns><code>true</code> if the specified <see cref="T:System.String"/> is equal to the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Equals(System.String,System.StringComparison)">
+            <summary>
+            Checks if the specified <see cref="T:System.String"/> is equal to the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <param name="text">The <see cref="T:System.String"/> to compare with the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</param>
+            <param name="comparisonType">One of the enumeration values that specifies the rules to use in the comparison.</param>
+            <returns><code>true</code> if the specified <see cref="T:System.String"/> is equal to the current <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.GetHashCode">
+            <inheritdoc />
+            <remarks>
+            This GetHashCode is expensive since it allocates on every call.
+            However this is required to ensure we retain any behavior (such as hash code randomization) that
+            string.GetHashCode has.
+            </remarks>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.op_Equality(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment)">
+            <summary>
+            Checks if two specified <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> have the same value.
+            </summary>
+            <param name="left">The first <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to compare, or <code>null</code>.</param>
+            <param name="right">The second <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to compare, or <code>null</code>.</param>
+            <returns><code>true</code> if the value of <paramref name="left"/> is the same as the value of <paramref name="right"/>; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.op_Inequality(Microsoft.Extensions.Primitives.StringSegment,Microsoft.Extensions.Primitives.StringSegment)">
+            <summary>
+            Checks if two specified <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> have different values.
+            </summary>
+            <param name="left">The first <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to compare, or <code>null</code>.</param>
+            <param name="right">The second <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to compare, or <code>null</code>.</param>
+            <returns><code>true</code> if the value of <paramref name="left"/> is different from the value of <paramref name="right"/>; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.op_Implicit(System.String)~Microsoft.Extensions.Primitives.StringSegment">
+            <summary>
+            Creates a new <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> from the given <see cref="T:System.String"/>.
+            </summary>
+            <param name="value">The <see cref="T:System.String"/> to convert to a <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/></param>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.op_Implicit(Microsoft.Extensions.Primitives.StringSegment)~System.ReadOnlySpan{System.Char}">
+            <summary>
+            Creates a see <see cref="T:System.ReadOnlySpan`1"/> from the given <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <param name="segment">The <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to convert to a <see cref="T:System.ReadOnlySpan`1"/>.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.op_Implicit(Microsoft.Extensions.Primitives.StringSegment)~System.ReadOnlyMemory{System.Char}">
+            <summary>
+            Creates a see <see cref="T:System.ReadOnlyMemory`1"/> from the given <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <param name="segment">The <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> to convert to a <see cref="T:System.ReadOnlyMemory`1"/>.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.StartsWith(System.String,System.StringComparison)">
+            <summary>
+            Checks if the beginning of this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> matches the specified <see cref="T:System.String"/> when compared using the specified <paramref name="comparisonType"/>.
+            </summary>
+            <param name="text">The <see cref="T:System.String"/>to compare.</param>
+            <param name="comparisonType">One of the enumeration values that specifies the rules to use in the comparison.</param>
+            <returns><code>true</code> if <paramref name="text"/> matches the beginning of this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.EndsWith(System.String,System.StringComparison)">
+            <summary>
+            Checks if the end of this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> matches the specified <see cref="T:System.String"/> when compared using the specified <paramref name="comparisonType"/>.
+            </summary>
+            <param name="text">The <see cref="T:System.String"/>to compare.</param>
+            <param name="comparisonType">One of the enumeration values that specifies the rules to use in the comparison.</param>
+            <returns><code>true</code> if <paramref name="text"/> matches the end of this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>; otherwise, <code>false</code>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Substring(System.Int32)">
+            <summary>
+            Retrieves a substring from this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            The substring starts at the position specified by <paramref name="offset"/> and has the remaining length.
+            </summary>
+            <param name="offset">The zero-based starting character position of a substring in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</param>
+            <returns>A <see cref="T:System.String"/> that is equivalent to the substring of remaining length that begins at
+            <paramref name="offset"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Substring(System.Int32,System.Int32)">
+            <summary>
+            Retrieves a substring from this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            The substring starts at the position specified by <paramref name="offset"/> and has the specified <paramref name="length"/>.
+            </summary>
+            <param name="offset">The zero-based starting character position of a substring in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</param>
+            <param name="length">The number of characters in the substring.</param>
+            <returns>A <see cref="T:System.String"/> that is equivalent to the substring of length <paramref name="length"/> that begins at
+            <paramref name="offset"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Subsegment(System.Int32)">
+            <summary>
+            Retrieves a <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> that represents a substring from this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            The <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> starts at the position specified by <paramref name="offset"/>.
+            </summary>
+            <param name="offset">The zero-based starting character position of a substring in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> that begins at <paramref name="offset"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>
+            whose length is the remainder.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Subsegment(System.Int32,System.Int32)">
+            <summary>
+            Retrieves a <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> that represents a substring from this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            The <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> starts at the position specified by <paramref name="offset"/> and has the specified <paramref name="length"/>.
+            </summary>
+            <param name="offset">The zero-based starting character position of a substring in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</param>
+            <param name="length">The number of characters in the substring.</param>
+            <returns>A <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> that is equivalent to the substring of length <paramref name="length"/> that begins at <paramref name="offset"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IndexOf(System.Char,System.Int32,System.Int32)">
+            <summary>
+            Gets the zero-based index of the first occurrence of the character <paramref name="c"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            The search starts at <paramref name="start"/> and examines a specified number of <paramref name="count"/> character positions.
+            </summary>
+            <param name="c">The Unicode character to seek.</param>
+            <param name="start">The zero-based index position at which the search starts. </param>
+            <param name="count">The number of characters to examine.</param>
+            <returns>The zero-based index position of <paramref name="c"/> from the beginning of the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> if that character is found, or -1 if it is not.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IndexOf(System.Char,System.Int32)">
+            <summary>
+            Gets the zero-based index of the first occurrence of the character <paramref name="c"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            The search starts at <paramref name="start"/>.
+            </summary>
+            <param name="c">The Unicode character to seek.</param>
+            <param name="start">The zero-based index position at which the search starts. </param>
+            <returns>The zero-based index position of <paramref name="c"/> from the beginning of the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> if that character is found, or -1 if it is not.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IndexOf(System.Char)">
+            <summary>
+            Gets the zero-based index of the first occurrence of the character <paramref name="c"/> in this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.
+            </summary>
+            <param name="c">The Unicode character to seek.</param>
+            <returns>The zero-based index position of <paramref name="c"/> from the beginning of the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> if that character is found, or -1 if it is not.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IndexOfAny(System.Char[],System.Int32,System.Int32)">
+            <summary>
+            Reports the zero-based index of the first occurrence in this instance of any character in a specified array
+            of Unicode characters. The search starts at a specified character position and examines a specified number
+            of character positions.
+            </summary>
+            <param name="anyOf">A Unicode character array containing one or more characters to seek.</param>
+            <param name="startIndex">The search starting position.</param>
+            <param name="count">The number of character positions to examine.</param>
+            <returns>The zero-based index position of the first occurrence in this instance where any character in anyOf
+            was found; -1 if no character in anyOf was found.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IndexOfAny(System.Char[],System.Int32)">
+            <summary>
+            Reports the zero-based index of the first occurrence in this instance of any character in a specified array
+            of Unicode characters. The search starts at a specified character position.
+            </summary>
+            <param name="anyOf">A Unicode character array containing one or more characters to seek.</param>
+            <param name="startIndex">The search starting position.</param>
+            <returns>The zero-based index position of the first occurrence in this instance where any character in anyOf
+            was found; -1 if no character in anyOf was found.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IndexOfAny(System.Char[])">
+            <summary>
+            Reports the zero-based index of the first occurrence in this instance of any character in a specified array
+            of Unicode characters.
+            </summary>
+            <param name="anyOf">A Unicode character array containing one or more characters to seek.</param>
+            <returns>The zero-based index position of the first occurrence in this instance where any character in anyOf
+            was found; -1 if no character in anyOf was found.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.LastIndexOf(System.Char)">
+            <summary>
+            Reports the zero-based index position of the last occurrence of a specified Unicode character within this instance.
+            </summary>
+            <param name="value">The Unicode character to seek.</param>
+            <returns>The zero-based index position of value if that character is found, or -1 if it is not.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Trim">
+            <summary>
+            Removes all leading and trailing whitespaces.
+            </summary>
+            <returns>The trimmed <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.TrimStart">
+            <summary>
+            Removes all leading whitespaces.
+            </summary>
+            <returns>The trimmed <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.TrimEnd">
+            <summary>
+            Removes all trailing whitespaces.
+            </summary>
+            <returns>The trimmed <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.Split(System.Char[])">
+            <summary>
+            Splits a string into StringSegments that are based on the characters in an array.
+            </summary>
+            <param name="chars">A character array that delimits the substrings in this string, an empty array that
+            contains no delimiters, or null.</param>
+            <returns>An <see cref="T:Microsoft.Extensions.Primitives.StringTokenizer"/> whose elements contain the StringSegmeents from this instance
+            that are delimited by one or more characters in separator.</returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.IsNullOrEmpty(Microsoft.Extensions.Primitives.StringSegment)">
+            <summary>
+            Indicates whether the specified StringSegment is null or an Empty string.
+            </summary>
+            <param name="value">The StringSegment to test.</param>
+            <returns></returns>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringSegment.ToString">
+            <summary>
+            Returns the <see cref="T:System.String"/> represented by this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> or <code>String.Empty</code> if the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> does not contain a value.
+            </summary>
+            <returns>The <see cref="T:System.String"/> represented by this <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> or <code>String.Empty</code> if the <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/> does not contain a value.</returns>
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.StringTokenizer">
+            <summary>
+            Tokenizes a <c>string</c> into <see cref="T:Microsoft.Extensions.Primitives.StringSegment"/>s.
+            </summary>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringTokenizer.#ctor(System.String,System.Char[])">
+            <summary>
+            Initializes a new instance of <see cref="T:Microsoft.Extensions.Primitives.StringTokenizer"/>.
+            </summary>
+            <param name="value">The <c>string</c> to tokenize.</param>
+            <param name="separators">The characters to tokenize by.</param>
+        </member>
+        <member name="M:Microsoft.Extensions.Primitives.StringTokenizer.#ctor(Microsoft.Extensions.Primitives.StringSegment,System.Char[])">
+            <summary>
+            Initializes a new instance of <see cref="T:Microsoft.Extensions.Primitives.StringTokenizer"/>.
+            </summary>
+            <param name="value">The <c>StringSegment</c> to tokenize.</param>
+            <param name="separators">The characters to tokenize by.</param>
+        </member>
+        <member name="T:Microsoft.Extensions.Primitives.StringValues">
+            <summary>
+            Represents zero/null, one, or many strings in an efficient way.
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/Newtonsoft.Json.dll


Diff do ficheiro suprimidas por serem muito extensas
+ 10887 - 0
parkspace_manager/sdk/dotNetty/Newtonsoft.Json.xml


BIN
parkspace_manager/sdk/dotNetty/System.Collections.Immutable.dll


Diff do ficheiro suprimidas por serem muito extensas
+ 4908 - 0
parkspace_manager/sdk/dotNetty/System.Collections.Immutable.xml


BIN
parkspace_manager/sdk/dotNetty/System.Runtime.CompilerServices.Unsafe.dll


+ 200 - 0
parkspace_manager/sdk/dotNetty/System.Runtime.CompilerServices.Unsafe.xml

@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8"?><doc>
+  <assembly>
+    <name>System.Runtime.CompilerServices.Unsafe</name>
+  </assembly>
+  <members>
+    <member name="T:System.Runtime.CompilerServices.Unsafe">
+      <summary>Contains generic, low-level functionality for manipulating pointers.</summary>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.Int32)">
+      <summary>Adds an element offset to the given reference.</summary>
+      <param name="source">The reference to add the offset to.</param>
+      <param name="elementOffset">The offset to add.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>A new reference that reflects the addition of offset to pointer.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.IntPtr)">
+      <summary>Adds an element offset to the given reference.</summary>
+      <param name="source">The reference to add the offset to.</param>
+      <param name="elementOffset">The offset to add.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>A new reference that reflects the addition of offset to pointer.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.IntPtr)">
+      <summary>Adds a byte offset to the given reference.</summary>
+      <param name="source">The reference to add the offset to.</param>
+      <param name="byteOffset">The offset to add.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>A new reference that reflects the addition of byte offset to pointer.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.AreSame``1(``0@,``0@)">
+      <summary>Determines whether the specified references point to the same location.</summary>
+      <param name="left">The first reference to compare.</param>
+      <param name="right">The second reference to compare.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>true if <paramref name="left">left</paramref> and <paramref name="right">right</paramref> point to the same location; otherwise, false.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.As``1(System.Object)">
+      <summary>Casts the given object to the specified type.</summary>
+      <param name="o">The object to cast.</param>
+      <typeparam name="T">The type which the object will be cast to.</typeparam>
+      <returns>The original object, casted to the given type.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.As``2(``0@)">
+      <summary>Reinterprets the given reference as a reference to a value of type <typeparamref name="TTo">TTo</typeparamref>.</summary>
+      <param name="source">The reference to reinterpret.</param>
+      <typeparam name="TFrom">The type of reference to reinterpret..</typeparam>
+      <typeparam name="TTo">The desired type of the reference.</typeparam>
+      <returns>A reference to a value of type <typeparamref name="TTo">TTo</typeparamref>.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.AsPointer``1(``0@)">
+      <summary>Returns a pointer to the given by-ref parameter.</summary>
+      <param name="value">The object whose pointer is obtained.</param>
+      <typeparam name="T">The type of object.</typeparam>
+      <returns>A pointer to the given value.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(System.Void*)">
+      <summary>Reinterprets the given location as a reference to a value of type <typeparamref name="T">T</typeparamref>.</summary>
+      <param name="source">The location of the value to reference.</param>
+      <typeparam name="T">The type of the interpreted location.</typeparam>
+      <returns>A reference to a value of type <typeparamref name="T">T</typeparamref>.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.ByteOffset``1(``0@,``0@)">
+      <summary>Determines the byte offset from origin to target from the given references.</summary>
+      <param name="origin">The reference to origin.</param>
+      <param name="target">The reference to target.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>Byte offset from origin to target i.e. <paramref name="target">target</paramref> - <paramref name="origin">origin</paramref>.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(System.Void*,``0@)">
+      <summary>Copies a value of type <typeparamref name="T">T</typeparamref> to the given location.</summary>
+      <param name="destination">The location to copy to.</param>
+      <param name="source">A reference to the value to copy.</param>
+      <typeparam name="T">The type of value to copy.</typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(``0@,System.Void*)">
+      <summary>Copies a value of type <typeparamref name="T">T</typeparamref> to the given location.</summary>
+      <param name="destination">The location to copy to.</param>
+      <param name="source">A pointer to the value to copy.</param>
+      <typeparam name="T">The type of value to copy.</typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte@,System.Byte@,System.UInt32)">
+      <summary>Copies bytes from the source address to the destination address.</summary>
+      <param name="destination">The destination address to copy to.</param>
+      <param name="source">The source address to copy from.</param>
+      <param name="byteCount">The number of bytes to copy.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32)">
+      <summary>Copies bytes from the source address to the destination address.</summary>
+      <param name="destination">The destination address to copy to.</param>
+      <param name="source">The source address to copy from.</param>
+      <param name="byteCount">The number of bytes to copy.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32)">
+      <summary>Copies bytes from the source address to the destination address 
+without assuming architecture dependent alignment of the addresses.</summary>
+      <param name="destination">The destination address to copy to.</param>
+      <param name="source">The source address to copy from.</param>
+      <param name="byteCount">The number of bytes to copy.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte@,System.Byte@,System.UInt32)">
+      <summary>Copies bytes from the source address to the destination address 
+without assuming architecture dependent alignment of the addresses.</summary>
+      <param name="destination">The destination address to copy to.</param>
+      <param name="source">The source address to copy from.</param>
+      <param name="byteCount">The number of bytes to copy.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte@,System.Byte,System.UInt32)">
+      <summary>Initializes a block of memory at the given location with a given initial value.</summary>
+      <param name="startAddress">The address of the start of the memory block to initialize.</param>
+      <param name="value">The value to initialize the block to.</param>
+      <param name="byteCount">The number of bytes to initialize.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32)">
+      <summary>Initializes a block of memory at the given location with a given initial value.</summary>
+      <param name="startAddress">The address of the start of the memory block to initialize.</param>
+      <param name="value">The value to initialize the block to.</param>
+      <param name="byteCount">The number of bytes to initialize.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte@,System.Byte,System.UInt32)">
+      <summary>Initializes a block of memory at the given location with a given initial value 
+without assuming architecture dependent alignment of the address.</summary>
+      <param name="startAddress">The address of the start of the memory block to initialize.</param>
+      <param name="value">The value to initialize the block to.</param>
+      <param name="byteCount">The number of bytes to initialize.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32)">
+      <summary>Initializes a block of memory at the given location with a given initial value 
+without assuming architecture dependent alignment of the address.</summary>
+      <param name="startAddress">The address of the start of the memory block to initialize.</param>
+      <param name="value">The value to initialize the block to.</param>
+      <param name="byteCount">The number of bytes to initialize.</param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Read``1(System.Void*)">
+      <summary>Reads a value of type <typeparamref name="T">T</typeparamref> from the given location.</summary>
+      <param name="source">The location to read from.</param>
+      <typeparam name="T">The type to read.</typeparam>
+      <returns>An object of type <typeparamref name="T">T</typeparamref> read from the given location.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Byte@)">
+      <summary>Reads a value of type <typeparamref name="T">T</typeparamref> from the given location
+without assuming architecture dependent alignment of the addresses.</summary>
+      <param name="source">The location to read from.</param>
+      <typeparam name="T">The type to read.</typeparam>
+      <returns>An object of type <typeparamref name="T">T</typeparamref> read from the given location.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Void*)">
+      <summary>Reads a value of type <typeparamref name="T">T</typeparamref> from the given location
+without assuming architecture dependent alignment of the addresses.</summary>
+      <param name="source">The location to read from.</param>
+      <typeparam name="T">The type to read.</typeparam>
+      <returns>An object of type <typeparamref name="T">T</typeparamref> read from the given location.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.SizeOf``1">
+      <summary>Returns the size of an object of the given type parameter.</summary>
+      <typeparam name="T">The type of object whose size is retrieved.</typeparam>
+      <returns>The size of an object of type <typeparamref name="T">T</typeparamref>.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.Int32)">
+      <summary>Subtracts an element offset from the given reference.</summary>
+      <param name="source">The reference to subtract the offset from.</param>
+      <param name="elementOffset">The offset to subtract.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>A new reference that reflects the subraction of offset from pointer.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.IntPtr)">
+      <summary>Subtracts an element offset from the given reference.</summary>
+      <param name="source">The reference to subtract the offset from.</param>
+      <param name="elementOffset">The offset to subtract.</param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>A new reference that reflects the subraction of offset from pointer.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.IntPtr)">
+      <summary>Subtracts a byte offset from the given reference.</summary>
+      <param name="source">The reference to subtract the offset from.</param>
+      <param name="byteOffset"></param>
+      <typeparam name="T">The type of reference.</typeparam>
+      <returns>A new reference that reflects the subraction of byte offset from pointer.</returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.Write``1(System.Void*,``0)">
+      <summary>Writes a value of type <typeparamref name="T">T</typeparamref> to the given location.</summary>
+      <param name="destination">The location to write to.</param>
+      <param name="value">The value to write.</param>
+      <typeparam name="T">The type of value to write.</typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Byte@,``0)">
+      <summary>Writes a value of type <typeparamref name="T">T</typeparamref> to the given location
+without assuming architecture dependent alignment of the addresses.</summary>
+      <param name="destination">The location to write to.</param>
+      <param name="value">The value to write.</param>
+      <typeparam name="T">The type of value to write.</typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Void*,``0)">
+      <summary>Writes a value of type <typeparamref name="T">T</typeparamref> to the given location
+without assuming architecture dependent alignment of the addresses.</summary>
+      <param name="destination">The location to write to.</param>
+      <param name="value">The value to write.</param>
+      <typeparam name="T">The type of value to write.</typeparam>
+    </member>
+  </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/System.Runtime.InteropServices.RuntimeInformation.dll


BIN
parkspace_manager/sdk/dotNetty/System.Threading.Tasks.Extensions.dll


+ 166 - 0
parkspace_manager/sdk/dotNetty/System.Threading.Tasks.Extensions.xml

@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="utf-8"?><doc>
+  <assembly>
+    <name>System.Threading.Tasks.Extensions</name>
+  </assembly>
+  <members>
+    <member name="T:System.Runtime.CompilerServices.ValueTaskAwaiter`1">
+      <typeparam name="TResult"></typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult">
+      <returns></returns>
+    </member>
+    <member name="P:System.Runtime.CompilerServices.ValueTaskAwaiter`1.IsCompleted">
+      <returns></returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ValueTaskAwaiter`1.OnCompleted(System.Action)">
+      <param name="continuation"></param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ValueTaskAwaiter`1.UnsafeOnCompleted(System.Action)">
+      <param name="continuation"></param>
+    </member>
+    <member name="T:System.Threading.Tasks.ValueTask`1">
+      <summary>Provides a value type that wraps a <see cref="Task{TResult}"></see> and a <typeparamref name="TResult">TResult</typeparamref>, only one of which is used.</summary>
+      <typeparam name="TResult">The result.</typeparam>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.#ctor(System.Threading.Tasks.Task{`0})">
+      <summary>Initializes a new instance of the <see cref="ValueTask{TResult}"></see> class using the supplied task that represents the operation.</summary>
+      <param name="task">The task.</param>
+      <exception cref="T:System.ArgumentNullException">The <paramref name="task">task</paramref> argument is null.</exception>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.#ctor(`0)">
+      <summary>Initializes a new instance of the <see cref="ValueTask{TResult}"></see> class using the supplied result of a successful operation.</summary>
+      <param name="result">The result.</param>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.AsTask">
+      <summary>Retrieves a <see cref="Task{TResult}"></see> object that represents this <see cref="ValueTask{TResult}"></see>.</summary>
+      <returns>The <see cref="Task{TResult}"></see> object that is wrapped in this <see cref="ValueTask{TResult}"></see> if one exists, or a new <see cref="Task{TResult}"></see> object that represents the result.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.ConfigureAwait(System.Boolean)">
+      <summary>Configures an awaiter for this value.</summary>
+      <param name="continueOnCapturedContext">true to attempt to marshal the continuation back to the captured context; otherwise, false.</param>
+      <returns>The configured awaiter.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.CreateAsyncMethodBuilder">
+      <summary>Creates a method builder for use with an async method.</summary>
+      <returns>The created builder.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.Equals(System.Object)">
+      <summary>Determines whether the specified object is equal to the current object.</summary>
+      <param name="obj">The object to compare with the current object.</param>
+      <returns>true if the specified object is equal to the current object; otherwise, false.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.Equals(System.Threading.Tasks.ValueTask{`0})">
+      <summary>Determines whether the specified <see cref="ValueTask{TResult}"></see> object is equal to the current <see cref="ValueTask{TResult}"></see> object.</summary>
+      <param name="other">The object to compare with the current object.</param>
+      <returns>true if the specified object is equal to the current object; otherwise, false.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.GetAwaiter">
+      <summary>Creates an awaiter for this value.</summary>
+      <returns>The awaiter.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.GetHashCode">
+      <summary>Returns the hash code for this instance.</summary>
+      <returns>The hash code for the current object.</returns>
+    </member>
+    <member name="P:System.Threading.Tasks.ValueTask`1.IsCanceled">
+      <summary>Gets a value that indicates whether this object represents a canceled operation.</summary>
+      <returns>true if this object represents a canceled operation; otherwise, false.</returns>
+    </member>
+    <member name="P:System.Threading.Tasks.ValueTask`1.IsCompleted">
+      <summary>Gets a value that indicates whether this object represents a completed operation.</summary>
+      <returns>true if this object represents a completed operation; otherwise, false.</returns>
+    </member>
+    <member name="P:System.Threading.Tasks.ValueTask`1.IsCompletedSuccessfully">
+      <summary>Gets a value that indicates whether this object represents a successfully completed operation.</summary>
+      <returns>true if this object represents a successfully completed operation; otherwise, false.</returns>
+    </member>
+    <member name="P:System.Threading.Tasks.ValueTask`1.IsFaulted">
+      <summary>Gets a value that indicates whether this object represents a failed operation.</summary>
+      <returns>true if this object represents a failed operation; otherwise, false.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.op_Equality(System.Threading.Tasks.ValueTask{`0},System.Threading.Tasks.ValueTask{`0})">
+      <summary>Compares two values for equality.</summary>
+      <param name="left">The first value to compare.</param>
+      <param name="right">The second value to compare.</param>
+      <returns>true if the two <see cref="ValueTask{TResult}"></see> values are equal; otherwise, false.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.op_Inequality(System.Threading.Tasks.ValueTask{`0},System.Threading.Tasks.ValueTask{`0})">
+      <summary>Determines whether two <see cref="ValueTask{TResult}"></see> values are unequal.</summary>
+      <param name="left">The first value to compare.</param>
+      <param name="right">The seconed value to compare.</param>
+      <returns>true if the two <see cref="ValueTask{TResult}"></see> values are not equal; otherwise, false.</returns>
+    </member>
+    <member name="P:System.Threading.Tasks.ValueTask`1.Result">
+      <summary>Gets the result.</summary>
+      <returns>The result.</returns>
+    </member>
+    <member name="M:System.Threading.Tasks.ValueTask`1.ToString">
+      <summary>Returns a string that represents the current object.</summary>
+      <returns>A string that represents the current object.</returns>
+    </member>
+    <member name="T:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute">
+      
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.#ctor(System.Type)">
+      <param name="builderType"></param>
+    </member>
+    <member name="P:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.BuilderType">
+      <returns></returns>
+    </member>
+    <member name="T:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1">
+      <typeparam name="TResult"></typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.AwaitOnCompleted``2(``0@,``1@)">
+      <param name="awaiter"></param>
+      <param name="stateMachine"></param>
+      <typeparam name="TAwaiter"></typeparam>
+      <typeparam name="TStateMachine"></typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.AwaitUnsafeOnCompleted``2(``0@,``1@)">
+      <param name="awaiter"></param>
+      <param name="stateMachine"></param>
+      <typeparam name="TAwaiter"></typeparam>
+      <typeparam name="TStateMachine"></typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Create">
+      <returns></returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.SetException(System.Exception)">
+      <param name="exception"></param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.SetResult(`0)">
+      <param name="result"></param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
+      <param name="stateMachine"></param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Start``1(``0@)">
+      <param name="stateMachine"></param>
+      <typeparam name="TStateMachine"></typeparam>
+    </member>
+    <member name="P:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Task">
+      <returns></returns>
+    </member>
+    <member name="T:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter">
+      <typeparam name="TResult"></typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult">
+      <returns></returns>
+    </member>
+    <member name="P:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.IsCompleted">
+      <returns></returns>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.OnCompleted(System.Action)">
+      <param name="continuation"></param>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.UnsafeOnCompleted(System.Action)">
+      <param name="continuation"></param>
+    </member>
+    <member name="T:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1">
+      <typeparam name="TResult"></typeparam>
+    </member>
+    <member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.GetAwaiter">
+      <returns></returns>
+    </member>
+  </members>
+</doc>

BIN
parkspace_manager/sdk/dotNetty/netstandard.dll


BIN
parkspace_manager/sdk/dotNetty/nettyCommunication.dll


BIN
parkspace_manager/sdk/mysql/MySql.Data.dll


BIN
parkspace_manager/sdk/mysql/db.dll


+ 2 - 0
parkspace_manager/sdk/proto_compile.bat

@@ -0,0 +1,2 @@
+protoc.exe --proto_path=..\message --csharp_out=..\message message_base.proto
+protoc.exe --proto_path=..\message --csharp_out=..\message parkspace_allocation_message.proto

BIN
parkspace_manager/x64/libnanomsg.so


BIN
parkspace_manager/x64/nanomsg.dll


BIN
parkspace_manager/x86/libnanomsg.so


BIN
parkspace_manager/x86/nanomsg.dll