From 1f645778ae80a3a8801b8bb4d0fcf8feb244ad43 Mon Sep 17 00:00:00 2001
From: chr <chr@mailcom>
Date: 星期三, 09 十月 2024 11:51:23 +0800
Subject: [PATCH] 完善项目,新增插件启用检测;

---
 SolidWorksListenerAlert/Properties/Resources.Designer.cs       |   71 
 PluginLisener/PluginLisener.Designer.cs                        |   38 
 SolidWorksListener/App.xaml                                    |    9 
 PluginLisener/Properties/AssemblyInfo.cs                       |   36 
 PdmSwPlugin.PropertySetting/CommonSettingControl.xaml          |    1 
 PluginListener/App.config                                      |    9 
 SolidWorksListenerAlert/MainWindow.xaml                        |   18 
 CustomRictBox/SB .xaml                                         |   19 
 SolidWorksListenerAlert/Properties/Settings.Designer.cs        |   30 
 PluginLisener/.vs/PluginLisener.csproj.dtbcache.json           |    1 
 PluginLisener/ProjectInstaller.resx                            |  129 
 PdmSwPlugin.Main/MainControl.xaml                              |   22 
 SolidWorksListener/log4net.config                              |   37 
 PdmAlert/.vs/PdmAlert/v17/DocumentLayout.backup.json           |  102 
 SolidWorksListener/Properties/Settings.settings                |    7 
 PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml               |    9 
 PluginListener/Properties/AssemblyInfo.cs                      |   52 
 PdmSwPlugin.MaterialSelect/PdmSwPlugin.MaterialSelect.csproj   |    4 
 PdmSwPlugin.DrawApprove/DrawApprove.xaml                       |  240 
 PluginListener/Alert.xaml                                      |   15 
 lib/SuperSocket.SocketBase.dll                                 |    0 
 PluginListener/Properties/Settings.Designer.cs                 |   26 
 lib/SuperSocket.SocketBase.XML                                 | 5405 ++++++++++++++++++++++
 PdmSwPlugin.Main/MainControl.xaml.cs                           |  174 
 .vs/SwPlugin/v17/DocumentLayout.backup.json                    |  142 
 InnoSetupScript/PdmSwPlugin.iss                                |   86 
 PluginListener/Intercepter.cs                                  |   47 
 PluginLisener/App.config                                       |    6 
 SolidWorksListenerAlert/SolidWorksListenerAlert.csproj         |  118 
 AutoUpdater/MainWindow.xaml.cs                                 |   60 
 PdmSwPlugin.Main/PdmSwPlugin.Main.csproj                       |   27 
 SolidWorksListener/SolidWorksListener.csproj                   |  198 
 PdmSw/PdmSw.csproj                                             |   14 
 PdmAlert/.vs/PdmAlert/v17/DocumentLayout.json                  |  189 
 .vs/SwPlugin/v17/DocumentLayout.json                           |   97 
 PluginListener/log4net.config                                  |   37 
 PluginListener/Alert.xaml.cs                                   |   49 
 SolidWorksListener/Properties/Resources.Designer.cs            |   71 
 PluginListener/Properties/app.manifest                         |   73 
 SolidWorksListenerAlert/Properties/AssemblyInfo.cs             |   52 
 lib/SuperSocket.Common.XML                                     | 1346 +++++
 SolidWorksListener/packages.config                             |   19 
 PluginLisener/packages.config                                  |    4 
 PdmSwPlugin.Main/Constant/PluginConst.cs                       |    2 
 PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml.cs            |   36 
 PluginLisener/PluginLisener.csproj                             |  107 
 lib/SuperSocket.Common.dll                                     |    0 
 PdmSwPlugin.Main/SwAddIn/MainControl.cs                        |   49 
 PdmSwPlugin.PDM/PdmSwPlugin.PDM.csproj                         |    4 
 SolidWorksListenerAlert/App.xaml                               |    9 
 PdmSwPlugin.Common/Util/BinUtil.cs                             |   59 
 PdmSwPlugin.Main/LoginControl.xaml.cs                          |  206 
 lib/SuperSocket.SocketEngine.dll                               |    0 
 PdmSwPlugin.Main/Tcp/TcpReqInfo.cs                             |   34 
 PluginLisener/PluginLisener.cs                                 |   56 
 PdmSwPlugin.Main/MainTab.xaml.cs                               |   41 
 PluginListener/PluginListener.csproj                           |  245 +
 PluginListener/Program.cs                                      |   32 
 PluginListener/packages.config                                 |   23 
 lib/_log4net.xml                                               |    0 
 SolidWorksListener/Properties/AssemblyInfo.cs                  |   52 
 InnoSetupScript/InnoSetupUtil.dll                              |    0 
 PluginLisener/Program.cs                                       |   23 
 SolidWorksListener/Properties/Resources.resx                   |  117 
 PdmSwPlugin.Common/PdmSwPlugin.Common.csproj                   |    6 
 PluginListener/supersocket.sh                                  |    2 
 PdmSwPlugin.Common/Style/LinkButton.xaml                       |   24 
 SolidWorksListenerAlert/App.config                             |    6 
 PluginListener/Util.cs                                         |  184 
 SolidWorksListenerAlert/Properties/Settings.settings           |    7 
 PdmSw/SwAddin.cs                                               |    3 
 SolidWorksListenerAlert/App.xaml.cs                            |   27 
 PluginListener/Listener.cs                                     |  392 +
 PluginListener/Properties/Resources.resx                       |  117 
 SolidWorksListenerAlert/Properties/Resources.resx              |  117 
 PdmSw/log4net.config                                           |   63 
 lib/log4net.dll                                                |    0 
 PluginLisener/ProjectInstaller.Designer.cs                     |   56 
 PluginLisener/.vs/PluginLisener/v17/DocumentLayout.json        |   71 
 SolidWorksListener/Properties/Settings.Designer.cs             |   30 
 SolidWorksListenerAlert/MainWindow.xaml.cs                     |   34 
 SolidWorksListener/Listener.cs                                 |  355 +
 PdmAlert/PdmAlert.csproj                                       |    4 
 PdmSwPlugin.Main/LoginControl.xaml                             |   31 
 PluginLisener/.vs/PluginLisener/v17/DocumentLayout.backup.json |   53 
 PluginListener/.vs/PluginListener/v17/DocumentLayout.json      |   12 
 PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs       |   43 
 PdmSwPlugin.Common/Entity/DrawAudit/DrawAudit.cs               |    8 
 PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs                    |   81 
 SolidWorksListener/WindowUtil.cs                               |   46 
 CustomRictBox/SB .xaml.cs                                      |  104 
 WpfUI/Window1.xaml.cs                                          |    4 
 SolidWorksListener/App.xaml.cs                                 |   34 
 PdmSwPlugin.Common/.vs/PdmSwPlugin.Common.csproj.dtbcache.json |    2 
 PdmSwPlugin.PDM/PdmControl.xaml.cs                             |  129 
 PluginListener/WindowUtil.cs                                   |   48 
 PdmSwPlugin.Main/MainTab.xaml                                  |   27 
 PluginListener/Properties/Settings.settings                    |    7 
 lib/_log4net.dll                                               |    0 
 lib/SuperSocket.Facility.dll                                   |    0 
 lib/SuperSocket.SocketEngine.XML                               | 1291 +++++
 PluginLisener/ProjectInstaller.cs                              |   19 
 AutoUpdater/AutoUpdater.csproj                                 |    2 
 PluginListener/Properties/Resources.Designer.cs                |   63 
 WpfUI/.vs/WpfUI.csproj.dtbcache.json                           |    2 
 SolidWorksListener/App.config                                  |    6 
 PdmSwPlugin.Common/Util/Encryptor.cs                           |   69 
 CustomRictBox/PdmSwPlugin.UI.csproj                            |    7 
 lib/SuperSocket.Facility.XML                                   |  601 ++
 PluginListener/supersocket.cmd                                 |    2 
 110 files changed, 13,827 insertions(+), 546 deletions(-)

diff --git a/.vs/SwPlugin/v17/DocumentLayout.backup.json b/.vs/SwPlugin/v17/DocumentLayout.backup.json
index 5bb3917..bf181c2 100644
--- a/.vs/SwPlugin/v17/DocumentLayout.backup.json
+++ b/.vs/SwPlugin/v17/DocumentLayout.backup.json
@@ -3,16 +3,36 @@
   "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|d:\\workspace\\pdmswplugin2\\customrictbox\\customrichbox.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|solutionrelative:customrictbox\\customrichbox.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.drawapprove\\drawapprove.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawapprove.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|d:\\workspace\\pdmswplugin2\\customrictbox\\customrichbox.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
-      "RelativeMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|solutionrelative:customrictbox\\customrichbox.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.drawapprove\\drawapprove.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawapprove.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|d:\\workspace\\pdmswplugin2\\pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\eventhandler\\baseattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\eventhandler\\baseattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|d:\\workspace\\pdmswplugin2\\pdmsw\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\log4net.config||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
     }
   ],
   "DocumentGroupContainers": [
@@ -26,40 +46,104 @@
           "Children": [
             {
               "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "DrawApprove.xaml.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "ViewState": "AgIAAIcBAAAAAAAAAAAcwJYBAAANAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-09-04T04:19:25.271Z",
+              "DocumentIndex": 2,
+              "Title": "DrawApprove.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2024-10-09T03:31:27.843Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "CustomRichBox.xaml",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml",
-              "RelativeDocumentMoniker": "CustomRictBox\\CustomRichBox.xaml",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml",
-              "RelativeToolTip": "CustomRictBox\\CustomRichBox.xaml",
+              "DocumentIndex": 1,
+              "Title": "PdmControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
-              "WhenOpened": "2024-09-04T02:32:36.605Z",
+              "WhenOpened": "2024-10-09T03:30:57.686Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 0,
-              "Title": "CustomRichBox.xaml.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml.cs",
-              "RelativeDocumentMoniker": "CustomRictBox\\CustomRichBox.xaml.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml.cs",
-              "RelativeToolTip": "CustomRictBox\\CustomRichBox.xaml.cs",
-              "ViewState": "AgIAAMgBAAAAAAAAAAAuwBACAAAxAAAAAAAAAA==",
+              "Title": "DrawApprove.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
+              "ViewState": "AgIAAAYCAAAAAAAAAAAkwCICAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-09-04T02:27:06.101Z",
+              "WhenOpened": "2024-10-09T03:22:18.864Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "log4net.config",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\log4net.config",
+              "RelativeDocumentMoniker": "PdmSw\\log4net.config",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\log4net.config",
+              "RelativeToolTip": "PdmSw\\log4net.config",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA0AAAAQAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000601|",
+              "WhenOpened": "2024-09-26T10:24:04.161Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "SwAddin.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeDocumentMoniker": "PdmSw\\SwAddin.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeToolTip": "PdmSw\\SwAddin.cs",
+              "ViewState": "AgIAACIAAAAAAAAAAAA5wCkAAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-26T08:51:00.927Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "BaseAttacher.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "ViewState": "AgIAAKoAAAAAAAAAAAA0wMcAAAApAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-25T09:56:45.504Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "MainControl.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ViewState": "AgIAAIwAAAAAAAAAAAA+wOQAAABDAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-25T09:54:37.505Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "PdmControl.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ViewState": "AgIAAM0EAAAAAAAAAAAAAOEEAAAvAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-25T06:09:00.747Z",
               "EditorCaption": ""
             }
           ]
diff --git a/.vs/SwPlugin/v17/DocumentLayout.json b/.vs/SwPlugin/v17/DocumentLayout.json
index 12581a9..145e413 100644
--- a/.vs/SwPlugin/v17/DocumentLayout.json
+++ b/.vs/SwPlugin/v17/DocumentLayout.json
@@ -3,20 +3,24 @@
   "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\constant\\pluginconst.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|d:\\workspace\\pdmswplugin2\\customrictbox\\customrichbox.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|solutionrelative:customrictbox\\customrichbox.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{1033FBD8-8700-4CD0-808A-BB97DB057A6B}|PdmSwPlugin.PDM\\PdmSwPlugin.PDM.csproj|solutionrelative:pdmswplugin.pdm\\pdmcontrol.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.drawapprove\\drawapprove.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BE239D32-7253-4D19-8793-159E98545B55}|PdmSwPlugin.DrawApprove\\PdmSwPlugin.DrawApprove.csproj|solutionrelative:pdmswplugin.drawapprove\\drawapprove.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|d:\\workspace\\pdmswplugin2\\pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{7ACEDAA9-2DE8-4485-837A-E7D58812A6DC}|PdmSw\\PdmSw.csproj|solutionrelative:pdmsw\\swaddin.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|d:\\workspace\\pdmswplugin2\\customrictbox\\customrichbox.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
-      "RelativeMoniker": "D:0:0:{44BCE7B9-F984-426B-9997-FC1FB1A49CC0}|CustomRictBox\\PdmSwPlugin.UI.csproj|solutionrelative:customrictbox\\customrichbox.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\swaddin\\maincontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|d:\\workspace\\pdmswplugin2\\pdmswplugin.main\\eventhandler\\baseattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6E609A8C-583B-4607-A510-FA84218C4A31}|PdmSwPlugin.Main\\PdmSwPlugin.Main.csproj|solutionrelative:pdmswplugin.main\\eventhandler\\baseattacher.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     }
   ],
   "DocumentGroupContainers": [
@@ -26,57 +30,70 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 0,
+          "SelectedChildIndex": 4,
           "Children": [
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "PluginConst.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs",
-              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\Constant\\PluginConst.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\Constant\\PluginConst.cs",
-              "RelativeToolTip": "PdmSwPlugin.Main\\Constant\\PluginConst.cs",
-              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA==",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-09-04T04:59:17.992Z",
+              "DocumentIndex": 1,
+              "Title": "PdmControl.xaml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2024-10-09T03:30:57.686Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 2,
-              "Title": "DrawApprove.xaml.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "RelativeDocumentMoniker": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "RelativeToolTip": "PdmSwPlugin.DrawApprove\\DrawApprove.xaml.cs",
-              "ViewState": "AgIAAIcBAAAAAAAAAAAcwJYBAAANAAAAAAAAAA==",
+              "Title": "SwAddin.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeDocumentMoniker": "PdmSw\\SwAddin.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSw\\SwAddin.cs",
+              "RelativeToolTip": "PdmSw\\SwAddin.cs",
+              "ViewState": "AgIAACIAAAAAAAAAAAA5wCkAAAAvAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-09-04T04:19:25.271Z",
+              "WhenOpened": "2024-09-26T08:51:00.927Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "BaseAttacher.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\EventHandler\\BaseAttacher.cs",
+              "ViewState": "AgIAAKoAAAAAAAAAAAA0wMcAAAApAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-25T09:56:45.504Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 3,
-              "Title": "CustomRichBox.xaml",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml",
-              "RelativeDocumentMoniker": "CustomRictBox\\CustomRichBox.xaml",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml",
-              "RelativeToolTip": "CustomRictBox\\CustomRichBox.xaml",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
-              "WhenOpened": "2024-09-04T02:32:36.605Z",
+              "Title": "MainControl.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "RelativeToolTip": "PdmSwPlugin.Main\\SwAddIn\\MainControl.cs",
+              "ViewState": "AgIAAIwAAAAAAAAAAAA+wOQAAABDAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-25T09:54:37.505Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "CustomRichBox.xaml.cs",
-              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml.cs",
-              "RelativeDocumentMoniker": "CustomRictBox\\CustomRichBox.xaml.cs",
-              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\CustomRichBox.xaml.cs",
-              "RelativeToolTip": "CustomRictBox\\CustomRichBox.xaml.cs",
-              "ViewState": "AgIAAMgBAAAAAAAAAAAuwM4BAABAAAAAAAAAAA==",
+              "DocumentIndex": 0,
+              "Title": "PdmControl.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeDocumentMoniker": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "RelativeToolTip": "PdmSwPlugin.PDM\\PdmControl.xaml.cs",
+              "ViewState": "AgIAANAEAAAAAAAAAAAAAOIEAAAZAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-09-04T02:27:06.101Z",
+              "WhenOpened": "2024-09-25T06:09:00.747Z",
               "EditorCaption": ""
             }
           ]
diff --git a/AutoUpdater/AutoUpdater.csproj b/AutoUpdater/AutoUpdater.csproj
index ecd5986..bf185f3 100644
--- a/AutoUpdater/AutoUpdater.csproj
+++ b/AutoUpdater/AutoUpdater.csproj
@@ -41,7 +41,7 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
+    <OutputPath>..\PdmSw\bin\x64\Debug\AutoUpdater\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
     <PlatformTarget>x64</PlatformTarget>
diff --git a/AutoUpdater/MainWindow.xaml.cs b/AutoUpdater/MainWindow.xaml.cs
index 90225ce..76d46fa 100644
--- a/AutoUpdater/MainWindow.xaml.cs
+++ b/AutoUpdater/MainWindow.xaml.cs
@@ -7,6 +7,7 @@
 using System.Diagnostics;
 using System.IO;
 using System.Reflection;
+using System.Runtime.InteropServices;
 using System.Threading;
 using System.Windows;
 using VersionControl;
@@ -91,6 +92,58 @@
                 GetCurrentVersion();
                 // 妫�鏌ユ彃浠剁殑鏇存柊
                 CheckPluginUpdate();
+            }
+        }
+
+        public void KillProcessByFullPath(string exePath)
+        {
+            string exeName = Path.GetFileNameWithoutExtension(exePath);
+            Process[] ps = Process.GetProcessesByName(exeName);
+            if (ps.Length > 0)
+            {
+                foreach (Process p in ps)
+                {
+                    if (new Uri(p.MainModule.FileName) == new Uri(exePath))
+                    {
+                        p.Kill();
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缁堟涓や釜Listener鐩稿叧杩涚▼
+        /// </summary>
+        public void KillListenerProcess()
+        {
+            string dir = Path.GetDirectoryName(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
+            string path1 = Path.Combine(dir, "Listener", "SolidWorksListener.exe");
+            string path2 = Path.Combine(dir, "Alert.exe");
+            KillProcessByFullPath(path1);
+            // 鏆傚仠涓�绉掍笉鐒禔lertKill涓嶆帀
+            Thread.Sleep(1000);
+            KillProcessByFullPath(path2);
+        }
+
+        /// <summary>
+        /// 鍚姩Listener鐩稿叧杩涚▼
+        /// </summary>
+        public void StartListenerProcess()
+        {
+            string dir = Path.GetDirectoryName(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
+            string path1 = Path.Combine(dir, "Listener", "SolidWorksListener.exe");
+            if (File.Exists(path1))
+            {
+                ProcessStartInfo info = new ProcessStartInfo
+                {
+                    FileName = path1,
+                    WorkingDirectory = Path.GetDirectoryName(path1)
+                };
+
+                new Process
+                {
+                    StartInfo = info
+                }.Start();
             }
         }
 
@@ -235,6 +288,11 @@
             label.Content = "涓嬭浇瀹屾垚锛岃В鍘嬩腑锛岃鍕垮叧闂▼搴�...";
             // 涓存椂瑙e帇鐩綍锛岄槻姝㈣В鍘嬪嚭閿�
             InitUnZipDir();
+            // kill鎺夌洃鍚▼搴忥紝閬垮厤鏂囦欢鍗犵敤
+            KillListenerProcess();
+            // 绛夊緟涓�绉掗噴鏀緀xe鍗犵敤
+            Thread.Sleep(1000);
+
             // 鎻掍欢鏂囦欢澶� 榛樿鍦� AutoUpdater.exe 鐨勪笂绾х洰褰曚腑
             string pluginDir = new DirectoryInfo(TempDir).Parent.Parent.FullName;
             using (ZipInputStream zipIn = new ZipInputStream(File.Open(localFilePath, FileMode.Open)))
@@ -274,6 +332,8 @@
 
         private void DoFinished()
         {
+            // 鍚姩鐩戝惉杩涚▼
+            StartListenerProcess();
             label.Content = "鏇存柊瀹屾垚";
             bar.IsIndeterminate = false;
             if (SwAppPath != null)
diff --git a/CustomRictBox/PdmSwPlugin.UI.csproj b/CustomRictBox/PdmSwPlugin.UI.csproj
index fa7c74e..1115405 100644
--- a/CustomRictBox/PdmSwPlugin.UI.csproj
+++ b/CustomRictBox/PdmSwPlugin.UI.csproj
@@ -69,6 +69,9 @@
     <Reference Include="PresentationFramework" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="SB .xaml.cs">
+      <DependentUpon>SB .xaml</DependentUpon>
+    </Compile>
     <Compile Include="Sb.cs" />
     <Page Include="Resources\Icons.xaml">
       <Generator>MSBuild:Compile</Generator>
@@ -84,6 +87,10 @@
       <DependentUpon>CustomRichBox.xaml</DependentUpon>
       <SubType>Code</SubType>
     </Compile>
+    <Page Include="SB .xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Properties\AssemblyInfo.cs">
diff --git a/CustomRictBox/SB .xaml b/CustomRictBox/SB .xaml
new file mode 100644
index 0000000..e74c60e
--- /dev/null
+++ b/CustomRictBox/SB .xaml
@@ -0,0 +1,19 @@
+锘�<UserControl x:Class="PdmSwPlugin.UI.SB"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:PdmSwPlugin.UI"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800">
+    <ComboBox Text="{Binding SelectedText}" IsEditable="True" ItemsSource="{Binding Path=BookExs}">
+        <ComboBox.ItemTemplate>
+            <DataTemplate>
+                <StackPanel Orientation="Horizontal">
+                    <CheckBox IsChecked="{Binding IsChecked}" />
+                    <TextBlock Text="{Binding Book.Name}" />
+                </StackPanel>
+            </DataTemplate>
+        </ComboBox.ItemTemplate>
+    </ComboBox>
+</UserControl>
diff --git a/CustomRictBox/SB .xaml.cs b/CustomRictBox/SB .xaml.cs
new file mode 100644
index 0000000..632ec7c
--- /dev/null
+++ b/CustomRictBox/SB .xaml.cs
@@ -0,0 +1,104 @@
+锘縰sing System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Windows.Controls;
+
+namespace PdmSwPlugin.UI
+{
+    /// <summary>
+    /// SB.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class SB : UserControl, INotifyPropertyChanged
+    {
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            if (PropertyChanged != null)
+            {
+                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+            }
+        }
+
+        public SB()
+        {
+            InitializeComponent();
+        }
+
+        private string _selectedText = string.Empty;
+
+        public string SelectedText
+        {
+            get
+            {
+                return _selectedText;
+            }
+            set
+            {
+                if (_selectedText != value)
+                {
+                    _selectedText = value;
+                    RaisePropertyChanged("SelectedText");
+                }
+            }
+        }
+
+        private ObservableCollection<INotifyPropertyChanged> _dataSource;
+
+        public ObservableCollection<INotifyPropertyChanged> DataSource
+        {
+            get
+            {
+                if (_dataSource == null)
+                {
+                    _dataSource = new ObservableCollection<INotifyPropertyChanged>();
+
+                    _dataSource.CollectionChanged += (sender, e) =>
+                    {
+                        if (e.OldItems != null)
+                        {
+                            foreach (INotifyPropertyChanged bookEx in e.OldItems)
+                            {
+                                bookEx.PropertyChanged -= ItemPropertyChanged;
+                            }
+                        }
+
+                        if (e.NewItems != null)
+                        {
+                            foreach (INotifyPropertyChanged bookEx in e.NewItems)
+                            {
+                                bookEx.PropertyChanged += ItemPropertyChanged;
+                            }
+                        }
+                    };
+                }
+
+                return _dataSource;
+            }
+        }
+
+        private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            /*if (e.PropertyName == "IsChecked")
+            {
+                BookEx bookEx = sender as BookEx;
+
+                if (bookEx != null)
+                {
+                    IEnumerable<BookEx> bookExs = BookExs.Where(b => b.IsChecked == true);
+
+                    StringBuilder builder = new StringBuilder();
+
+                    foreach (BookEx item in bookExs)
+                    {
+                        builder.Append(item.Book.Name + " ");
+                    }
+
+                    SelectedText = builder == null ? string.Empty : builder.ToString();
+                }
+            }*/
+        }
+    }
+}
\ No newline at end of file
diff --git a/InnoSetupScript/InnoSetupUtil.dll b/InnoSetupScript/InnoSetupUtil.dll
new file mode 100644
index 0000000..35b9bea
--- /dev/null
+++ b/InnoSetupScript/InnoSetupUtil.dll
Binary files differ
diff --git a/InnoSetupScript/PdmSwPlugin.iss b/InnoSetupScript/PdmSwPlugin.iss
index fce3816..1f3ea2a 100644
--- a/InnoSetupScript/PdmSwPlugin.iss
+++ b/InnoSetupScript/PdmSwPlugin.iss
@@ -3,16 +3,16 @@
 ; AppName
 #define AppName = "PdmSwPlugin"
 ; 打包的应用文件夹路径
-#define AppDir = "C:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\"
+#define AppDir = "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\"
 ; 自动更新程序路径
-#define AutoUpdaterDir = "C:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\Release\AutoUpdater\"
+#define AutoUpdaterDir = "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Release\AutoUpdater\"
 ; 版本
-#define Version = "_0.0.0.40"
+#define Version = "_0.0.0.42"
 
 ; 生成的Installer存放路径
-#define OutPutDir = "Z:\Main\Workspace\Output"
+#define OutPutDir = "Z:\Output"
 #define DllName = "PdmSwPlugin.dll"
-
+#define MyAppExeName "SolidWorksListener.exe"
 
 [Setup]
 ; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
@@ -35,12 +35,14 @@
 WizardStyle=modern
 PrivilegesRequired=admin
 UsedUserAreasWarning=no
+AlwaysRestart=yes
 
 [Languages]
 Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"
 
-[Files]
+[Files] 
 Source: "{#AppDir}*"; DestDir: "{app}"; Excludes: "temp\*,Log\*"; Flags:recursesubdirs ignoreversion
+;Source: "InnoSetupUtil.dll"; DestDir: "{app}"
 ;Source: "{#AutoUpdaterDir}*"; DestDir: "{app}\AutoUpdater"; Excludes: "download\*"; Flags: ignoreversion
 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
 
@@ -49,6 +51,7 @@
 
 [Run]  
 Filename: {dotnet4064}\RegAsm.exe; Parameters: /codebase {#DllName}; WorkingDir: {app}; Flags: runhidden nowait skipifsilent;
+Filename: {app}\Listener\SolidWorksListener.exe; WorkingDir: {app}\Listener\; Flags: runhidden nowait skipifsilent;
 
 [UninstallRun]
 Filename: {dotnet4064}\RegAsm.exe; Parameters: /unregister {#DllName}; WorkingDir: {app}; RunOnceId: DelService; Flags: runhidden nowait;
@@ -68,11 +71,78 @@
 Root: HKLM64; Subkey: "SOFTWARE\SolidWorks\Addins\{{{#AppId}}"; ValueType: dword; ValueName: ""; ValueData: 0; Flags: deletevalue
 Root: HKLM64; Subkey: "SOFTWARE\SolidWorks\Addins\{{{#AppId}}"; ValueType: string; ValueName: "Description"; ValueData: "PDM插件"; Flags: deletevalue
 Root: HKLM64; Subkey: "SOFTWARE\SolidWorks\Addins\{{{#AppId}}"; ValueType: string; ValueName: "Title"; ValueData: "PdmSw"; Flags: deletevalue
+; 监听器
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; Flags: uninsdeletekey
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: string; ValueName: "DisplayName"; ValueData: "SolidWorks Listener"; Flags: deletevalue
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: string; ValueName: "ObjectName"; ValueData: "LocalSystem"; Flags: deletevalue
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: string; ValueName: "ImagePath"; ValueData: "{app}\Listener\PluginListener.exe"; Flags: deletevalue
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: dword; ValueName: "ErrorControl"; ValueData: 1; Flags: deletevalue
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: dword; ValueName: "Start"; ValueData: 2; Flags: deletevalue
+;Root: HKLM64; Subkey: "SYSTEM\CurrentControlSet\Services\SolidWorks Listener"; ValueType: dword; ValueName: "Type"; ValueData: 272; Flags: deletevalue
+
+; 监听器2.0
+Root: HKCU64; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "SolidWorksListener"; ValueData: """{app}\Listener\SolidWorksListener.exe"""; Flags: deletevalue uninsdeletevalue
+ 
 
 [Icons]
 Name: "{group}\{cm:UninstallProgram,Test}"; Filename: "{uninstallexe}"
 
 [code]
+// 自定义函数,终止服务
+function CheckSoftRun(strExeName: String): Boolean;
+// 变量定义
+var ErrorCode: Integer;
+var bRes: Boolean;
+var cmdStr: String;  // 命令
+begin
+  cmdStr := Format('/c net stop "%s"', [strExeName]);
+  if RegValueExists(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\SolidWorks Listener', 'ImagePath') then begin
+    // 终止服务
+    bRes := ShellExec('open', ExpandConstant('{cmd}'), cmdStr, '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
+    if bRes then begin
+      Result := true;
+    end else begin
+      MsgBox(ExpandConstant('{cm:checkSoftTip}'), mbCriticalError, MB_OKCANCEL);
+      Result := false;
+      Exit;
+    end;
+  end else begin
+    Result := true;
+  end;
+end;
+
+function CheckSoftRun3(): Boolean;
+var hWnd: Integer;
+var ResultCode: Integer;
+var exe1: String;
+var exe2: String;
+begin
+  // hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
+  exe1 := Format('/c powershell "Get-Process|Where-Object{$_.Path -eq \"%s\"}|Stop-Process|pause"', [ExpandConstant('{autopf}\HengXin\PdmSwPlugin\Listener\SolidWorksListener.exe')]);
+  exe1 := '/c taskkill /f /t /im SolidWorksListener.exe';
+  exe2 := '/c taskkill /f /t /im Alert.exe';
+  
+  ShellExec('open', ExpandConstant('{cmd}'), exe1, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
+  ShellExec('open', ExpandConstant('{cmd}'), exe2, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
+  Result:= true;
+end;
+
+// 开始页下一步时判断软件是否运行
+function NextButtonClick(CurPageID: Integer): Boolean;
+begin
+  if 1=CurPageID then begin
+      Result := CheckSoftRun3();
+      Exit;
+  end; 
+  Result:= true;
+end;
+
+// 卸载时关闭软件
+function InitializeUninstall(): Boolean;
+begin
+  Result := CheckSoftRun3();
+end;
+
 procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
 begin
   if CurUninstallStep = usDone then
@@ -82,3 +152,7 @@
 end;
 
 
+[CustomMessages]
+chinesesimplified.checkSoftTip=未能成功停止服务!
+
+
diff --git a/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.backup.json b/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.backup.json
new file mode 100644
index 0000000..dcbbd4a
--- /dev/null
+++ b/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.backup.json
@@ -0,0 +1,102 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|PdmAlert||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\settings\\toolsetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:settings\\toolsetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|d:\\workspace\\pdmswplugin2\\pdmalert\\||{B270807C-D8C6-49EB-8EBE-8E8D566637A1}|1e78f8db-6c07-4d61-a18f-7514010abd56"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 0,
+          "Children": [
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "PdmAlert",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\PdmAlert.csproj",
+              "RelativeDocumentMoniker": "PdmAlert.csproj",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\PdmAlert.csproj",
+              "RelativeToolTip": "PdmAlert.csproj",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
+              "WhenOpened": "2024-09-09T08:52:34.897Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "App.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\App.xaml.cs",
+              "RelativeDocumentMoniker": "App.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\App.xaml.cs",
+              "RelativeToolTip": "App.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAABAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-09T08:48:00.369Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "UpdaterSetting.xml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\UpdaterSetting.xml",
+              "RelativeDocumentMoniker": "Settings\\UpdaterSetting.xml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\UpdaterSetting.xml",
+              "RelativeToolTip": "Settings\\UpdaterSetting.xml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
+              "WhenOpened": "2024-09-09T08:47:51.476Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "ToolSetting.xml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\ToolSetting.xml",
+              "RelativeDocumentMoniker": "Settings\\ToolSetting.xml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\ToolSetting.xml",
+              "RelativeToolTip": "Settings\\ToolSetting.xml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
+              "WhenOpened": "2024-09-09T08:47:46.282Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "LoginWindow.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml.cs",
+              "RelativeDocumentMoniker": "LoginWindow.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml.cs",
+              "RelativeToolTip": "LoginWindow.xaml.cs",
+              "ViewState": "AgIAABMAAAAAAAAAAAAgwCUAAAAnAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-06T09:46:54.594Z"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.json b/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.json
index fc4749f..a4b100a 100644
--- a/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.json
+++ b/PdmAlert/.vs/PdmAlert/v17/DocumentLayout.json
@@ -1,51 +1,28 @@
 {
   "Version": 1,
-  "WorkspaceRootPath": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\",
+  "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\",
   "Documents": [
     {
       "AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|PdmAlert||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EDC73C56-D0C5-4AC9-B296-3253915EF933}|..\\..\\CommonUpdater\\VersionControl\\VersionControl.csproj|c:\\main\\workspace\\visualstudio\\commonupdater\\versioncontrol\\util.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{11C62041-5E6E-4230-A5E8-4246C033BA67}|..\\..\\CommonUpdater\\AutoUpdater\\AutoUpdater.csproj|c:\\main\\workspace\\visualstudio\\commonupdater\\autoupdater\\settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
-      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{11C62041-5E6E-4230-A5E8-4246C033BA67}|..\\..\\CommonUpdater\\AutoUpdater\\AutoUpdater.csproj|c:\\main\\workspace\\visualstudio\\commonupdater\\autoupdater\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{11C62041-5E6E-4230-A5E8-4246C033BA67}|..\\..\\CommonUpdater\\AutoUpdater\\AutoUpdater.csproj|c:\\main\\workspace\\visualstudio\\commonupdater\\autoupdater\\util.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:app.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{EDC73C56-D0C5-4AC9-B296-3253915EF933}|..\\..\\CommonUpdater\\VersionControl\\VersionControl.csproj|c:\\main\\workspace\\visualstudio\\commonupdater\\versioncontrol\\versionutil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:settings\\updatersetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\settings\\toolsetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}",
+      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:settings\\toolsetting.xml||{FA3CD31E-987B-443A-9B81-186104E8DAC1}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:loginwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
-      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\loginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
-      "RelativeMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|solutionrelative:loginwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|c:\\main\\workspace\\visualstudio\\pdmswplugin2\\pdmalert\\||{B270807C-D8C6-49EB-8EBE-8E8D566637A1}|1e78f8db-6c07-4d61-a18f-7514010abd56"
+      "AbsoluteMoniker": "D:0:0:{FC7FBDE7-D0D2-4E79-A586-501ABC73FE46}|PdmAlert.csproj|d:\\workspace\\pdmswplugin2\\pdmalert\\||{B270807C-D8C6-49EB-8EBE-8E8D566637A1}|1e78f8db-6c07-4d61-a18f-7514010abd56"
     }
   ],
   "DocumentGroupContainers": [
@@ -61,154 +38,62 @@
               "$type": "Document",
               "DocumentIndex": 0,
               "Title": "PdmAlert",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\PdmAlert.csproj",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\PdmAlert.csproj",
               "RelativeDocumentMoniker": "PdmAlert.csproj",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\PdmAlert.csproj",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\PdmAlert.csproj",
               "RelativeToolTip": "PdmAlert.csproj",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
-              "WhenOpened": "2024-08-22T13:00:12.272Z",
+              "WhenOpened": "2024-09-09T08:52:34.897Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 1,
-              "Title": "Util.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\VersionControl\\Util.cs",
-              "RelativeDocumentMoniker": "..\\..\\CommonUpdater\\VersionControl\\Util.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\VersionControl\\Util.cs",
-              "RelativeToolTip": "..\\..\\CommonUpdater\\VersionControl\\Util.cs",
-              "ViewState": "AQIAAIMBAAAAAAAAAAAgwKcBAAANAAAA",
+              "Title": "App.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\App.xaml.cs",
+              "RelativeDocumentMoniker": "App.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\App.xaml.cs",
+              "RelativeToolTip": "App.xaml.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAoAAAABAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T12:56:26.502Z",
+              "WhenOpened": "2024-09-09T08:48:00.369Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 2,
               "Title": "UpdaterSetting.xml",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\AutoUpdater\\Settings\\UpdaterSetting.xml",
-              "RelativeDocumentMoniker": "..\\..\\CommonUpdater\\AutoUpdater\\Settings\\UpdaterSetting.xml",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\AutoUpdater\\Settings\\UpdaterSetting.xml",
-              "RelativeToolTip": "..\\..\\CommonUpdater\\AutoUpdater\\Settings\\UpdaterSetting.xml",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAA8AAAARAAAA",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\UpdaterSetting.xml",
+              "RelativeDocumentMoniker": "Settings\\UpdaterSetting.xml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\UpdaterSetting.xml",
+              "RelativeToolTip": "Settings\\UpdaterSetting.xml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
-              "WhenOpened": "2024-08-22T12:57:06.965Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-09-09T08:47:51.476Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 3,
-              "Title": "UpdaterSetting.xml",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\Settings\\UpdaterSetting.xml",
-              "RelativeDocumentMoniker": "Settings\\UpdaterSetting.xml",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\Settings\\UpdaterSetting.xml",
-              "RelativeToolTip": "Settings\\UpdaterSetting.xml",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAARAAAA",
+              "Title": "ToolSetting.xml",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\ToolSetting.xml",
+              "RelativeDocumentMoniker": "Settings\\ToolSetting.xml",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\Settings\\ToolSetting.xml",
+              "RelativeToolTip": "Settings\\ToolSetting.xml",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003576|",
-              "WhenOpened": "2024-08-22T11:46:07.203Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-09-09T08:47:46.282Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 4,
-              "Title": "MainWindow.xaml.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\AutoUpdater\\MainWindow.xaml.cs",
-              "RelativeDocumentMoniker": "..\\..\\CommonUpdater\\AutoUpdater\\MainWindow.xaml.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\AutoUpdater\\MainWindow.xaml.cs",
-              "RelativeToolTip": "..\\..\\CommonUpdater\\AutoUpdater\\MainWindow.xaml.cs",
-              "ViewState": "AQIAAKsAAAAAAAAAAAD4v7sAAAA8AAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T11:42:13.882Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "LoginWindow.xaml",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml",
-              "RelativeDocumentMoniker": "LoginWindow.xaml",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml",
-              "RelativeToolTip": "LoginWindow.xaml",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
-              "WhenOpened": "2024-08-22T11:41:42.779Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
               "Title": "LoginWindow.xaml.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml.cs",
               "RelativeDocumentMoniker": "LoginWindow.xaml.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PdmAlert\\LoginWindow.xaml.cs",
               "RelativeToolTip": "LoginWindow.xaml.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAASAAAA",
+              "ViewState": "AgIAABMAAAAAAAAAAAAgwCUAAAAnAAAAAAAAAA==",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T11:38:26.763Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 5,
-              "Title": "Util.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\AutoUpdater\\Util.cs",
-              "RelativeDocumentMoniker": "..\\..\\CommonUpdater\\AutoUpdater\\Util.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\AutoUpdater\\Util.cs",
-              "RelativeToolTip": "..\\..\\CommonUpdater\\AutoUpdater\\Util.cs",
-              "ViewState": "AQIAAGoAAAAAAAAAAAAkwKAAAAAFAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T11:14:30.598Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 8,
-              "Title": "VersionUtil.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\VersionControl\\VersionUtil.cs",
-              "RelativeDocumentMoniker": "..\\..\\CommonUpdater\\VersionControl\\VersionUtil.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\CommonUpdater\\VersionControl\\VersionUtil.cs",
-              "RelativeToolTip": "..\\..\\CommonUpdater\\VersionControl\\VersionUtil.cs",
-              "ViewState": "AQIAAGwAAAAAAAAAAAAAAAgAAAAjAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T10:35:18.104Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "MainWindow.xaml.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\MainWindow.xaml.cs",
-              "RelativeDocumentMoniker": "MainWindow.xaml.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\MainWindow.xaml.cs",
-              "RelativeToolTip": "MainWindow.xaml.cs",
-              "ViewState": "AQIAAMMAAAAAAAAAAAAnwNcAAAAJAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T10:31:21.777Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "MainWindow.xaml",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\MainWindow.xaml",
-              "RelativeDocumentMoniker": "MainWindow.xaml",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\MainWindow.xaml",
-              "RelativeToolTip": "MainWindow.xaml",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
-              "WhenOpened": "2024-08-22T10:31:19.726Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 7,
-              "Title": "App.xaml.cs",
-              "DocumentMoniker": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\App.xaml.cs",
-              "RelativeDocumentMoniker": "App.xaml.cs",
-              "ToolTip": "C:\\Main\\Workspace\\VisualStudio\\PdmSwPlugin2\\PdmAlert\\App.xaml.cs",
-              "RelativeToolTip": "App.xaml.cs",
-              "ViewState": "AQIAAGwAAAAAAAAAAAAywHIAAAANAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-22T10:29:45.832Z",
-              "EditorCaption": ""
+              "WhenOpened": "2024-09-06T09:46:54.594Z"
             }
           ]
         }
diff --git a/PdmAlert/PdmAlert.csproj b/PdmAlert/PdmAlert.csproj
index 924b67b..2351bde 100644
--- a/PdmAlert/PdmAlert.csproj
+++ b/PdmAlert/PdmAlert.csproj
@@ -179,7 +179,7 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
-    <PostBuildEvent>xcopy "C:\Main\Workspace\VisualStudio\CommonUpdater\AutoUpdater\bin\x64\$(ConfigurationName)\" "$(TargetDir)AutoUpdater\" /S /Y
+    <PostBuildEvent>xcopy "D:\Workspace\CommonUpdater\AutoUpdater\bin\x64\$(ConfigurationName)\" "$(TargetDir)AutoUpdater\" /S /Y
 
 IF "$(ConfigurationName)"=="Release" GOTO PRE
 GOTO END
@@ -189,7 +189,7 @@
 GOTO END
 
 :END
-xcopy "$(TargetDir)Settings\UpdaterSetting.xml" "$(TargetDir)AutoUpdater\Settings\UpdaterSetting.xml" /Y
+echo f| xcopy "$(TargetDir)Settings\UpdaterSetting.xml" "$(TargetDir)AutoUpdater\Settings\UpdaterSetting.xml" /E /Y
 
 </PostBuildEvent>
   </PropertyGroup>
diff --git a/PdmSw/PdmSw.csproj b/PdmSw/PdmSw.csproj
index 6d1429b..8db5a2e 100644
--- a/PdmSw/PdmSw.csproj
+++ b/PdmSw/PdmSw.csproj
@@ -163,6 +163,20 @@
       <Private>True</Private>
       <EmbedInteropTypes>False</EmbedInteropTypes>
     </Reference>
+    <Reference Include="SuperSocket.Common, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\lib\SuperSocket.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Facility">
+      <HintPath>..\lib\SuperSocket.Facility.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketBase, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\lib\SuperSocket.SocketBase.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketEngine">
+      <HintPath>..\lib\SuperSocket.SocketEngine.dll</HintPath>
+    </Reference>
     <Reference Include="System">
       <Name>System</Name>
       <EmbedInteropTypes>False</EmbedInteropTypes>
diff --git a/PdmSw/SwAddin.cs b/PdmSw/SwAddin.cs
index d563d60..f9f530b 100644
--- a/PdmSw/SwAddin.cs
+++ b/PdmSw/SwAddin.cs
@@ -1,6 +1,7 @@
 using log4net;
 using log4net.Appender;
 using log4net.Config;
+using log4net.Core;
 using PdmSwPlugin.Common;
 using PdmSwPlugin.Common.Setting;
 using PdmSwPlugin.Main;
@@ -33,7 +34,6 @@
     {
         static SwAddin()
         {
-
             // AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
             // AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += CurrentDomain_AssemblyResolve;
             /// 设置log4net配置
@@ -329,6 +329,7 @@
         {
             RemoveCommandMgr();
             RemovePMP();
+            mainControl.StopTcpServer();
             attacher.DetachEventHandlers();
             attacher = null;
 
diff --git a/PdmSw/log4net.config b/PdmSw/log4net.config
index c372f4c..516b83f 100644
--- a/PdmSw/log4net.config
+++ b/PdmSw/log4net.config
@@ -1,37 +1,38 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <log4net>
-  <!-- 鎺у埗鍙版棩蹇楅厤缃� -->
-  <appender name="Console" type="log4net.Appender.ConsoleAppender">
-    <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
-    <layout type="log4net.Layout.PatternLayout">
-      <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
-    </layout>
-  </appender>
+	<!-- 鎺у埗鍙版棩蹇楅厤缃� -->
+	<appender name="Console" type="log4net.Appender.ConsoleAppender">
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
+		</layout>
+	</appender>
 
-  <!-- 鏂囦欢瀛樺偍鏃ュ織閰嶇疆 -->
-  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
-    <!-- 淇濆瓨鏂囦欢鐨勫悕绉� -->
-    <file value="${SwPluginPath}/Log/" />
-    <appendToFile value="true" />
-    <rollingStyle value="Date" />
-    <datePattern value="'log_'yyyyMMdd'.log'"/>
-    <staticLogFileName value="false"/>
+	<!-- 鏂囦欢瀛樺偍鏃ュ織閰嶇疆 -->
+	<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
+		<!-- 淇濆瓨鏂囦欢鐨勫悕绉� -->
+		<file value="./Log/" />
+		<appendToFile value="true" />
+		<rollingStyle value="Date" />
+		<datePattern value="'log_'yyyyMMdd'.log'"/>
+		<staticLogFileName value="false"/>
+		<!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->
 
-    <!-- 鏂囦欢鐨勭紪鐮佹柟寮� -->
-    <param name="Encoding" value="UTF-8"/>
-    <!-- 姣忎釜鏂囦欢鐨勫ぇ灏� -->
-    <maximumFileSize value="100KB" />
-    <!-- 淇濆瓨鏂囦欢鏁伴噺 -->
-    <maxSizeRollBackups value="2" />
-    <!-- 鏃ュ織杈撳嚭鏍煎紡 -->
-    <layout type="log4net.Layout.PatternLayout">
-      <conversionPattern value="%date{ISO8601} [%logger]  %level  %class - %message%newline" />
-    </layout>
-  </appender>
+		<!-- 鏂囦欢鐨勭紪鐮佹柟寮� -->
+		<param name="Encoding" value="UTF-8"/>
+		<!-- 姣忎釜鏂囦欢鐨勫ぇ灏� -->
+		<maximumFileSize value="100KB" />
+		<!-- 淇濆瓨鏂囦欢鏁伴噺 -->
+		<maxSizeRollBackups value="2" />
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%date{ISO8601} [%logger] [%thread] %level %class - %message%newline" />
+		</layout>
+	</appender>
 
-  <root>
-    <level value="INFO" />
-    <appender-ref ref="Console" />
-    <appender-ref ref="RollingFile" />
-  </root>
+	<root>
+		<level value="INFO" />
+		<appender-ref ref="Console" />
+		<appender-ref ref="RollingFile" />
+	</root>
 </log4net>
\ No newline at end of file
diff --git a/PdmSwPlugin.Common/.vs/PdmSwPlugin.Common.csproj.dtbcache.json b/PdmSwPlugin.Common/.vs/PdmSwPlugin.Common.csproj.dtbcache.json
index ca25088..4d31cfe 100644
--- a/PdmSwPlugin.Common/.vs/PdmSwPlugin.Common.csproj.dtbcache.json
+++ b/PdmSwPlugin.Common/.vs/PdmSwPlugin.Common.csproj.dtbcache.json
@@ -1 +1 @@
-{"RootPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common","ProjectFileName":"PdmSwPlugin.Common.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Attribute\\PdmSwPlugin.cs"},{"SourceFile":"BomIniter\\NameUtil.cs"},{"SourceFile":"BomIniter\\YwtBomIniter.cs"},{"SourceFile":"ClassLoader.cs"},{"SourceFile":"Constants\\PriceCheckName.cs"},{"SourceFile":"Constants\\PropertyName.cs"},{"SourceFile":"Constants\\Settings.cs"},{"SourceFile":"Control\\RichHisWindow.xaml.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeDataGrid.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeGrid.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeItemContentControl.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeItemData.cs"},{"SourceFile":"Entity\\BusinessType.cs"},{"SourceFile":"Entity\\DrawAudit\\DrawAudit.cs"},{"SourceFile":"Entity\\DrawAudit\\DrawAuditHis.cs"},{"SourceFile":"Entity\\DrawAudit\\DrawAuditOrder.cs"},{"SourceFile":"Entity\\NoteAndPos.cs"},{"SourceFile":"Entity\\NotifyBase.cs"},{"SourceFile":"Entity\\Page.cs"},{"SourceFile":"Entity\\PartSpec.cs"},{"SourceFile":"Entity\\PdmPart.cs"},{"SourceFile":"BomIniter\\BomIniter.cs"},{"SourceFile":"BomIniter\\BomIniterHolder.cs"},{"SourceFile":"BomIniter\\LHJBomIniter.cs"},{"SourceFile":"Interface\\IContectSelectionChangeHandler.cs"},{"SourceFile":"Interface\\IContextHandler.cs"},{"SourceFile":"Setting\\PluginSetting.cs"},{"SourceFile":"Entity\\Pdm\\PdmBom.cs"},{"SourceFile":"Entity\\PluginInfo.cs"},{"SourceFile":"Entity\\PropertyInfo_2D.cs"},{"SourceFile":"Entity\\SldComponentInfo_DM.cs"},{"SourceFile":"Entity\\System\\PdmUser.cs"},{"SourceFile":"Event\\Events.cs"},{"SourceFile":"Exception\\PdmException.cs"},{"SourceFile":"Interface\\Base\\ActiveDocChangeHandlerBase.cs"},{"SourceFile":"Interface\\IActiveDocChangeHandler.cs"},{"SourceFile":"Interface\\ISwAppSetter.cs"},{"SourceFile":"properties\\AssemblyInfo.cs"},{"SourceFile":"Setting\\CustomerSetting.cs"},{"SourceFile":"Setting\\YwtUserSetting.cs"},{"SourceFile":"Util\\DictionaryUtil.cs"},{"SourceFile":"Util\\LimitedConcurrencyLevelTaskScheduler.cs"},{"SourceFile":"Util\\NumberUtil.cs"},{"SourceFile":"Util\\OpenDocContext.cs"},{"SourceFile":"Util\\Pdm\\ComponentAndTask.cs"},{"SourceFile":"Util\\Pdm\\BomTreeReader.cs"},{"SourceFile":"Util\\Permission\\PermissionUtil.cs"},{"SourceFile":"Util\\SwDMUtil.cs"},{"SourceFile":"Util\\UI\\MaskAdorner.cs"},{"SourceFile":"Util\\Common\\BeanUtil.cs"},{"SourceFile":"Util\\Common\\MsgBoxHelper.cs"},{"SourceFile":"Util\\CustomPropertyUtil.cs"},{"SourceFile":"Util\\DMSldFileExtentionChecker.cs"},{"SourceFile":"Util\\CustomerPropertiesWrapper.cs"},{"SourceFile":"Util\\Common\\DocUtil.cs"},{"SourceFile":"Util\\EngineeringDrawingFile.cs"},{"SourceFile":"Util\\EngineeringDrawingPropertiesClass.cs"},{"SourceFile":"Util\\FileExtentionChecker.cs"},{"SourceFile":"Util\\Common\\FileUtil.cs"},{"SourceFile":"Util\\GetDocumentPropertiesViaDM.cs"},{"SourceFile":"Util\\Http\\GlobalExceptionHandler.cs"},{"SourceFile":"Util\\Http\\HttpClientCreator.cs"},{"SourceFile":"Util\\Http\\HttpUtil.cs"},{"SourceFile":"Util\\Http\\Result.cs"},{"SourceFile":"Util\\Common\\JsonUtil.cs"},{"SourceFile":"Util\\Common\\MD5Util.cs"},{"SourceFile":"Util\\Pdm\\ModelUtil.cs"},{"SourceFile":"Util\\UI\\MultiExWindow.xaml.cs"},{"SourceFile":"Util\\WindowIntPtrUtil.cs"},{"SourceFile":"Util\\Xml\\XmlUtil.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\obj\\Debug\\Util\\UI\\MultiExWindow.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\obj\\Debug\\GeneratedInternalTypeHelper.g.cs"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\IIS\\Microsoft Web Deploy V3\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\bin\\Debug\\PdmSwPlugin.UI.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\bin\\Debug\\PdmSwPlugin.UI.dll"},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.sldworks.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swconst.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swdocumentmgr.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Configuration.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\bin\\Debug\\PdmSwPlugin.Common.dll","OutputItemRelativePath":"PdmSwPlugin.Common.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
+{"RootPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common","ProjectFileName":"PdmSwPlugin.Common.csproj","Configuration":"Debug|x64","FrameworkPath":"","Sources":[{"SourceFile":"Attribute\\PdmSwPlugin.cs"},{"SourceFile":"BomIniter\\NameUtil.cs"},{"SourceFile":"BomIniter\\YwtBomIniter.cs"},{"SourceFile":"ClassLoader.cs"},{"SourceFile":"Constants\\PriceCheckName.cs"},{"SourceFile":"Constants\\PropertyName.cs"},{"SourceFile":"Constants\\Settings.cs"},{"SourceFile":"Control\\RichHisWindow.xaml.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeDataGrid.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeGrid.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeItemContentControl.cs"},{"SourceFile":"Control\\TreeGrid\\Controls\\TreeItemData.cs"},{"SourceFile":"Entity\\BusinessType.cs"},{"SourceFile":"Entity\\DrawAudit\\DrawAudit.cs"},{"SourceFile":"Entity\\DrawAudit\\DrawAuditHis.cs"},{"SourceFile":"Entity\\DrawAudit\\DrawAuditOrder.cs"},{"SourceFile":"Entity\\NoteAndPos.cs"},{"SourceFile":"Entity\\NotifyBase.cs"},{"SourceFile":"Entity\\Page.cs"},{"SourceFile":"Entity\\PartSpec.cs"},{"SourceFile":"Entity\\PdmPart.cs"},{"SourceFile":"BomIniter\\BomIniter.cs"},{"SourceFile":"BomIniter\\BomIniterHolder.cs"},{"SourceFile":"BomIniter\\LHJBomIniter.cs"},{"SourceFile":"Interface\\IContectSelectionChangeHandler.cs"},{"SourceFile":"Interface\\IContextHandler.cs"},{"SourceFile":"Setting\\PluginSetting.cs"},{"SourceFile":"Entity\\Pdm\\PdmBom.cs"},{"SourceFile":"Entity\\PluginInfo.cs"},{"SourceFile":"Entity\\PropertyInfo_2D.cs"},{"SourceFile":"Entity\\SldComponentInfo_DM.cs"},{"SourceFile":"Entity\\System\\PdmUser.cs"},{"SourceFile":"Event\\Events.cs"},{"SourceFile":"Exception\\PdmException.cs"},{"SourceFile":"Interface\\Base\\ActiveDocChangeHandlerBase.cs"},{"SourceFile":"Interface\\IActiveDocChangeHandler.cs"},{"SourceFile":"Interface\\ISwAppSetter.cs"},{"SourceFile":"properties\\AssemblyInfo.cs"},{"SourceFile":"Setting\\CustomerSetting.cs"},{"SourceFile":"Setting\\YwtUserSetting.cs"},{"SourceFile":"Util\\BinUtil.cs"},{"SourceFile":"Util\\DictionaryUtil.cs"},{"SourceFile":"Util\\Encryptor.cs"},{"SourceFile":"Util\\LimitedConcurrencyLevelTaskScheduler.cs"},{"SourceFile":"Util\\NumberUtil.cs"},{"SourceFile":"Util\\OpenDocContext.cs"},{"SourceFile":"Util\\Pdm\\ComponentAndTask.cs"},{"SourceFile":"Util\\Pdm\\BomTreeReader.cs"},{"SourceFile":"Util\\Permission\\PermissionUtil.cs"},{"SourceFile":"Util\\SwDMUtil.cs"},{"SourceFile":"Util\\UI\\MaskAdorner.cs"},{"SourceFile":"Util\\Common\\BeanUtil.cs"},{"SourceFile":"Util\\Common\\MsgBoxHelper.cs"},{"SourceFile":"Util\\CustomPropertyUtil.cs"},{"SourceFile":"Util\\DMSldFileExtentionChecker.cs"},{"SourceFile":"Util\\CustomerPropertiesWrapper.cs"},{"SourceFile":"Util\\Common\\DocUtil.cs"},{"SourceFile":"Util\\EngineeringDrawingFile.cs"},{"SourceFile":"Util\\EngineeringDrawingPropertiesClass.cs"},{"SourceFile":"Util\\FileExtentionChecker.cs"},{"SourceFile":"Util\\Common\\FileUtil.cs"},{"SourceFile":"Util\\GetDocumentPropertiesViaDM.cs"},{"SourceFile":"Util\\Http\\GlobalExceptionHandler.cs"},{"SourceFile":"Util\\Http\\HttpClientCreator.cs"},{"SourceFile":"Util\\Http\\HttpUtil.cs"},{"SourceFile":"Util\\Http\\Result.cs"},{"SourceFile":"Util\\Common\\JsonUtil.cs"},{"SourceFile":"Util\\Common\\MD5Util.cs"},{"SourceFile":"Util\\Pdm\\ModelUtil.cs"},{"SourceFile":"Util\\UI\\MultiExWindow.xaml.cs"},{"SourceFile":"Util\\WindowIntPtrUtil.cs"},{"SourceFile":"Util\\Xml\\XmlUtil.cs"},{"SourceFile":"obj\\x64\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\obj\\x64\\Debug\\Control\\RichHisWindow.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\obj\\x64\\Debug\\Util\\UI\\MultiExWindow.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\obj\\x64\\Debug\\GeneratedInternalTypeHelper.g.cs"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\bin\\x64\\Debug\\PdmSwPlugin.UI.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"D:\\Workspace\\PdmSwPlugin2\\CustomRictBox\\bin\\x64\\Debug\\PdmSwPlugin.UI.dll"},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.sldworks.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swconst.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swdocumentmgr.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Configuration.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\bin\\x64\\Debug\\PdmSwPlugin.Common.dll","OutputItemRelativePath":"PdmSwPlugin.Common.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/PdmSwPlugin.Common/Entity/DrawAudit/DrawAudit.cs b/PdmSwPlugin.Common/Entity/DrawAudit/DrawAudit.cs
index 50ec173..7d21d4a 100644
--- a/PdmSwPlugin.Common/Entity/DrawAudit/DrawAudit.cs
+++ b/PdmSwPlugin.Common/Entity/DrawAudit/DrawAudit.cs
@@ -45,6 +45,14 @@
             set { _status = value; }
         }
 
+        private string _statusArr;
+
+        public string statusArr
+        {
+            get { return _statusArr; }
+            set { _statusArr = value; }
+        }
+
         public string d3Md5 { get; set; }
         public string d3RelativePath { get; set; }
         public string d2Md5 { get; set; }
diff --git a/PdmSwPlugin.Common/PdmSwPlugin.Common.csproj b/PdmSwPlugin.Common/PdmSwPlugin.Common.csproj
index f7ea2e9..1552084 100644
--- a/PdmSwPlugin.Common/PdmSwPlugin.Common.csproj
+++ b/PdmSwPlugin.Common/PdmSwPlugin.Common.csproj
@@ -101,7 +101,9 @@
     <Compile Include="properties\AssemblyInfo.cs" />
     <Compile Include="Setting\CustomerSetting.cs" />
     <Compile Include="Setting\YwtUserSetting.cs" />
+    <Compile Include="Util\BinUtil.cs" />
     <Compile Include="Util\DictionaryUtil.cs" />
+    <Compile Include="Util\Encryptor.cs" />
     <Compile Include="Util\LimitedConcurrencyLevelTaskScheduler.cs" />
     <Compile Include="Util\NumberUtil.cs" />
     <Compile Include="Util\OpenDocContext.cs" />
@@ -153,10 +155,6 @@
     </Reference>
     <Reference Include="SolidWorks.Interop.swdocumentmgr">
       <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swdocumentmgr.dll</HintPath>
-      <EmbedInteropTypes>True</EmbedInteropTypes>
-    </Reference>
-    <Reference Include="SolidWorks.Interop.swpublished">
-      <HintPath>..\..\..\..\..\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swpublished.dll</HintPath>
       <EmbedInteropTypes>True</EmbedInteropTypes>
     </Reference>
     <Reference Include="System">
diff --git a/PdmSwPlugin.Common/Style/LinkButton.xaml b/PdmSwPlugin.Common/Style/LinkButton.xaml
index 0dd1ec4..cbba990 100644
--- a/PdmSwPlugin.Common/Style/LinkButton.xaml
+++ b/PdmSwPlugin.Common/Style/LinkButton.xaml
@@ -27,4 +27,28 @@
             </Setter.Value>
         </Setter>
     </Style>
+
+    <Style x:Key="RButton" TargetType="{x:Type Button}" >
+        <Style.Resources>
+            <SolidColorBrush x:Key="TextColor">RED</SolidColorBrush>
+        </Style.Resources>
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="{x:Type ButtonBase}">
+                    <ContentPresenter x:Name="buttonContent" TextBlock.FontSize="{TemplateBinding FontSize}" 
+                    TextBlock.FontFamily="{StaticResource iconfont}" 
+                    TextBlock.Foreground="{StaticResource TextColor}" 
+                    Margin="0,0,5,0"
+                    VerticalAlignment="Center" 
+                    HorizontalAlignment="Center"
+                    Content="{TemplateBinding Content}"/>
+                    <ControlTemplate.Triggers>
+                        <Trigger Property="IsMouseOver" Value="True">
+                            <Setter TargetName="buttonContent" Property="TextBlock.Foreground" Value="Purple"/>
+                        </Trigger>
+                    </ControlTemplate.Triggers>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
 </ResourceDictionary>
\ No newline at end of file
diff --git a/PdmSwPlugin.Common/Util/BinUtil.cs b/PdmSwPlugin.Common/Util/BinUtil.cs
new file mode 100644
index 0000000..63383dd
--- /dev/null
+++ b/PdmSwPlugin.Common/Util/BinUtil.cs
@@ -0,0 +1,59 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PdmSwPlugin.Common.Util
+{
+    public class BinUtil
+    {
+        /// <summary>
+        /// 鎶婃槑鏂囧瘑鐮佸姞瀵嗗悗浠ヤ簩杩涘埗瀛樺叆bin鏂囦欢涓�
+        /// TODO 浣跨敤鏈哄櫒鐮佸姞瀵�
+        /// </summary>
+        /// <param name="content">瀛楃鍐呭</param>
+        /// <param name="filePath">瀛樻斁璺緞</param>
+        public static void SaveStrToBin(string content, string filePath = null)
+        {
+            if (string.IsNullOrEmpty(filePath))
+            {
+                filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().FullName), "bin");
+            }
+            byte[] bytes = Convert.FromBase64String(content);
+            using (Stream stream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
+            using (BinaryWriter writer = new BinaryWriter(stream))
+            {
+                writer.Write(bytes);
+            }
+        }
+
+        /// <summary>
+        /// 浠巄in涓姞杞藉瓧绗︿覆
+        /// </summary>
+        /// <param name="content">瀛楃涓插唴瀹�</param>
+        /// <param name="filePath">bin鏂囦欢璺緞</param>
+        /// <returns>璇诲彇鏄惁鎴愬姛</returns>
+        public static bool LoadStrFromBin(ref string content, string filePath = null)
+        {
+            if (string.IsNullOrEmpty(filePath))
+            {
+                filePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().FullName), "bin");
+            }
+            if (!File.Exists(filePath))
+            {
+                return false;
+            }
+            using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+            using (BinaryReader reader = new BinaryReader(stream))
+            {
+                byte[] bytes = new byte[stream.Length];
+                reader.Read(bytes, 0, bytes.Length);
+                content = Convert.ToBase64String(bytes);
+                return true;
+            }
+        }
+    }
+}
diff --git a/PdmSwPlugin.Common/Util/Encryptor.cs b/PdmSwPlugin.Common/Util/Encryptor.cs
new file mode 100644
index 0000000..6cd2ae6
--- /dev/null
+++ b/PdmSwPlugin.Common/Util/Encryptor.cs
@@ -0,0 +1,69 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PdmSwPlugin.Common.Util
+{
+    /// <summary>
+    /// 瀛楃鍔犺В瀵�
+    /// </summary>
+    public class Encryptor
+    {
+        private readonly byte[] key;
+        private readonly byte[] iv;
+
+        public Encryptor(string keyString, string ivString)
+        {
+            key = Encoding.UTF8.GetBytes(keyString);
+            iv = Encoding.UTF8.GetBytes(ivString);
+        }
+
+        public string Encrypt(string plainText)
+        {
+            using (var aes = Aes.Create())
+            {
+                aes.Key = key;
+                aes.IV = iv;
+                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
+
+                using (MemoryStream msEncrypt = new MemoryStream())
+                {
+                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
+                    {
+                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
+                        {
+                            swEncrypt.Write(plainText);
+                        }
+                        return Convert.ToBase64String(msEncrypt.ToArray());
+                    }
+                }
+            }
+        }
+
+
+        public string Decrypt(string cipherText)
+        {
+            using (var aes = Aes.Create())
+            {
+                aes.Key = key;
+                aes.IV = iv;
+                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
+                byte[] arr = Convert.FromBase64String(cipherText);
+                using (MemoryStream msDecrypt = new MemoryStream(arr))
+                {
+                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
+                    {
+                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
+                        {
+                            return srDecrypt.ReadToEnd();
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/PdmSwPlugin.DrawApprove/DrawApprove.xaml b/PdmSwPlugin.DrawApprove/DrawApprove.xaml
index ded5c69..a33fedc 100644
--- a/PdmSwPlugin.DrawApprove/DrawApprove.xaml
+++ b/PdmSwPlugin.DrawApprove/DrawApprove.xaml
@@ -99,125 +99,163 @@
         </ResourceDictionary>
     </UserControl.Resources>
     <AdornerDecorator>
-        <Grid x:Name="sb">
-            <DockPanel x:Name="content" LastChildFill="True">
+        <Grid x:Name="content">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"/>
+                <RowDefinition Height="30"/>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="20"/>
+            </Grid.RowDefinitions>
+            
+            <ToolBarTray Grid.Row="0" DockPanel.Dock="Top" Background="#FFF" ToolBarTray.IsLocked="True" >
+                <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30" Background="#FFF">
+                    <Button ToolTip="鍒锋柊" Content="&#xe631;鍒锋柊" FontFamily="{StaticResource iconfont}" FontSize="16"
+     Click="Button_Click"/>
+                </ToolBar>
+            </ToolBarTray>
 
-                <ToolBarTray DockPanel.Dock="Top" Background="#FFF" ToolBarTray.IsLocked="True" >
-                    <ToolBar Style="{StaticResource CommonToolBar}" ToolBar.OverflowMode="Never" Band="1" BandIndex="1" Height="30" Background="#FFF">
-                        <Button ToolTip="鍒锋柊" Content="&#xe631;鍒锋柊" FontFamily="{StaticResource iconfont}" FontSize="16"
-                    Click="Button_Click"/>
-                    </ToolBar>
-                </ToolBarTray>
+            <StackPanel Grid.Row="1" Orientation="Horizontal" DockPanel.Dock="Top" VerticalAlignment="Center">
+                <Label FontSize="16">鐘舵��</Label>
+                <CheckBox FontSize="16" Margin="0,0,10,0" VerticalContentAlignment="Center" x:Name="subcb" IsChecked="True">寰呭鏍�</CheckBox>
+                <CheckBox FontSize="16" Margin="0,0,10,0" VerticalContentAlignment="Center" x:Name="resubcb" IsChecked="True">閲嶆柊瀹℃牳</CheckBox>
+                <CheckBox FontSize="16" Margin="0,0,10,0" VerticalContentAlignment="Center" x:Name="comcb">宸插畬鎴�</CheckBox>
+                <CheckBox FontSize="16" Margin="0,0,20,0" VerticalContentAlignment="Center" x:Name="rejcb">宸查┏鍥�</CheckBox>
+            </StackPanel>
 
-                <!-- 鏍戠粨鏋� -->
-                <treeData:TreeDataGrid x:Name="treeDataGrid" DockPanel.Dock="Top" 
-                                       ColumnWidth="*"
-                               ItemsSource="{Binding dataSource,Converter={StaticResource TreeItemDataConverter},ConverterParameter=children}"
-                                    AutoGenerateColumns="False"
-                                    CanUserAddRows="False"
-                                    CanUserSortColumns="False"
-                                       RowHeaderWidth="0"
-                                       FontSize="18"
-                                    CanUserDeleteRows="False">
+            <!-- 鏍戠粨鏋� -->
+            <treeData:TreeDataGrid x:Name="treeDataGrid" DockPanel.Dock="Top" Grid.Row="2"
+                        ColumnWidth="*"
+                ItemsSource="{Binding dataSource,Converter={StaticResource TreeItemDataConverter},ConverterParameter=children}"
+                     AutoGenerateColumns="False"
+                     CanUserAddRows="False"
+                     CanUserSortColumns="False"
+                        RowHeaderWidth="0"
+                        FontSize="18"
+                        FrozenColumnCount="1"
+                        HorizontalScrollBarVisibility="Auto"
+                     CanUserDeleteRows="False">
 
-                    <treeData:TreeDataGrid.Resources>
-                        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/>
-                    </treeData:TreeDataGrid.Resources>
+                <treeData:TreeDataGrid.Resources>
+                    <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/>
+                </treeData:TreeDataGrid.Resources>
 
 
-                    <treeData:TreeDataGrid.RowStyle>
-                        
-                        
-                        <Style TargetType="DataGridRow">
-                            <Style.Triggers>
-                                <DataTrigger Binding="{Binding Path=Data.IsOpening}" Value="True">
-                                    <Setter Property="Background" Value="Orange"/>
-                                </DataTrigger>
-                            </Style.Triggers>
-                        </Style>
-                    </treeData:TreeDataGrid.RowStyle>
+                <treeData:TreeDataGrid.RowStyle>
 
-                    <treeData:TreeDataGrid.CellStyle>
-                        <Style TargetType="DataGridCell" >
-                            <Style.Triggers>
-                                <MultiDataTrigger>
-                                    <MultiDataTrigger.Conditions>
-                                        <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}, Path=IsSealed}" Value="True"/>
-                                        <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=IsKeyboardFocusWithin}" Value="False"/>
-                                    </MultiDataTrigger.Conditions>
-                                    <Setter Property="Background" Value="RED"/>
-                                </MultiDataTrigger>
-                            </Style.Triggers>
-                        </Style>
-                    </treeData:TreeDataGrid.CellStyle>
 
-                    <treeData:TreeDataGrid.Columns>
-                        <DataGridTemplateColumn Width="25">
-                            <DataGridTemplateColumn.Header>
-                                <CheckBox Checked="GlobalCheckBox_Checked" Unchecked="GlobalCheckBox_Checked" />
-                            </DataGridTemplateColumn.Header>
+                    <Style TargetType="DataGridRow">
+                        <Style.Triggers>
+                            <DataTrigger Binding="{Binding Path=Data.IsOpening}" Value="True">
+                                <Setter Property="Background" Value="Orange"/>
+                            </DataTrigger>
+                        </Style.Triggers>
+                    </Style>
+                </treeData:TreeDataGrid.RowStyle>
 
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <CheckBox DataContext="{Binding Data}"
-                      IsChecked="{Binding selected}" Checked="SingleCheckBox_Event" Unchecked="SingleCheckBox_Event"/>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
+                <treeData:TreeDataGrid.CellStyle>
+                    <Style TargetType="DataGridCell" >
+                        <Style.Triggers>
+                            <MultiDataTrigger>
+                                <MultiDataTrigger.Conditions>
+                                    <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridCell}}, Path=IsSealed}" Value="True"/>
+                                    <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=IsKeyboardFocusWithin}" Value="False"/>
+                                </MultiDataTrigger.Conditions>
+                                <Setter Property="Background" Value="RED"/>
+                            </MultiDataTrigger>
+                        </Style.Triggers>
+                    </Style>
+                </treeData:TreeDataGrid.CellStyle>
 
-                        <DataGridTemplateColumn Header="鐗╂枡缂栧彿" IsReadOnly="True">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <StackPanel Orientation="Horizontal">
-                                        <TextBox IsReadOnly="True" Background="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch" Text="{Binding Data.materialCode,Mode=OneWay}"/>
-                                    </StackPanel>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
+                <treeData:TreeDataGrid.Columns>
+                    <!--<DataGridTemplateColumn Width="25">
+             <DataGridTemplateColumn.Header>
+                 <CheckBox Checked="GlobalCheckBox_Checked" Unchecked="GlobalCheckBox_Checked" />
+             </DataGridTemplateColumn.Header>
 
-                        <DataGridTextColumn Header="鐢宠浜�" Width="100" IsReadOnly="True" Binding="{Binding Data.requestUser}"/>
-                        <DataGridTextColumn Header="娴佹按鍗曞彿" Width="120" IsReadOnly="True" Binding="{Binding Data.orderCode}"/>
-                        <DataGridTextColumn Header="鍓嶄竴瀹℃牳浜�" Width="100" IsReadOnly="True" Binding="{Binding Data.auditUser}"/>
-                        <DataGridTextColumn Header="鎻愪氦鏃堕棿" Width="180" IsReadOnly="True" Binding="{Binding Data.updateTime}"/>
+             <DataGridTemplateColumn.CellTemplate>
+                 <DataTemplate>
+                     <CheckBox DataContext="{Binding Data}"
+       IsChecked="{Binding selected}" Checked="SingleCheckBox_Event" Unchecked="SingleCheckBox_Event"/>
+                 </DataTemplate>
+             </DataGridTemplateColumn.CellTemplate>
+         </DataGridTemplateColumn>-->
 
-                        <DataGridTemplateColumn Header="鐘舵��" Width="80" IsReadOnly="True">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <TextBlock Style="{StaticResource statusSlot}" DataContext="{Binding Data}"
-                                               MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
+                    <DataGridTemplateColumn Header="鐗╂枡缂栧彿" IsReadOnly="True" Width="Auto">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <TextBox IsReadOnly="True" Background="Transparent" BorderThickness="0" HorizontalContentAlignment="Stretch" Text="{Binding Data.materialCode,Mode=OneWay}"/>
+                                </StackPanel>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
 
-                        <DataGridTemplateColumn Header="鎿嶄綔" Width="280" IsReadOnly="True">
-                            <DataGridTemplateColumn.CellTemplate>
-                                <DataTemplate>
-                                    <StackPanel Orientation="Horizontal">
-                                        <Button Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="OpenDrw_Click">鎵撳紑宸ョ▼鍥�</Button>
-                                        <Button Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="OpenDoc_Click">鎵撳紑鍥剧焊</Button>
+                    <DataGridTextColumn Header="鐢宠浜�" Width="100" IsReadOnly="True" Binding="{Binding Data.requestUser}"/>
+                    <DataGridTextColumn Header="娴佹按鍗曞彿" Width="120" IsReadOnly="True" Binding="{Binding Data.orderCode}"/>
+                    <DataGridTextColumn Header="鍓嶄竴瀹℃牳浜�" Width="100" IsReadOnly="True" Binding="{Binding Data.auditUser}"/>
+                    <DataGridTextColumn Header="鎻愪氦鏃堕棿" Width="180" CanUserResize="False" IsReadOnly="True" Binding="{Binding Data.updateTime}"/>
+
+                    <DataGridTemplateColumn Header="鐘舵��" Width="80" CanUserResize="False" IsReadOnly="True">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <TextBlock Style="{StaticResource statusSlot}" DataContext="{Binding Data}"
+                                MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
+
+                    <DataGridTemplateColumn Header="鎿嶄綔" Width="280" IsReadOnly="True" CanUserResize="False">
+                        <DataGridTemplateColumn.CellTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <Button Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="OpenDrw_Click">鎵撳紑宸ョ▼鍥�</Button>
+                                    <Button Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="OpenDoc_Click">鎵撳紑鍥剧焊</Button>
+                                    <StackPanel Orientation="Horizontal" Name="groupStack">
                                         <Button Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="Resolve_Click">閫氳繃</Button>
                                         <Button Style="{StaticResource RLink}" DataContext="{Binding Data}" Margin="0" Click="Reject_Click">涓嶉�氳繃</Button>
                                     </StackPanel>
-                                </DataTemplate>
-                            </DataGridTemplateColumn.CellTemplate>
-                        </DataGridTemplateColumn>
+                                    <Button Name="resetButton" Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="Reset_Click">鎾ら攢</Button>
+                                </StackPanel>
+
+                                <DataTemplate.Triggers>
+                                    <DataTrigger Binding="{Binding Data.status}" Value="completed">
+                                        <Setter TargetName="groupStack" Property="Visibility" Value="Collapsed"/>
+                                        <Setter TargetName="resetButton" Property="Visibility" Value="Visible"/>
+                                    </DataTrigger>
+                                    <DataTrigger Binding="{Binding Data.status}" Value="rejected">
+                                        <Setter TargetName="groupStack" Property="Visibility" Value="Collapsed"/>
+                                        <Setter TargetName="resetButton" Property="Visibility" Value="Visible"/>
+                                    </DataTrigger>
+                                    <DataTrigger Binding="{Binding Data.status}" Value="submitted">
+                                        <Setter TargetName="groupStack" Property="Visibility" Value="Visible"/>
+                                        <Setter TargetName="resetButton" Property="Visibility" Value="Collapsed"/>
+                                    </DataTrigger>
+                                    <DataTrigger Binding="{Binding Data.status}" Value="resubmitted">
+                                        <Setter TargetName="groupStack" Property="Visibility" Value="Visible"/>
+                                        <Setter TargetName="resetButton" Property="Visibility" Value="Collapsed"/>
+                                    </DataTrigger>
+                                </DataTemplate.Triggers>
+                            </DataTemplate>
+                        </DataGridTemplateColumn.CellTemplate>
+                    </DataGridTemplateColumn>
 
 
-                    </treeData:TreeDataGrid.Columns>
-                </treeData:TreeDataGrid>
+                </treeData:TreeDataGrid.Columns>
+            </treeData:TreeDataGrid>
 
-                <StatusBar DockPanel.Dock="Bottom" Height="20">
-                    <StatusBarItem >
-                        <TextBox x:Name="activeDocPath" IsReadOnly="True" Style="{StaticResource StatusBarTextBox}" Text="{Binding SelectBomText}"/>
-                    </StatusBarItem>
-                    <Separator/>
-                    <StatusBarItem>
-                        <TextBox x:Name="statusBarText" IsReadOnly="True" Style="{StaticResource StatusBarTextBox}" Text="{Binding StatusBarText}"/>
-                    </StatusBarItem>
-                </StatusBar>
-                <Border></Border>
-                <!--<TextBox x:Name="console"></TextBox>-->
-            </DockPanel>
+            <StatusBar Grid.Row="3" DockPanel.Dock="Top" Height="20">
+                <StatusBarItem >
+                    <TextBox x:Name="activeDocPath" IsReadOnly="True" Style="{StaticResource StatusBarTextBox}" Text="{Binding SelectBomText}"/>
+                </StatusBarItem>
+                <Separator/>
+                <StatusBarItem>
+                    <TextBox x:Name="statusBarText" IsReadOnly="True" Style="{StaticResource StatusBarTextBox}" Text="{Binding StatusBarText}"/>
+                </StatusBarItem>
+            </StatusBar>
+            <Border></Border>
+            <!--<DockPanel x:Name="content" LastChildFill="True">
+                --><!--<TextBox x:Name="console"></TextBox>--><!--
+            </DockPanel>-->
         </Grid>
     </AdornerDecorator>
 </UserControl>
diff --git a/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs b/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs
index 5a77dfb..620746a 100644
--- a/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs
+++ b/PdmSwPlugin.DrawApprove/DrawApprove.xaml.cs
@@ -167,6 +167,7 @@
                     Dispatcher.Invoke(() =>
                     {
                         dataSource = new ObservableCollection<DrawAudit>(datas);
+
                     });
                 }
                 catch (Exception ex)
@@ -298,7 +299,23 @@
         {
             try
             {
-                Result<List<DrawAudit>> res = Client.GetSyncAction<List<DrawAudit>>("drawAudit/listWithTask");
+                string statusArr = string.Empty;
+                Dispatcher.Invoke(() =>
+                {
+                    List<string> arr = new List<string>();
+                    if (subcb.IsChecked == true) arr.Add("submitted");
+                    if (resubcb.IsChecked == true) arr.Add("resubmitted");
+                    if (comcb.IsChecked == true) arr.Add("completed");
+                    if (rejcb.IsChecked == true) arr.Add("rejected");
+                    if (arr.Count > 0)
+                    {
+                        statusArr = $"'{string.Join("','", arr)}'";
+                    }
+                });
+                Result<List<DrawAudit>> res = Client.GetSyncAction<List<DrawAudit>>("drawAudit/listWithTask2", new DrawAudit
+                {
+                    statusArr = statusArr
+                });
                 return res.HandleResult();
             }
             catch (Exception ex)
@@ -386,6 +403,49 @@
         }
 
         /// <summary>
+        /// 鍗曟潯鏁版嵁鎾ら攢鎸夐挳鐐瑰嚮浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Reset_Click(object sender, RoutedEventArgs e)
+        {
+            Button btn = sender as Button;
+            DrawAudit da = btn.DataContext as DrawAudit;
+            if (da.status == "submitted" && da.status == "resubmitted")
+            {
+                this.Warning("璇烽�夋嫨瀹℃牳杩囩殑鏁版嵁");
+                return;
+            }
+            MessageBoxResult mr = MessageBox.Show($"纭畾鎾ら攢鐗╂枡銆恵da.materialCode}銆戠殑鍥剧焊瀹℃壒鍚楋紵", "鎻愮ず", MessageBoxButton.OKCancel, MessageBoxImage.Question);
+            if (mr == MessageBoxResult.OK)
+            {
+                MaskAdorner.ShowMask(content, "璇锋眰涓紝璇风◢鍊�...");
+                Task.Run(() =>
+                {
+                    try
+                    {
+                        Result<object> res = Client.PostSyncAction<object>(da, "drawAudit/reset");
+                        object obj = res.HandleResult();
+                        // CloseAuditedDoc(da);
+                        Dispatcher.Invoke(() =>
+                        {
+                            dataSource = new ObservableCollection<DrawAudit>(RefreshList());
+                        });
+                    }
+                    catch (Exception ex)
+                    {
+                        Logger.Error($"V{PdmUser.LoginUser.pluginVersion}, Draw Reset failed.", ex);
+                        this.Error($"V{PdmUser.LoginUser.pluginVersion}锛屾挙閿�澶辫触锛亄ex.Message}");
+                    }
+                    finally
+                    {
+                        MaskAdorner.HideMask(content);
+                    }
+                });
+            }
+        }
+
+        /// <summary>
         /// 鍗曟潯鏁版嵁椹冲洖鎸夐挳鐐瑰嚮浜嬩欢
         /// </summary>
         /// <param name="sender"></param>
@@ -457,7 +517,16 @@
 
         public void OnSwActiveDocChange(ModelDoc2 oldDoc, ModelDoc2 newDoc, Component2 comp)
         {
-            var fileName = new Uri(newDoc.GetPathName());
+            string path = newDoc.GetPathName();
+            Uri fileName;
+            if (string.IsNullOrEmpty(path))
+            {
+                fileName = null;
+            }
+            else
+            {
+                fileName = new Uri(newDoc.GetPathName());
+            }
             foreach (var e in dataSource)
             {
                 var d2Path = new Uri(GetRealFilePath(e.d2RelativePath));
@@ -468,22 +537,22 @@
 
         public void OnSwActiveDocSaved(ModelDoc2 doc, Component2 comp)
         {
-            
+
         }
 
         public void OnCustomPropertyChange(string propName, string Configuration, string oldValue, string NewValue, int valueType)
         {
-            
+
         }
 
         public void OnDocDestroy(ModelDoc2 doc)
         {
-           
+
         }
 
         public void AfterDocDestroy()
         {
-            
+
         }
     }
 }
diff --git a/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml b/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml
index 2652a32..ea0ab73 100644
--- a/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml
+++ b/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml
@@ -118,7 +118,16 @@
                                 <DataTemplate>
                                     <StackPanel Orientation="Horizontal">
                                         <Button Style="{StaticResource LinkButton}" DataContext="{Binding Data}" Click="Detail_Click">瀹℃牳璇︽儏</Button>
+                                        <Button Style="{StaticResource RButton}" x:Name="backBtn" Visibility="Collapsed" DataContext="{Binding Data}" Click="Reback_Click">鎾ら攢</Button>
                                     </StackPanel>
+                                    <DataTemplate.Triggers>
+                                        <DataTrigger Binding="{Binding Data.status}" Value="submitted">
+                                            <Setter Property="Visibility" TargetName="backBtn" Value="Visible"/>
+                                        </DataTrigger>
+                                        <DataTrigger Binding="{Binding Data.status}" Value="resubmitted">
+                                            <Setter Property="Visibility" TargetName="backBtn" Value="Visible"/>
+                                        </DataTrigger>
+                                    </DataTemplate.Triggers>
                                 </DataTemplate>
                             </DataGridTemplateColumn.CellTemplate>
                         </DataGridTemplateColumn>
diff --git a/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml.cs b/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml.cs
index 63d4956..68c5d77 100644
--- a/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml.cs
+++ b/PdmSwPlugin.DrawApprove/DrawAuditHisControl.xaml.cs
@@ -263,6 +263,42 @@
             GetAuditHisDetailAndOpen(da);
         }
 
+        private void Reback_Click(object sender, RoutedEventArgs e)
+        {
+            Button btn = sender as Button;
+            DrawAudit da = btn.DataContext as DrawAudit;
+            MessageBoxResult mr = MessageBox.Show($"纭畾鎾ら攢鐗╂枡銆恵da.materialCode}銆戠殑鍥剧焊瀹℃壒鍚楋紵", "鎻愮ず", MessageBoxButton.OKCancel, MessageBoxImage.Question);
+            if (mr == MessageBoxResult.OK)
+            {
+                MaskAdorner.ShowMask(content, "璇锋眰涓紝璇风◢鍚�...");
+                Task.Run(() =>
+                {
+                    try
+                    {
+                        Result<List<DrawAuditHis>> res = Client.PostSyncAction<List<DrawAuditHis>>(new DrawAudit
+                        {
+                            id = da.id,
+                            requestUserId = PdmUser.LoginUser.id
+                        }, "drawAudit/back");
+                        res.HandleResult();
+                        Dispatcher.Invoke(() =>
+                        {
+                            dataSource = new ObservableCollection<DrawAudit>(RefreshList());
+                        });
+                    }
+                    catch (Exception ex)
+                    {
+                        Logger.Error("Reback Draw Audit Failed.", ex);
+                        this.Error($"鎾ら攢鐢宠澶辫触锛亄ex.Message}");
+                    }
+                    finally
+                    {
+                        MaskAdorner.HideMask(content);
+                    }
+                });
+            }
+        }
+
         private string GetRealFilePath(string dbPath)
         {
             string fileName = Path.GetFileName(dbPath);
diff --git a/PdmSwPlugin.Main/Constant/PluginConst.cs b/PdmSwPlugin.Main/Constant/PluginConst.cs
index 5720411..6470d7c 100644
--- a/PdmSwPlugin.Main/Constant/PluginConst.cs
+++ b/PdmSwPlugin.Main/Constant/PluginConst.cs
@@ -3,6 +3,6 @@
     public class PluginConst
     {
         public static readonly string AppId = "DF23E96F-A469-4302-8367-7FA2F798CD09";
-        public static readonly string Version = "0.0.0.41";
+        public static readonly string Version = "0.0.0.42";
     }
 }
diff --git a/PdmSwPlugin.Main/LoginControl.xaml b/PdmSwPlugin.Main/LoginControl.xaml
new file mode 100644
index 0000000..638925f
--- /dev/null
+++ b/PdmSwPlugin.Main/LoginControl.xaml
@@ -0,0 +1,31 @@
+锘�<UserControl x:Class="PdmSwPlugin.Main.LoginControl"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:PdmSwPlugin.Main"
+             mc:Ignorable="d" 
+             Loaded="UserControl_Loaded"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <AdornerDecorator>
+        <Grid Height="200" VerticalAlignment="Top" Margin="20" x:Name="mainGrid">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"/>
+                <RowDefinition Height="30"/>
+                <RowDefinition Height="30"/>
+                <RowDefinition Height="50"/>
+            </Grid.RowDefinitions>
+
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="50"/>
+                <ColumnDefinition/>
+            </Grid.ColumnDefinitions>
+            <Label Content="鐢ㄦ埛鍚�" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="0"/>
+            <TextBox x:Name="usernameTextBlock" VerticalAlignment="Stretch" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="1"/>
+            <Label Content="瀵嗙爜" VerticalContentAlignment="Center" Grid.Row="1" Grid.Column="0"/>
+            <PasswordBox x:Name="passwordTextBlock" VerticalAlignment="Stretch" VerticalContentAlignment="Center" Grid.Row="1" Grid.Column="1"/>
+            <CheckBox x:Name="rememberMeInput"  Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" VerticalContentAlignment="Center">鑷姩鐧诲綍</CheckBox>
+            <Button Margin="0,10,0,0"  Click="Button_Click" Padding="5" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2">鐧诲綍</Button>
+        </Grid>
+    </AdornerDecorator>
+</UserControl>
diff --git a/PdmSwPlugin.Main/LoginControl.xaml.cs b/PdmSwPlugin.Main/LoginControl.xaml.cs
new file mode 100644
index 0000000..4e53cd5
--- /dev/null
+++ b/PdmSwPlugin.Main/LoginControl.xaml.cs
@@ -0,0 +1,206 @@
+锘縰sing PdmSwPlugin.Commmon.Util.UI;
+using PdmSwPlugin.Common.Entity.System;
+using PdmSwPlugin.Common.Util.Http;
+using PdmSwPlugin.Common.Util;
+using System;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.IO;
+using PdmSwPlugin.Common.Interface;
+using SolidWorks.Interop.sldworks;
+using log4net;
+using PdmSwPlugin.Common.Setting;
+
+namespace PdmSwPlugin.Main
+{
+    /// <summary>
+    /// LoginControl.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class LoginControl : UserControl, ISwAppSetter
+    {
+
+        private static readonly Encryptor encryptor = new Encryptor("aB3dE5fG7hI9jjK1lMnOpQrS2tUvWxYz",
+            "8Wq9RsT4vYx6ZuB1");
+
+        private SldWorks swApp;
+        public SldWorks SwApp => swApp;
+        private ILog Logger = LogManager.GetLogger("Main");
+        private PluginSetting GlobalConfig = PluginSetting.Instance;
+        private Action successCallback;
+
+        public LoginControl(Action successCallback)
+        {
+            this.successCallback = successCallback;
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 鑷姩鐧诲綍
+        /// </summary>
+        /// <param name="callback"></param>
+        /// <param name="reject"></param>
+        private void AutoLogin(Action<PdmUser> callback, Action<Exception> reject)
+        {
+            MaskAdorner.ShowMask(mainGrid, "鐧婚檰涓�...");
+            Task.Run(() =>
+            {
+                try
+                {
+                    if (GlobalConfig.ClassicLogin)
+                    {
+                        string binPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin", "bin");
+                        if (!File.Exists(binPath))
+                        {
+                            callback(null);
+                            return;
+                        }
+                        string content = null;
+                        if (!BinUtil.LoadStrFromBin(ref content, binPath))
+                        {
+                            callback(null);
+                            return;
+                        }
+                        try
+                        {
+                            PdmUser param = JsonUtil.Deserialize<PdmUser>(encryptor.Decrypt(content));
+                            Result<PdmUser> res = HttpClientCreator.PostSyncAction<PdmUser>("openApi/wpf/login", new PdmUser
+                            {
+                                appId = PluginConst.AppId,
+                                pluginVersion = PluginConst.Version,
+                                username = param.username,
+                                password = param.password
+                            });
+                            PdmUser user = res.HandleResult();
+                            user.appId = PluginConst.AppId;
+                            user.pluginVersion = PluginConst.Version;
+                            user.password = param.password;
+                            callback(user);
+                        }
+                        catch (Exception ex)
+                        {
+                            Logger.Error("Remember Me Login Failed锛�", ex);
+                            callback(null);
+                        }
+                    }
+                    else
+                    {
+                        Result<PdmUser> res = HttpClientCreator.GetSyncAction<PdmUser>("openApi/wpf/simpleLogin", new PdmUser
+                        {
+                            username = System.Environment.UserName,
+                            appId = PluginConst.AppId,
+                            pluginVersion = PluginConst.Version
+                        });
+                        PdmUser user = res.HandleResult();
+                        user.appId = PluginConst.AppId;
+                        user.pluginVersion = PluginConst.Version;
+                        callback(user);
+                    }
+                }
+                catch (Exception e)
+                {
+                    reject(e);
+                }
+                finally
+                {
+                    MaskAdorner.HideMask(mainGrid);
+                }
+            });
+        }
+
+        private void UserControl_Loaded(object sender, RoutedEventArgs e)
+        {
+
+            AutoLogin(
+            (user) =>
+            {
+                if (user != null)
+                {
+                    Dispatcher.Invoke(() =>
+                    {
+                        PdmUser.SetLoginUser(user);
+                        if (PdmUser.HasLogin())
+                        {
+                            LoginSuccess();
+                        }
+                    });
+                }
+            },
+            (ex) =>
+            {
+                Logger.Error("鐧婚檰澶辫触锛�", ex);
+                this.Error($"鐧婚檰澶辫触! {ex.Message}");
+            });
+        }
+
+        /// <summary>
+        /// 鍔犺浇鎻掍欢涓籘ab
+        /// </summary>
+        public void LoginSuccess()
+        {
+            if (rememberMeInput.IsChecked == true)
+            {
+                // 鍕鹃�夎嚜鍔ㄧ櫥褰曠殑澶勭悊
+                string userInfo = JsonUtil.Stringfiy(PdmUser.LoginUser);
+                string binDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin");
+                if (!Directory.Exists(binDir))
+                {
+                    Directory.CreateDirectory(binDir);
+                }
+                string binPath = Path.Combine(binDir, "bin");
+                BinUtil.SaveStrToBin(encryptor.Encrypt(userInfo), binPath);
+            }
+            successCallback();
+        }
+
+        /// <summary>
+        /// 鐧婚檰鐐瑰嚮浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            MaskAdorner.ShowMask(mainGrid, "鐧婚檰涓�...");
+            PdmUser param = new PdmUser
+            {
+                username = usernameTextBlock.Text,
+                password = passwordTextBlock.Password,
+                appId = PluginConst.AppId,
+                pluginVersion = PluginConst.Version
+            };
+            Task.Run(() =>
+            {
+                try
+                {
+                    Result<PdmUser> res = HttpClientCreator.PostSyncAction<PdmUser>("openApi/wpf/login", param);
+                    PdmUser user = res.HandleResult();
+                    user.appId = PluginConst.AppId;
+                    user.pluginVersion = PluginConst.Version;
+                    user.password = param.password;
+                    Dispatcher.Invoke(() =>
+                    {
+                        PdmUser.SetLoginUser(user);
+                        if (PdmUser.HasLogin())
+                        {
+                            LoginSuccess();
+                        }
+                    });
+                }
+                catch (Exception ex)
+                {
+                    Logger.Error("鐧婚檰澶辫触锛�", ex);
+                    this.Error($"鐧婚檰澶辫触! {ex.Message}");
+                }
+                finally
+                {
+                    MaskAdorner.HideMask(mainGrid);
+                }
+            });
+        }
+
+        public void SetSwApp(SldWorks SwApp)
+        {
+            this.swApp = SwApp;
+        }
+    }
+}
diff --git a/PdmSwPlugin.Main/MainControl.xaml b/PdmSwPlugin.Main/MainControl.xaml
index 1a29880..aab11ca 100644
--- a/PdmSwPlugin.Main/MainControl.xaml
+++ b/PdmSwPlugin.Main/MainControl.xaml
@@ -12,29 +12,11 @@
         HorizontalContentAlignment="Stretch"
         VerticalContentAlignment="Stretch"
         VerticalAlignment="Stretch"
+        Unloaded="self_Unloaded"
         Loaded="MainControl_Loaded">
     <AdornerDecorator>
         <Border x:Name="mainBorder">
-            <Grid Height="200" VerticalAlignment="Top" Margin="20">
-                <Grid.RowDefinitions>
-                    <RowDefinition Height="30"/>
-                    <RowDefinition Height="30"/>
-                    <RowDefinition Height="50"/>
-                </Grid.RowDefinitions>
-
-                <Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="50"/>
-                    <ColumnDefinition/>
-                </Grid.ColumnDefinitions>
-                <Label Content="鐢ㄦ埛鍚�" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="0"/>
-                <TextBox x:Name="usernameTextBlock" VerticalAlignment="Stretch" VerticalContentAlignment="Center" Grid.Row="0" Grid.Column="1"/>
-                <Label Content="瀵嗙爜" VerticalContentAlignment="Center" Grid.Row="1" Grid.Column="0"/>
-                <PasswordBox x:Name="passwordTextBlock" VerticalAlignment="Stretch" VerticalContentAlignment="Center" Grid.Row="1" Grid.Column="1"/>
-                <Button Margin="0,10,0,0"  Click="Button_Click" Padding="5" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">鐧诲綍</Button>
-            </Grid>
-            <!--<TabControl x:Name="tab">
-      
-    </TabControl>-->
+        
         </Border>
     </AdornerDecorator>
 </UserControl>
diff --git a/PdmSwPlugin.Main/MainControl.xaml.cs b/PdmSwPlugin.Main/MainControl.xaml.cs
index 050ac1d..f2ed4ac 100644
--- a/PdmSwPlugin.Main/MainControl.xaml.cs
+++ b/PdmSwPlugin.Main/MainControl.xaml.cs
@@ -15,6 +15,9 @@
 using PdmSwPlugin.Common.Interface;
 using SolidWorks.Interop.sldworks;
 using System.Windows.Threading;
+using SuperSocket.SocketBase;
+using SuperSocket.SocketBase.Protocol;
+using PdmSwPlugin.Main.Tcp;
 
 namespace PdmSwPlugin.Main
 {
@@ -24,9 +27,42 @@
     /// </summary>
     public partial class MainControl : UserControl, ISwAppSetter
     {
+        private TcpServer tcpServer;
+        public void InitTcpServer()
+        {
+            tcpServer = new TcpServer();
+            tcpServer.NewRequestReceived += new RequestHandler<TcpSession, StringRequestInfo>(HandleRequest);
+            if (!tcpServer.Setup(5678))
+            {
+                Logger.Error("Tcp Server Setup Error.");
+            }
+            if (!tcpServer.Start())
+            {
+                Logger.Error("Tcp Server Start Error.");
+            }
+        }
 
-        #region 鎺т欢
-        #endregion
+        public void StopTcpServer()
+        {
+            tcpServer?.Stop();
+            tcpServer = null;
+        }
+
+        public void HandleRequest(TcpSession session, StringRequestInfo info)
+        {
+            byte[] msg = new byte[1];
+            if (PdmUser.LoginUser != null)
+            {
+                // 鐧诲綍杩斿洖1
+                msg[0] = 1;
+            }
+            else
+            {
+                // 娌$櫥褰曡繑鍥�0
+                msg[0] = 0;
+            }
+            session.Send(msg, 0, 1);
+        }
 
         #region 妫�鏌ユ洿鏂扮浉鍏�
         /// <summary>
@@ -149,46 +185,6 @@
         }
         #endregion
 
-
-        /// <summary>
-        /// 鑷姩鐧诲綍
-        /// </summary>
-        /// <param name="callback"></param>
-        /// <param name="reject"></param>
-        private void AutoLogin(Action<PdmUser> callback, Action<Exception> reject)
-        {
-            MaskAdorner.ShowMask(mainBorder, "鐧婚檰涓�...");
-            Task.Run(() =>
-            {
-                try
-                {
-                    if (GlobalConfig.ClassicLogin)
-                    {
-                        callback(null);
-                        return;
-                    }
-                    Result<PdmUser> res = HttpClientCreator.GetSyncAction<PdmUser>("openApi/wpf/simpleLogin", new PdmUser
-                    {
-                        username = System.Environment.UserName,
-                        appId = PluginConst.AppId,
-                        pluginVersion = PluginConst.Version
-                    });
-                    PdmUser user = res.HandleResult();
-                    user.appId = PluginConst.AppId;
-                    user.pluginVersion = PluginConst.Version;
-                    callback(user);
-                }
-                catch (Exception e)
-                {
-                    reject(e);
-                }
-                finally
-                {
-                    MaskAdorner.HideMask(mainBorder);
-                }
-            });
-        }
-
         /// <summary>
         /// 鍔犺浇鎻掍欢涓籘ab
         /// </summary>
@@ -196,15 +192,29 @@
         {
             // 鑷姩鐧诲綍鎴愬姛
             clientCreator = new HttpClientCreator();
-            tabControl = new TabControl();
-            AddPlugin();
-            mainBorder.Child = tabControl;
-            if (tabControl.Items.Count > 0)
+            if (mainTab == null)
             {
-                TabItem tabItem = tabControl.Items[0] as TabItem;
+                mainTab = new MainTab(Logout);
+                mainTab.SetSwApp(SwApp);
+            }
+            AddPlugin();
+            mainBorder.Child = mainTab;
+            if (mainTab.tabControl.Items.Count > 0)
+            {
+                TabItem tabItem = mainTab.tabControl.Items[0] as TabItem;
                 tabItem.Focus();
                 (tabItem.Content as UIElement).Focus();
             }
+        }
+
+        public void Logout()
+        {
+            string binPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "HengXin", "PdmSwPlugin", "bin");
+            File.Delete(binPath);
+            DeActiveHandler();
+            mainTab.tabControl.Items.Clear();
+            PdmUser.SetLoginUser(null);
+            mainBorder.Child = new LoginControl(LoginSuccess);
         }
 
         public void MainControl_Loaded(object sender, RoutedEventArgs e)
@@ -216,75 +226,19 @@
             // 鏈�鍚庢鏌ユ洿鏂�
             CheckUpdate();
 
-            AutoLogin(
-            (user) =>
-            {
-                if (user != null)
-                {
-                    Dispatcher.Invoke(() =>
-                    {
-                        PdmUser.SetLoginUser(user);
-                        if (PdmUser.HasLogin())
-                        {
-                            LoginSuccess();
-                        }
-                    });
-                }
-            },
-            (ex) =>
-            {
-                Logger.Error("鐧婚檰澶辫触锛�", ex);
-                this.Error($"鐧婚檰澶辫触! {ex.Message}");
-            });
+            mainBorder.Child = new LoginControl(LoginSuccess);
         }
 
-        /// <summary>
-        /// 鐧婚檰鐐瑰嚮浜嬩欢
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void Button_Click(object sender, RoutedEventArgs e)
-        {
-            MaskAdorner.ShowMask(mainBorder, "鐧婚檰涓�...");
-            PdmUser param = new PdmUser
-            {
-                username = usernameTextBlock.Text,
-                password = passwordTextBlock.Password,
-                appId = PluginConst.AppId,
-                pluginVersion = PluginConst.Version
-            };
-            Task.Run(() =>
-            {
-                try
-                {
-                    Result<PdmUser> res = HttpClientCreator.PostSyncAction<PdmUser>("openApi/wpf/login", param);
-                    PdmUser user = res.HandleResult();
-                    user.appId = PluginConst.AppId;
-                    user.pluginVersion = PluginConst.Version;
-                    Dispatcher.Invoke(() =>
-                    {
-                        PdmUser.SetLoginUser(user);
-                        if (PdmUser.HasLogin())
-                        {
-                            LoginSuccess();
-                        }
-                    });
-                }
-                catch (Exception ex)
-                {
-                    Logger.Error("鐧婚檰澶辫触锛�", ex);
-                    this.Error($"鐧婚檰澶辫触! {ex.Message}");
-                }
-                finally
-                {
-                    MaskAdorner.HideMask(mainBorder);
-                }
-            });
-        }
+
 
         public void SetSwApp(SldWorks SwApp)
         {
             this.SwApp = SwApp;
         }
+
+        private void self_Unloaded(object sender, RoutedEventArgs e)
+        {
+            StopTcpServer();
+        }
     }
 }
diff --git a/PdmSwPlugin.Main/MainTab.xaml b/PdmSwPlugin.Main/MainTab.xaml
new file mode 100644
index 0000000..df56dfe
--- /dev/null
+++ b/PdmSwPlugin.Main/MainTab.xaml
@@ -0,0 +1,27 @@
+锘�<UserControl x:Class="PdmSwPlugin.Main.MainTab"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:PdmSwPlugin.Main"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <ResourceDictionary>
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="/PdmSwPlugin.Common;component/Style/LinkButton.xaml"/>
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
+    </UserControl.Resources>
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition />
+            <RowDefinition Height="Auto"/>
+        </Grid.RowDefinitions>
+        <TabControl Grid.Row="0" x:Name="tabControl"></TabControl>
+        <StatusBar Grid.Row="1" Padding="0" Margin="0" VerticalContentAlignment="Center">
+            <Label x:Name="userLabel" FontWeight="Bold" Padding="0" Margin="0" />
+            <Button Style="{StaticResource LinkButton}" Click="Button_Click">閫�鍑虹櫥褰�</Button>
+        </StatusBar>
+    </Grid>
+</UserControl>
diff --git a/PdmSwPlugin.Main/MainTab.xaml.cs b/PdmSwPlugin.Main/MainTab.xaml.cs
new file mode 100644
index 0000000..b006421
--- /dev/null
+++ b/PdmSwPlugin.Main/MainTab.xaml.cs
@@ -0,0 +1,41 @@
+锘縰sing PdmSwPlugin.Common.Entity.System;
+using PdmSwPlugin.Common.Interface;
+using SolidWorks.Interop.sldworks;
+using System;
+using System.Windows;
+using System.Windows.Controls;
+using SolidWorks.Interop.swconst;
+
+namespace PdmSwPlugin.Main
+{
+    /// <summary>
+    /// MainTab.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class MainTab : UserControl, ISwAppSetter
+    {
+        private Action logout;
+        public MainTab(Action logout)
+        {
+            this.logout = logout;
+            InitializeComponent();
+            userLabel.Content = $"娆㈣繋鎮紝{PdmUser.LoginUser?.realname}";
+        }
+
+        private SldWorks swApp;
+        public SldWorks SwApp => swApp;
+
+        public void SetSwApp(SldWorks SwApp)
+        {
+            this.swApp = SwApp;
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            if (SwApp.SendMsgToUser2("纭畾閫�鍑虹櫥褰曞悧锛�", (int)swMessageBoxIcon_e.swMbWarning,
+                (int)swMessageBoxBtn_e.swMbYesNo) == (int)swMessageBoxResult_e.swMbHitYes)
+            {
+                logout();
+            }
+        }
+    }
+}
diff --git a/PdmSwPlugin.Main/PdmSwPlugin.Main.csproj b/PdmSwPlugin.Main/PdmSwPlugin.Main.csproj
index dafc2f8..d0c6812 100644
--- a/PdmSwPlugin.Main/PdmSwPlugin.Main.csproj
+++ b/PdmSwPlugin.Main/PdmSwPlugin.Main.csproj
@@ -71,6 +71,18 @@
       <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swconst.dll</HintPath>
       <EmbedInteropTypes>True</EmbedInteropTypes>
     </Reference>
+    <Reference Include="SuperSocket.Common">
+      <HintPath>..\lib\SuperSocket.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Facility">
+      <HintPath>..\lib\SuperSocket.Facility.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketBase">
+      <HintPath>..\lib\SuperSocket.SocketBase.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketEngine">
+      <HintPath>..\lib\SuperSocket.SocketEngine.dll</HintPath>
+    </Reference>
     <Reference Include="System">
       <Private>True</Private>
     </Reference>
@@ -96,17 +108,32 @@
     <Compile Include="EventHandler\PartDocEventHandler.cs" />
     <Compile Include="EventHandler\DocViewEventHandler.cs" />
     <Compile Include="EventHandler\IDocEventHandler.cs" />
+    <Compile Include="LoginControl.xaml.cs">
+      <DependentUpon>LoginControl.xaml</DependentUpon>
+    </Compile>
     <Compile Include="MainControl.xaml.cs">
       <DependentUpon>MainControl.xaml</DependentUpon>
     </Compile>
+    <Compile Include="MainTab.xaml.cs">
+      <DependentUpon>MainTab.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="SwAddIn\MainControl.cs" />
+    <Compile Include="Tcp\TcpReqInfo.cs" />
   </ItemGroup>
   <ItemGroup>
+    <Page Include="LoginControl.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="MainControl.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="MainTab.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
   </ItemGroup>
   <ItemGroup>
     <None Include="app.config" />
diff --git a/PdmSwPlugin.Main/SwAddIn/MainControl.cs b/PdmSwPlugin.Main/SwAddIn/MainControl.cs
index 6f60026..36758e6 100644
--- a/PdmSwPlugin.Main/SwAddIn/MainControl.cs
+++ b/PdmSwPlugin.Main/SwAddIn/MainControl.cs
@@ -51,7 +51,7 @@
 
         private HttpClientCreator clientCreator { get; set; }
 
-        private TabControl tabControl;
+        private MainTab mainTab;
 
         public MainControl(SldWorks swAddin)
         {
@@ -59,6 +59,7 @@
             GlobalConfig = PluginSetting.Instance;
             InitializeComponent();
             self.DataContext = this;
+            InitTcpServer();
         }
 
         // 鏈湴璋冭瘯鐢紝杩炴帴SolidWorks
@@ -72,7 +73,7 @@
 
         private void AddPlugin()
         {
-            tabControl.Items.Clear();
+            mainTab.tabControl.Items.Clear();
             SetPluginWithPermission();
             //LoadPlugins();
             //TestWeb testWeb = new TestWeb();
@@ -90,7 +91,7 @@
             {
                 // 鐗╂枡浼橀��
                 MaterialSelectControl ms = new MaterialSelectControl(SwApp);
-                HandlePlugin(ms, tabControl);
+                HandlePlugin(ms, mainTab.tabControl);
             }
             if (permissions.Contains("PDM:PLUGIN:CONTROL:PropertySetting"))
             {
@@ -98,31 +99,32 @@
                 if (CustomerSetting.Instance["customer"] == "YWT")
                 {
                     CommonSettingControl cs = new CommonSettingControl(SwApp);
-                    HandlePlugin(cs, tabControl);
+                    HandlePlugin(cs, mainTab.tabControl);
+                    cs.InitPropertyData();
                 }
                 else
                 {
                     PropertySettingControl ps = new PropertySettingControl(SwApp);
-                    HandlePlugin(ps, tabControl);
+                    HandlePlugin(ps, mainTab.tabControl);
                 }
             }
             if (permissions.Contains("PDM:PLUGIN:CONTROL:PDM"))
             {
                 // PDM
                 PdmControl pdm = new PdmControl(SwApp);
-                HandlePlugin(pdm, tabControl);
+                HandlePlugin(pdm, mainTab.tabControl);
             }
             if (permissions.Contains("PDM:PLUGIN:CONTROL:PriceCheck"))
             {
                 // 鍔犲伐浠舵牳浠�
                 PriceCheckControl priceCheck = new PriceCheckControl(SwApp);
-                HandlePlugin(priceCheck, tabControl);
+                HandlePlugin(priceCheck, mainTab.tabControl);
             }
             if (permissions.Contains("PDM:PLUGIN:CONTROL:DrawApprove"))
             {
                 // 鍥剧焊瀹℃牳
                 DrawApproveControl drawApprove = new DrawApproveControl(SwApp);
-                HandlePlugin(drawApprove, tabControl);
+                HandlePlugin(drawApprove, mainTab.tabControl);
                 /*UserSettingControl userSettingControl = new UserSettingControl();
                 HandlePlugin(userSettingControl, tabControl);*/
             }
@@ -130,7 +132,7 @@
             {
                 // 鍥剧焊瀹℃牳
                 DrawAuditHisControl drawAuditHisControl = new DrawAuditHisControl(SwApp);
-                HandlePlugin(drawAuditHisControl, tabControl);
+                HandlePlugin(drawAuditHisControl, mainTab.tabControl);
                 /*UserSettingControl userSettingControl = new UserSettingControl();
                 HandlePlugin(userSettingControl, tabControl);*/
             }
@@ -140,19 +142,19 @@
         {
             // 鐗╂枡浼橀��
             MaterialSelectControl ms = new MaterialSelectControl(SwApp);
-            HandlePlugin(ms, tabControl);
+            HandlePlugin(ms, mainTab.tabControl);
             // 灞炴�ц缃�
             PropertySettingControl ps = new PropertySettingControl(SwApp);
-            HandlePlugin(ps, tabControl);
+            HandlePlugin(ps, mainTab.tabControl);
             // PDM
             PdmControl pdm = new PdmControl(SwApp);
-            HandlePlugin(pdm, tabControl);
+            HandlePlugin(pdm, mainTab.tabControl);
             // 鍔犲伐浠舵牳浠�
             PriceCheckControl priceCheck = new PriceCheckControl(SwApp);
-            HandlePlugin(priceCheck, tabControl);
+            HandlePlugin(priceCheck, mainTab.tabControl);
             // 鍥剧焊瀹℃牳
             DrawApproveControl drawApprove = new DrawApproveControl(SwApp);
-            HandlePlugin(drawApprove, tabControl);
+            HandlePlugin(drawApprove, mainTab.tabControl);
         }
 
         private void LoadPlugins()
@@ -176,7 +178,7 @@
                     // p.GetInstance(type.FullName);
                     // 澶勭悊鎻掍欢
                     HandlePlugin(attr, obj);
-                    tabControl.Items.Add(new TabItem
+                    mainTab.tabControl.Items.Add(new TabItem
                     {
                         Header = attr.Title,
                         Content = obj
@@ -281,6 +283,23 @@
             AfterDocDestroy?.Invoke();
         }
 
+        public void DeActiveHandler()
+        {
+            foreach (TabItem item in mainTab.tabControl.Items)
+            {
+                // 鍚戜富Control娉ㄥ唽浜嬩欢
+                if (item.Content is IActiveDocChangeHandler handler)
+                {
+                    ActiveDocChangeEvent -= handler.OnSwActiveDocChange;
+                    ActiveDocSavedEvent -= handler.OnSwActiveDocSaved;
+                    ActiveDocCustomPropertyChange -= handler.OnCustomPropertyChange;
+                    DocDestroy -= handler.OnDocDestroy;
+                    AfterDocDestroy -= handler.AfterDocDestroy;
+                }
+            }
+            PluginInfos.Clear();
+        }
+
         /// <summary>
         /// 杩炴帴鍒癝olidWorks涔嬪悗锛屾縺娲讳腑鐨勬枃妗h嚜瀹氫箟灞炴�у彉鏇寸殑鎿嶄綔
         /// </summary>
diff --git a/PdmSwPlugin.Main/Tcp/TcpReqInfo.cs b/PdmSwPlugin.Main/Tcp/TcpReqInfo.cs
new file mode 100644
index 0000000..5dc85ec
--- /dev/null
+++ b/PdmSwPlugin.Main/Tcp/TcpReqInfo.cs
@@ -0,0 +1,34 @@
+锘縰sing SuperSocket.SocketBase;
+using SuperSocket.SocketBase.Config;
+using SuperSocket.SocketBase.Protocol;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Timers;
+
+namespace PdmSwPlugin.Main.Tcp
+{
+    public class DTReceiveFilter : ReceiveFilterBase<StringRequestInfo>
+    {
+        public override StringRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest)
+        {
+            rest = 0;
+            return new StringRequestInfo(DateTime.Now + "", "123", new string[] { "123" });
+        }
+    }
+
+    public class TcpServer : AppServer<TcpSession>
+    {
+        public TcpServer() : base(new DefaultReceiveFilterFactory<DTReceiveFilter, StringRequestInfo>())
+        {
+
+        }
+    }
+
+    public class TcpSession : AppSession<TcpSession, StringRequestInfo>
+    {
+
+    }
+}
diff --git a/PdmSwPlugin.MaterialSelect/PdmSwPlugin.MaterialSelect.csproj b/PdmSwPlugin.MaterialSelect/PdmSwPlugin.MaterialSelect.csproj
index 01e6e67..1f9e6c5 100644
--- a/PdmSwPlugin.MaterialSelect/PdmSwPlugin.MaterialSelect.csproj
+++ b/PdmSwPlugin.MaterialSelect/PdmSwPlugin.MaterialSelect.csproj
@@ -71,10 +71,6 @@
       <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swconst.dll</HintPath>
       <EmbedInteropTypes>True</EmbedInteropTypes>
     </Reference>
-    <Reference Include="SolidWorks.Interop.swpublished">
-      <HintPath>..\..\..\..\..\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swpublished.dll</HintPath>
-      <EmbedInteropTypes>True</EmbedInteropTypes>
-    </Reference>
     <Reference Include="System">
       <Private>True</Private>
     </Reference>
diff --git a/PdmSwPlugin.PDM/PdmControl.xaml.cs b/PdmSwPlugin.PDM/PdmControl.xaml.cs
index c57212f..6f5a86b 100644
--- a/PdmSwPlugin.PDM/PdmControl.xaml.cs
+++ b/PdmSwPlugin.PDM/PdmControl.xaml.cs
@@ -36,6 +36,9 @@
 using PdmSwPlugin.Commmon.Control;
 using PdmSwPlugin.Common.Entity.System;
 using System.Windows.Documents;
+using System.Windows.Input;
+using NPOI.POIFS.Properties;
+using NPOI.POIFS.Crypt;
 
 namespace PdmSwPlugin.PDM
 {
@@ -1093,6 +1096,128 @@
             return allSuccess;
         }
 
+        public void sb(dynamic[] datas) {
+            /*Dictionary<string, DrawInfo> properties = datas[0];
+            string key = datas[1];
+            KeyValuePair<string, DrawInfo> property = datas[2];
+            List<string> temp = datas[3];
+            CountdownEvent counter = datas[4];
+            try
+            {
+               
+                int iii, ref bool allSuccess
+
+                Logger.Info($"{key} checking rule...");
+                iii++;
+                Result<DrawInfo> result = Client.PostSyncAction<DrawInfo>(property.Value, "wpf/bom/openApi/checkRuleSingle");
+                DrawInfo checkResult = result.HandleResult();
+                properties[key].checkRuleResult = checkResult.checkRuleResult;
+                properties[key].errMessages = checkResult.errMessages;
+                var msgs = checkResult.errMessages;
+                if (!properties[key].HistoryData && !checkResult.checkRuleOk)
+                {
+                    allSuccess = false;
+                }
+
+                if (!properties[key].HistoryData && msgs != null && msgs.Count > 0)
+                {
+                    lock (temp)
+                    {
+                        foreach (string msg in msgs)
+                        {
+                            temp.Add($"鐗╂枡銆恵key}銆戞湭閫氳繃瑙勫垯妫�鏌ワ紒{msg}");
+                        }
+                    }
+                }
+                MaskAdorner.ShowMessage(content, $"鐗╂枡銆恵key}銆戞鏌ュ畬鎴�");
+            }
+            catch (Exception ex)
+            {
+                properties[key].checkRuleResult = 2;
+                properties[key].errMessages = new List<string> { "鍙戣捣妫�鏌ュけ璐ワ紝璇烽噸璇�" };
+                lock (temp)
+                {
+                    temp.Add($"鐗╂枡銆恵key}銆戝彂璧锋鏌ュけ璐ワ紝璇烽噸璇�");
+                }
+                allSuccess = false;
+                MaskAdorner.ShowMessage(content, $"鐗╂枡銆恵key}銆戞鏌ュ畬鎴�");
+            }
+            finally
+            {
+                counter.Signal();
+            }*/
+        }
+
+        public bool DoCheckRuleAsync(out List<string> messages)
+        {
+            var temp = new List<string>();
+            bool allSuccess = true;
+            Dictionary<string, DrawInfo> properties = GetAllProperties(temp);
+            MaskAdorner.ShowMessage(content, "姝e湪璇锋眰鏁版嵁...");
+            var factory = LimitedConcurrencyLevelTaskScheduler.Factory;
+            CountdownEvent counter = new CountdownEvent(properties.Count);
+            int iii = 1;
+            foreach (KeyValuePair<string, DrawInfo> property in properties)
+            {
+                string key = property.Key;
+                _ = ThreadPool.QueueUserWorkItem(
+                (WaitCallback)delegate
+                {
+
+                    try
+                    {
+                        Logger.Error($"{key} checking rule...");
+                        iii++;
+                        Result<DrawInfo> result = Client.PostSyncAction<DrawInfo>(property.Value, "wpf/bom/openApi/checkRuleSingle");
+                        DrawInfo checkResult = result.HandleResult();
+                        properties[key].checkRuleResult = checkResult.checkRuleResult;
+                        properties[key].errMessages = checkResult.errMessages;
+                        var msgs = checkResult.errMessages;
+                        if (!properties[key].HistoryData && !checkResult.checkRuleOk)
+                        {
+                            allSuccess = false;
+                        }
+
+                        if (!properties[key].HistoryData && msgs != null && msgs.Count > 0)
+                        {
+                            lock (temp)
+                            {
+                                foreach (string msg in msgs)
+                                {
+                                    temp.Add($"鐗╂枡銆恵key}銆戞湭閫氳繃瑙勫垯妫�鏌ワ紒{msg}");
+                                }
+                            }
+                        }
+                        MaskAdorner.ShowMessage(content, $"鐗╂枡銆恵key}銆戞鏌ュ畬鎴�");
+                    }
+                    catch (Exception ex)
+                    {
+                        properties[key].checkRuleResult = 2;
+                        properties[key].errMessages = new List<string> { "鍙戣捣妫�鏌ュけ璐ワ紝璇烽噸璇�" };
+                        lock (temp)
+                        {
+                            temp.Add($"鐗╂枡銆恵key}銆戝彂璧锋鏌ュけ璐ワ紝璇烽噸璇�");
+                        }
+                        allSuccess = false;
+                        MaskAdorner.ShowMessage(content, $"鐗╂枡銆恵key}銆戞鏌ュ畬鎴�");
+                    }
+                    finally
+                    {
+                        counter.Signal();
+                    }
+                });
+
+                /* factory.StartNew(() =>
+                 {
+
+                 });*/
+            }
+            counter.Wait();
+            counter.Dispose();
+            messages = temp;
+            return allSuccess;
+        }
+
         private void ShowExWindow(MultiExWindow exWin)
         {
             IntPtr winformWindow = Process.GetCurrentProcess().MainWindowHandle;
@@ -1688,6 +1813,10 @@
                     {
                         // 鎵ц瑙勫垯妫�鏌ュ苟鑾峰彇缁撴灉
                         RefreshBomList(SwApp.IActiveDoc2);
+                        if (model.bomTreeReader.CacheList.Count <= 0)
+                        {
+                            throw new CantCheckInException(new List<string> { "璇锋墦寮�涓�寮犲浘绾�" });
+                        }
                         DoCheckRule(out _);
                         // 绛涢�夋墍鏈夊湪鐗╂枡鏄庣粏琛ㄤ腑锛屼笉璺宠繃妫�鏌ュ苟涓旀鏌ユ湭閫氳繃鐨勶紝绫诲瀷鏄姞宸ヤ欢鐨勬湭閫氳繃瀹℃牳鐨勶紝鍔犲伐浠跺鏍搁�氳繃鐨勪絾鍥剧焊鍙樻洿鐨�
                         List<string> errs = model.bomTreeReader.CacheList.Select(b => b.NeedStopCheckIn())
diff --git a/PdmSwPlugin.PDM/PdmSwPlugin.PDM.csproj b/PdmSwPlugin.PDM/PdmSwPlugin.PDM.csproj
index 96a5126..2ab1039 100644
--- a/PdmSwPlugin.PDM/PdmSwPlugin.PDM.csproj
+++ b/PdmSwPlugin.PDM/PdmSwPlugin.PDM.csproj
@@ -104,10 +104,6 @@
     <Reference Include="SixLabors.ImageSharp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d998eea7b14cab13, processorArchitecture=MSIL">
       <HintPath>..\PdmSw\packages\SixLabors.ImageSharp.2.1.3\lib\net472\SixLabors.ImageSharp.dll</HintPath>
     </Reference>
-    <Reference Include="SolidWorks.Interop.gtswutilities">
-      <HintPath>..\..\..\..\..\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.gtswutilities.dll</HintPath>
-      <EmbedInteropTypes>True</EmbedInteropTypes>
-    </Reference>
     <Reference Include="SolidWorks.Interop.sldworks">
       <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.sldworks.dll</HintPath>
       <EmbedInteropTypes>True</EmbedInteropTypes>
diff --git a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml
index e33ee0a..3d9ebbc 100644
--- a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml
+++ b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml
@@ -3,7 +3,6 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
-             Initialized="PropertySettingControl_Initialized"
              mc:Ignorable="d" 
              d:DesignHeight="450" d:DesignWidth="800">
     <UserControl.Resources>
diff --git a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs
index 2b8cc6e..4076f04 100644
--- a/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs
+++ b/PdmSwPlugin.PropertySetting/CommonSettingControl.xaml.cs
@@ -232,7 +232,7 @@
             this.SwApp = SwApp;
         }
 
-        private void InitPropertyData()
+        public void InitPropertyData()
         {
             if (Client == null)
             {
@@ -461,24 +461,41 @@
             else if (docType == (int)swDocumentTypes_e.swDocASSEMBLY)
             {
                 ReadDocPath = ReadDoc.GetPathName();
-                // !Equals(LastReadDoc, ReadDoc)
-                properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
-                string fileType = properties.Get(NameConstant.docType);
-                /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
+                if (ReadDoc.IsOpenedViewOnly())
                 {
-                    contentKey = "jgjPart";
-                }*/
-                if (BomIniterHolder.Instance.IsJgj(ReadDoc))
+                    contentKey = "default";
+                    control = controlCache[contentKey];
+                    newOne = control as IPropertyOpt;
+                    newOne.SetProperties(null, "褰撳墠澶勪簬鍙妯″紡", true, out _);
+                }
+                else if (ReadDoc.IsOpenedReadOnly())
                 {
-                    contentKey = "jgjModule";
+                    contentKey = "default";
+                    control = controlCache[contentKey];
+                    newOne = control as IPropertyOpt;
+                    newOne.SetProperties(null, "褰撳墠澶勪簬鍙妯″紡", true, out _);
                 }
                 else
                 {
-                    contentKey = "standardModule";
+                    // !Equals(LastReadDoc, ReadDoc)
+                    properties = CustomPropertyUtil.GetCustomProperties2(ReadDoc, true, skipName);
+                    string fileType = properties.Get(NameConstant.docType);
+                    /*if (fileType == "鍔犲伐浠�" || fileType == "妯$粍")
+                    {
+                        contentKey = "jgjPart";
+                    }*/
+                    if (BomIniterHolder.Instance.IsJgj(ReadDoc))
+                    {
+                        contentKey = "jgjModule";
+                    }
+                    else
+                    {
+                        contentKey = "standardModule";
+                    }
+                    control = controlCache[contentKey];
+                    newOne = control as IPropertyOpt;
+                    newOne.SetProperties(ReadDoc, properties, true, out _);
                 }
-                control = controlCache[contentKey];
-                newOne = control as IPropertyOpt;
-                newOne.SetProperties(ReadDoc, properties, true, out _);
             }
             else
             {
diff --git a/PluginLisener/.vs/PluginLisener.csproj.dtbcache.json b/PluginLisener/.vs/PluginLisener.csproj.dtbcache.json
new file mode 100644
index 0000000..542b22f
--- /dev/null
+++ b/PluginLisener/.vs/PluginLisener.csproj.dtbcache.json
@@ -0,0 +1 @@
+{"RootPath":"D:\\Workspace\\PdmSwPlugin2\\PluginLisener","ProjectFileName":"PluginLisener.csproj","Configuration":"Debug|x64","FrameworkPath":"","Sources":[{"SourceFile":"PluginLisener.cs"},{"SourceFile":"PluginLisener.Designer.cs"},{"SourceFile":"Program.cs"},{"SourceFile":"ProjectInstaller.cs"},{"SourceFile":"ProjectInstaller.Designer.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"obj\\x64\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"}],"References":[{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\packages\\HtmlToXamlConverter.1.0.5727.24510\\lib\\net45\\HtmlToXamlConverter.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Configuration.Install.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Management.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.ServiceProcess.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\bin\\x64\\Debug\\PluginLisener.exe","OutputItemRelativePath":"PluginLisener.exe"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/PluginLisener/.vs/PluginLisener/v17/DocumentLayout.backup.json b/PluginLisener/.vs/PluginLisener/v17/DocumentLayout.backup.json
new file mode 100644
index 0000000..278ef01
--- /dev/null
+++ b/PluginLisener/.vs/PluginLisener/v17/DocumentLayout.backup.json
@@ -0,0 +1,53 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|d:\\workspace\\pdmswplugin2\\pluginlisener\\pluginlisener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|solutionrelative:pluginlisener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 0,
+          "Children": [
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "PluginLisener.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\PluginLisener.cs",
+              "RelativeDocumentMoniker": "PluginLisener.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\PluginLisener.cs",
+              "RelativeToolTip": "PluginLisener.cs",
+              "ViewState": "AgIAAAYAAAAAAAAAAAAAAA8AAABBAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-23T08:16:41.952Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "Program.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\Program.cs",
+              "RelativeDocumentMoniker": "Program.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\Program.cs",
+              "RelativeToolTip": "Program.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAAhAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-23T08:16:20.579Z"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/PluginLisener/.vs/PluginLisener/v17/DocumentLayout.json b/PluginLisener/.vs/PluginLisener/v17/DocumentLayout.json
new file mode 100644
index 0000000..bec89d4
--- /dev/null
+++ b/PluginLisener/.vs/PluginLisener/v17/DocumentLayout.json
@@ -0,0 +1,71 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|d:\\workspace\\pdmswplugin2\\pluginlisener\\pluginlisener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|solutionrelative:pluginlisener.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|d:\\workspace\\pdmswplugin2\\pluginlisener\\pluginlisener.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|solutionrelative:pluginlisener.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}|PluginLisener.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 1,
+          "Children": [
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "PluginLisener.Designer.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\PluginLisener.Designer.cs",
+              "RelativeDocumentMoniker": "PluginLisener.Designer.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\PluginLisener.Designer.cs",
+              "RelativeToolTip": "PluginLisener.Designer.cs",
+              "ViewState": "AgIAABMAAAAAAAAAAAAgwB4AAAArAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-09-12T08:38:16.635Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "PluginLisener.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\PluginLisener.cs",
+              "RelativeDocumentMoniker": "PluginLisener.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\PluginLisener.cs",
+              "RelativeToolTip": "PluginLisener.cs",
+              "ViewState": "AgIAABgAAAAAAAAAAAAowBEAAAAIAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-23T08:16:41.952Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "Program.cs",
+              "DocumentMoniker": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\Program.cs",
+              "RelativeDocumentMoniker": "Program.cs",
+              "ToolTip": "D:\\Workspace\\PdmSwPlugin2\\PluginLisener\\Program.cs",
+              "RelativeToolTip": "Program.cs",
+              "ViewState": "AgIAAAAAAAAAAAAAAAAAAA8AAAAdAAAAAAAAAA==",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-23T08:16:20.579Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/PluginLisener/App.config b/PluginLisener/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/PluginLisener/App.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/PluginLisener/PluginLisener.Designer.cs b/PluginLisener/PluginLisener.Designer.cs
new file mode 100644
index 0000000..0122ad4
--- /dev/null
+++ b/PluginLisener/PluginLisener.Designer.cs
@@ -0,0 +1,38 @@
+锘縩amespace PluginLisener
+{
+    partial class PluginLisener
+    {
+        /// <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 缁勪欢璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+        /// <summary> 
+        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈淇敼
+        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.ServiceName = "PdmSwPluginLisener";
+            this.CanStop = true;
+        }
+
+        #endregion
+    }
+}
diff --git a/PluginLisener/PluginLisener.cs b/PluginLisener/PluginLisener.cs
new file mode 100644
index 0000000..ac4a312
--- /dev/null
+++ b/PluginLisener/PluginLisener.cs
@@ -0,0 +1,56 @@
+锘縰sing System.Runtime.InteropServices;
+using System;
+using System.ServiceProcess;
+using System.Collections.Generic;
+using SolidWorks.Interop.sldworks;
+
+namespace PluginLisener
+{
+    public partial class PluginLisener : ServiceBase
+    {
+        public PluginLisener()
+        {
+            InitializeComponent();
+        }
+
+        private List<SldWorks> processIds = new List<SldWorks>();
+
+        public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
+
+        protected override void OnStart(string[] args)
+        {
+            var SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");
+            int resp = 0;
+            WTSSendMessage(
+              WTS_CURRENT_SERVER_HANDLE,
+              WTSGetActiveConsoleSessionId(),//鑾峰緱褰撳墠鏄剧ず鐨勬闈㈡墍鍦ㄧ殑SessionID
+                      "title", "title".Length,
+              "message", "message".Length,
+              0, 0, out resp, false);
+        }
+
+        public void StartScan() { 
+            
+        }
+
+        protected override void OnStop()
+        {
+        }
+
+        [DllImport("kernel32.dll", SetLastError = true)]
+        public static extern int WTSGetActiveConsoleSessionId();
+
+        [DllImport("wtsapi32.dll", SetLastError = true)]
+        public static extern bool WTSSendMessage( //涓�涓猄ession涓殑杩涚▼鍙互鐢╓TSSendMessage锛岃鍙︿竴涓猄ession寮瑰嚭瀵硅瘽妗�
+聽 聽 聽 聽 聽 聽 IntPtr hServer,
+      int SessionId,
+      String pTitle,
+      int TitleLength,
+      String pMessage,
+      int MessageLength,
+      int Style,
+      int Timeout,
+      out int pResponse,
+      bool bWait);
+    }
+}
diff --git a/PluginLisener/PluginLisener.csproj b/PluginLisener/PluginLisener.csproj
new file mode 100644
index 0000000..36116cd
--- /dev/null
+++ b/PluginLisener/PluginLisener.csproj
@@ -0,0 +1,107 @@
+锘�<?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>{08B29115-BDDE-43E6-9E6B-EB6DC75B35D9}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>PluginLisener</RootNamespace>
+    <AssemblyName>PluginLisener</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HtmlToXamlConverter, Version=1.0.5727.24510, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>packages\HtmlToXamlConverter.1.0.5727.24510\lib\net45\HtmlToXamlConverter.dll</HintPath>
+    </Reference>
+    <Reference Include="SolidWorks.Interop.sldworks">
+      <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.sldworks.dll</HintPath>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration.Install" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="PluginLisener.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="PluginLisener.Designer.cs">
+      <DependentUpon>PluginLisener.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="ProjectInstaller.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="ProjectInstaller.Designer.cs">
+      <DependentUpon>ProjectInstaller.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ProjectInstaller.resx">
+      <DependentUpon>ProjectInstaller.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe "$(TargetFileName)" &amp; net start PdmSwPluginLisener</PostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>sc delete PdmSwPluginLisener</PreBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/PluginLisener/Program.cs b/PluginLisener/Program.cs
new file mode 100644
index 0000000..98dce27
--- /dev/null
+++ b/PluginLisener/Program.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceProcess;
+
+namespace PluginLisener
+{
+    internal static class Program
+    {
+        /// <summary>
+        /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广��
+        /// </summary>
+        static void Main()
+        {
+            ServiceBase[] ServicesToRun;
+            ServicesToRun = new ServiceBase[]
+            {
+                new PluginLisener()
+            };
+            ServiceBase.Run(ServicesToRun);
+        }
+    }
+}
diff --git a/PluginLisener/ProjectInstaller.Designer.cs b/PluginLisener/ProjectInstaller.Designer.cs
new file mode 100644
index 0000000..34b0841
--- /dev/null
+++ b/PluginLisener/ProjectInstaller.Designer.cs
@@ -0,0 +1,56 @@
+锘縩amespace PluginLisener
+{
+    partial class ProjectInstaller
+    {
+        /// <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 缁勪欢璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+        /// <summary>
+        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈淇敼
+        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
+            this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
+            // 
+            // serviceProcessInstaller1
+            // 
+            this.serviceProcessInstaller1.Password = null;
+            this.serviceProcessInstaller1.Username = null;
+            // 
+            // serviceInstaller1
+            // 
+            this.serviceInstaller1.ServiceName = "PdmSwPluginLisener";
+            // 
+            // ProjectInstaller
+            // 
+            this.Installers.AddRange(new System.Configuration.Install.Installer[] {
+            this.serviceProcessInstaller1,
+            this.serviceInstaller1});
+
+        }
+
+        #endregion
+
+        private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
+        private System.ServiceProcess.ServiceInstaller serviceInstaller1;
+    }
+}
\ No newline at end of file
diff --git a/PluginLisener/ProjectInstaller.cs b/PluginLisener/ProjectInstaller.cs
new file mode 100644
index 0000000..c03a476
--- /dev/null
+++ b/PluginLisener/ProjectInstaller.cs
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration.Install;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace PluginLisener
+{
+    [RunInstaller(true)]
+    public partial class ProjectInstaller : System.Configuration.Install.Installer
+    {
+        public ProjectInstaller()
+        {
+            InitializeComponent();
+        }
+    }
+}
diff --git a/PluginLisener/ProjectInstaller.resx b/PluginLisener/ProjectInstaller.resx
new file mode 100644
index 0000000..77c2810
--- /dev/null
+++ b/PluginLisener/ProjectInstaller.resx
@@ -0,0 +1,129 @@
+锘�<?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>
+  <metadata name="serviceProcessInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="serviceInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>210, 17</value>
+  </metadata>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/PluginLisener/Properties/AssemblyInfo.cs b/PluginLisener/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c40035b
--- /dev/null
+++ b/PluginLisener/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("PluginLisener")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PluginLisener")]
+[assembly: AssemblyCopyright("Copyright 漏  2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("08b29115-bdde-43e6-9e6b-eb6dc75b35d9")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+//鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/PluginLisener/packages.config b/PluginLisener/packages.config
new file mode 100644
index 0000000..28540c5
--- /dev/null
+++ b/PluginLisener/packages.config
@@ -0,0 +1,4 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="HtmlToXamlConverter" version="1.0.5727.24510" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/PluginListener/.vs/PluginListener/v17/DocumentLayout.json b/PluginListener/.vs/PluginListener/v17/DocumentLayout.json
new file mode 100644
index 0000000..575c336
--- /dev/null
+++ b/PluginListener/.vs/PluginListener/v17/DocumentLayout.json
@@ -0,0 +1,12 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "D:\\Workspace\\PdmSwPlugin2\\PluginListener\\",
+  "Documents": [],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/PluginListener/Alert.xaml b/PluginListener/Alert.xaml
new file mode 100644
index 0000000..6b0bef4
--- /dev/null
+++ b/PluginListener/Alert.xaml
@@ -0,0 +1,15 @@
+锘�<Window x:Class="PluginListener.Alert"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:Test1"
+        mc:Ignorable="d"
+        ShowInTaskbar="False"
+        Topmost="True" Height="Auto" Width="Auto"
+        Title="鎻愮ず">
+    <StackPanel HorizontalAlignment="Center">
+        <Label x:Name="label"/>
+        <Button Click="Button_Click">纭</Button>
+    </StackPanel>
+</Window>
diff --git a/PluginListener/Alert.xaml.cs b/PluginListener/Alert.xaml.cs
new file mode 100644
index 0000000..35a8f67
--- /dev/null
+++ b/PluginListener/Alert.xaml.cs
@@ -0,0 +1,49 @@
+锘縰sing System.Windows;
+namespace PluginListener
+{
+    /// <summary>
+    /// Alert.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class Alert : Window
+    {
+        public Alert()
+        {
+            InitializeComponent();
+        }
+
+        public void Open(string msg)
+        {
+            Dispatcher.Invoke(() =>
+            {
+                label.Content = msg;
+                this.Show();
+            });
+        }
+
+        public void DoHide()
+        {
+            Dispatcher.Invoke(() =>
+            {
+                this.Hide();
+            });
+        }
+
+        public void DoClose()
+        {
+            Dispatcher.Invoke(() =>
+            {
+                this.Close();
+            });
+        }
+
+        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
+        {
+            e.Cancel = true;
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            this.Hide();
+        }
+    }
+}
diff --git a/PluginListener/App.config b/PluginListener/App.config
new file mode 100644
index 0000000..eb01fae
--- /dev/null
+++ b/PluginListener/App.config
@@ -0,0 +1,9 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+  </startup>
+  <connectionStrings>
+    <add name="DefaultConnection" connectionString="Data Source = |SQL/CE|" />
+  </connectionStrings>
+</configuration>
\ No newline at end of file
diff --git a/PluginListener/Intercepter.cs b/PluginListener/Intercepter.cs
new file mode 100644
index 0000000..d78fe00
--- /dev/null
+++ b/PluginListener/Intercepter.cs
@@ -0,0 +1,47 @@
+锘縰sing System;
+using System.Diagnostics;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Test1
+{
+    public class Intercepter
+    {
+        private Task importListenTask;
+        private Task checkInListenTask;
+
+        private CancellationTokenSource cts;
+
+        public Intercepter(Action callback1, Action callback2)
+        {
+            cts = new CancellationTokenSource();
+            /// 鍚姩瀵煎叆鎷︽埅
+            importListenTask = Task.Run(() =>
+            {
+                while (!cts.IsCancellationRequested)
+                {
+                    Debug.WriteLine("inter Import");
+                    // 鐩戝惉瀵煎叆鎻掍欢鐨勫惎鍔�
+                    callback1();
+                    Thread.Sleep(30);
+                }
+            });
+            /// 鍚姩妫�鍏ユ嫤鎴�
+            checkInListenTask = Task.Run(() =>
+            {
+                while (!cts.IsCancellationRequested)
+                {
+                    Debug.WriteLine("inter CheckIn");
+                    // 鐩戝惉妫�鍏ユ彃浠剁殑鍚姩
+                    callback2();
+                    Thread.Sleep(30);
+                }
+            });
+        }
+
+        public void StopIntercept()
+        {
+            cts.Cancel();
+        }
+    }
+}
diff --git a/PluginListener/Listener.cs b/PluginListener/Listener.cs
new file mode 100644
index 0000000..630cc14
--- /dev/null
+++ b/PluginListener/Listener.cs
@@ -0,0 +1,392 @@
+锘縰sing log4net;
+using SolidWorks.Interop.sldworks;
+using SolidWorks.Interop.swconst;
+using SuperSocket.ClientEngine;
+using System;
+using System.Diagnostics;
+using System.Net;
+using System.Runtime.InteropServices;
+using System.ServiceProcess;
+using System.Text;
+using System.Timers;
+using System.Windows;
+using Test1;
+
+namespace PluginListener
+{
+    public class Listener : ServiceBase
+    {
+        ILog log = LogManager.GetLogger("Listener");
+        private AsyncTcpSession client;
+
+        private long err_count;
+
+        private System.Timers.Timer socketTimer;
+        private System.Timers.Timer importTimer;
+        private System.Timers.Timer checkInTimer;
+
+        private Alert alert;
+        private volatile int is_open = int.MaxValue;
+
+        private int msgInterval = 5000;
+
+        #region 娑堟伅
+        public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
+
+        public void ShowMessageBox(string message, string title)
+        {
+            /*if (is_open == 0)
+            {
+                return;
+            }*/
+            is_open = 0;
+            int res;
+            WTSSendMessage(
+                WTS_CURRENT_SERVER_HANDLE,
+                WTSGetActiveConsoleSessionId(),
+                title, title.Length,
+                message, message.Length,
+                0, 0, out res, true);
+            is_open = res;
+        }
+
+        [DllImport("kernel32.dll", SetLastError = true)]
+        public static extern int WTSGetActiveConsoleSessionId();
+
+        [DllImport("wtsapi32.dll", SetLastError = true)]
+        public static extern bool WTSSendMessage(
+            IntPtr hServer,
+            int SessionId,
+            String pTitle,
+            int TitleLength,
+            String pMessage,
+            int MessageLength,
+            int Style,
+            int Timeout,
+            out int pResponse,
+            bool bWait);
+        #endregion
+
+
+        #region 缁勪欢璁捐鍣ㄧ敓鎴愮殑浠g爜
+        /// <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);
+        }
+
+        /// <summary> 
+        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈淇敼
+        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.ServiceName = "PdmSwPluginLisener";
+            this.CanStop = true;
+        }
+        #endregion
+
+        private void AlertMsg(string msg)
+        {
+            /// 鍐呯疆WPF鐨� 涓嶈兘鐢�
+            // alert.Open(msg);
+
+            /*try
+            {
+                // SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.28");
+                var swApp = (SldWorks)System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application");
+                swApp.SendMsgToUser2(msg, (int)swMessageBoxIcon_e.swMbStop, (int)swMessageBoxBtn_e.swMbOk);
+                Marshal.ReleaseComObject(swApp);
+            }
+            catch (COMException ex)
+            {
+                log.Error("Attach Sw Failed.", ex);
+            }*/
+
+            WinAPI_Interop.ShowServiceMessage(msg, "鎻愮ず");
+            // ShowMessageBox(msg, "鎻愮ず");
+
+            /// 鐢∕essageBox鐨� 涓嶈兘鐢�
+            /*if (swApp == null)
+            {
+                int res;
+                WTSSendMessage(
+                  WTS_CURRENT_SERVER_HANDLE,
+                  WTSGetActiveConsoleSessionId(),//鑾峰緱褰撳墠鏄剧ず鐨勬闈㈡墍鍦ㄧ殑SessionID
+                          "鎻愮ず", "鎻愮ず".Length,
+                  msg, msg.Length,
+                  0, 0, out res, false);
+            }
+            else
+            {
+                swApp.SendMsgToUser2(msg, (int)swMessageBoxIcon_e.swMbStop, (int)swMessageBoxBtn_e.swMbOk);
+            }*/
+
+            //
+
+            ///鍚姩exe鐨�
+            /*ProcessStartInfo psi = new ProcessStartInfo
+            {
+                FileName = "AlertWindow.exe",
+                UseShellExecute = false,
+                CreateNoWindow = true
+            };
+            Process process = Process.Start(psi);*/
+        }
+
+        public Listener()
+        {
+            alert = new Alert();
+            client = new AsyncTcpSession();
+            client.Connected += Client_Connected;
+            client.Error += Client_Error;
+            client.Closed += Client_Closed;
+            client.DataReceived += Client_DataReceived;
+            InitializeComponent();
+            log.Info("Service Started.");
+        }
+
+        protected override void OnStart(string[] args)
+        {
+            Start();
+        }
+
+        protected override void OnStop()
+        {
+            Stop();
+        }
+
+        public void Start()
+        {
+            InitSocketTimer();
+        }
+
+        public void Stop()
+        {
+            socketTimer?.Stop();
+            StopInterceptTimer();
+            // alert.DoClose();
+            // if (intercepter != null) intercepter.StopIntercept();
+        }
+
+        /// <summary>
+        /// 鍚姩Socket瀹氭椂鍣�
+        /// </summary>
+        public void InitSocketTimer()
+        {
+            log.Info("Starting Socket Timer...");
+            socketTimer = new System.Timers.Timer(msgInterval);
+            socketTimer.Elapsed += Timer_Elapsed;
+            socketTimer.Enabled = true;
+            socketTimer.Start();
+            log.Info("Started Socket Timer!");
+        }
+
+        /// <summary>
+        /// 鍚姩閲戣澏鎷︽埅浠诲姟
+        /// </summary>
+        public void StartInterceptTimer()
+        {
+            // if (intercepter == null) intercepter = new Intercepter(ListenImportHandle, ListenCheckInHandle);
+            if (importTimer == null)
+            {
+                importTimer = new System.Timers.Timer(500);
+                importTimer.Elapsed += ImportTimer_Elapsed;
+            }
+            importTimer.Start();
+            if (checkInTimer == null)
+            {
+                checkInTimer = new System.Timers.Timer(500);
+                checkInTimer.Elapsed += CheckInTimer_Elapsed;
+            }
+            checkInTimer.Start();
+        }
+
+        private void ImportTimer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            lock (importTimer)
+            {
+                ListenImportHandle();
+            }
+        }
+
+        private void CheckInTimer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            lock (checkInTimer)
+            {
+                ListenCheckInHandle();
+            }
+        }
+
+        /// <summary>
+        /// 鍋滄閲戣澏鎷︽埅浠诲姟
+        /// </summary>
+        private void StopInterceptTimer()
+        {
+            /*if (intercepter != null)
+            {
+                intercepter.StopIntercept();
+                intercepter = null;
+            }*/
+            importTimer?.Stop();
+            checkInTimer?.Stop();
+        }
+
+        /// <summary>
+        /// 鎻掍欢杩斿洖姝e父鏃剁殑澶勭悊
+        /// </summary>
+        private void HandleNormal()
+        {
+            err_count = 0;
+            StopInterceptTimer();
+            // alert.DoHide();
+        }
+
+        private bool IsSwRunning()
+        {
+            Process[] ps = Process.GetProcessesByName("SLDWORKS");
+            bool IsRunning = (ps != null && ps.Length > 0);
+            log.Debug($"Sw Is Running: {IsRunning}");
+            return IsRunning;
+        }
+
+        /// <summary>
+        /// 鎻掍欢杩斿洖寮傚父鏃剁殑澶勭悊
+        /// </summary>
+        private void HandleErr()
+        {
+            log.Debug($"err_count: {err_count}");
+            if (++err_count > 3)
+            {
+                if (IsSwRunning())
+                {
+                    // 濡傛灉solidworks鍚姩
+                    StartInterceptTimer();
+                    log.Debug("Ready to show Msg.");
+                    AlertMsg("璇峰惎鐢ㄦ彃浠跺苟鐧诲綍");
+                    err_count = 3;
+                }
+                else
+                {
+                    HandleNormal();
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 鎼滅储鏄惁鏈夊鍏ョ獥鍙o紝鏈夊氨涓�鐩存渶灏忓寲锛屽苟鎵ц瑙勫垯妫�鏌�
+        /// </summary>
+        /// <returns></returns>
+        private void ListenImportHandle()
+        {
+            IntPtr ptr = WindowIntPtrUtil.FindWindow(null, "Everything");//瀵煎叆鏂囨。
+            if (ptr == IntPtr.Zero)
+            {
+                return;
+            }
+            WindowIntPtrUtil.KillProcessByIntPtr(ptr);
+        }
+
+        /// <summary>
+        /// 鎼滅储鏄惁鏈夋鍏ョ獥鍙o紝鏈夊氨涓�鐩存渶灏忓寲锛屽苟鎵ц瑙勫垯妫�鏌�
+        /// </summary>
+        /// <returns></returns>
+        private void ListenCheckInHandle()
+        {
+            IntPtr ptr = WindowIntPtrUtil.FindWindow(null, "妫�鍏ユ枃妗�");
+            if (ptr == IntPtr.Zero)
+            {
+                return;
+            }
+            WindowIntPtrUtil.KillProcessByIntPtr(ptr);
+        }
+
+        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            socketTimer.Stop();
+            try
+            {
+                if (!client.IsConnected)
+                {
+                    client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5678));
+                }
+                else
+                {
+                    var msg = Encoding.Default.GetBytes("HeatBeat");
+                    client.Send(msg, 0, msg.Length);
+                }
+            }
+            catch (Exception ex)
+            {
+                HandleErr();
+            }
+            finally
+            {
+                socketTimer.Start();
+            }
+        }
+
+        /// <summary>
+        /// 鎺ユ敹鍒版秷鎭�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_DataReceived(object sender, DataEventArgs e)
+        {
+            byte flag = e.Data[0];
+            if (flag == 1)
+            {
+                HandleNormal();
+            }
+            else
+            {
+                log.Error("Plugin Return 0.");
+                HandleErr();
+            }
+        }
+
+        /// <summary>
+        /// 瀹㈡埛绔叧闂紝瑙嗕负寮傚父
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_Closed(object sender, EventArgs e)
+        {
+            HandleErr();
+        }
+
+        /// <summary>
+        /// 瀹㈡埛绔紓甯�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_Error(object sender, ErrorEventArgs e)
+        {
+            HandleErr();
+        }
+
+        /// <summary>
+        /// 杩炴帴鍚庣殑鎿嶄綔
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_Connected(object sender, EventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/PluginListener/PluginListener.csproj b/PluginListener/PluginListener.csproj
new file mode 100644
index 0000000..7871a28
--- /dev/null
+++ b/PluginListener/PluginListener.csproj
@@ -0,0 +1,245 @@
+锘�<?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>{E92EE4C3-A373-41FE-8234-2DB56E2C6DFA}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>PluginListener</RootNamespace>
+    <AssemblyName>PluginListener</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\PdmSw\bin\x64\Debug\Listener\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\PdmSw\bin\x64\Release\Listener\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <TargetZone>LocalIntranet</TargetZone>
+  </PropertyGroup>
+  <PropertyGroup>
+    <GenerateManifests>false</GenerateManifests>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationManifest>Properties\app.manifest</ApplicationManifest>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject>PluginListener.Program</StartupObject>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="SolidWorks.Interop.sldworks">
+      <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.sldworks.dll</HintPath>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </Reference>
+    <Reference Include="SolidWorks.Interop.swconst">
+      <HintPath>C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\api\redist\SolidWorks.Interop.swconst.dll</HintPath>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </Reference>
+    <Reference Include="SuperSocket.ClientEngine, Version=0.10.0.0, Culture=neutral, PublicKeyToken=ee9af13f57f00acc, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.ClientEngine.0.10.0\lib\net45\SuperSocket.ClientEngine.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Common, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.1.6.6.1\lib\net45\SuperSocket.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Facility, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.1.6.6.1\lib\net45\SuperSocket.Facility.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.ProtoBase, Version=1.7.0.17, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.ProtoBase.1.7.0.17\lib\net45\SuperSocket.ProtoBase.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketBase, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.1.6.6.1\lib\net45\SuperSocket.SocketBase.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketEngine, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.Engine.1.6.6.1\lib\net45\SuperSocket.SocketEngine.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketService, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>packages\SuperSocket.Engine.1.6.6.1\lib\net45\SuperSocket.SocketService.exe</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Collections.Specialized, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Collections.Specialized.4.3.0\lib\net46\System.Collections.Specialized.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Configuration.Install" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Management" />
+    <Reference Include="System.Net.NameResolution, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Net.NameResolution.4.3.0\lib\net46\System.Net.NameResolution.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Net.Security, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Net.Security.4.3.0\lib\net46\System.Net.Security.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Web.Extensions" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Alert.xaml.cs">
+      <DependentUpon>Alert.xaml</DependentUpon>
+    </Compile>
+    <Compile Include="Listener.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Intercepter.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Util.cs" />
+    <Compile Include="WindowUtil.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="log4net.config">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="packages.config" />
+    <None Include="Properties\app.manifest" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <None Include="supersocket.cmd" />
+    <None Include="supersocket.sh" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Page Include="Alert.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/PluginListener/Program.cs b/PluginListener/Program.cs
new file mode 100644
index 0000000..2a8350d
--- /dev/null
+++ b/PluginListener/Program.cs
@@ -0,0 +1,32 @@
+锘縰sing log4net.Config;
+using System;
+using System.IO;
+using System.Reflection;
+using System.ServiceProcess;
+
+namespace PluginListener
+{
+    public class Program
+    { /// <summary>
+      /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广��
+      /// </summary>
+        [STAThread]
+        public static void Main()
+        {
+            string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
+            string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
+            string configFilePath = Path.Combine(assemblyDirPath,"log4net.config");
+            XmlConfigurator.Configure(new FileInfo(configFilePath));
+
+            ServiceBase[] ServicesToRun;
+            ServicesToRun = new ServiceBase[]
+            {
+                new Listener()
+            };
+            ServiceBase.Run(ServicesToRun);
+        }
+    }
+}
+
+// sc create "SolidWorks Listener" binpath= "D:\Workspace\PdmSwPlugin2\PdmSw\bin\x64\Debug\Listener\PluginListener.exe" type= interact type= own displayname= "SolidWorks Listener"
+
diff --git a/PluginListener/Properties/AssemblyInfo.cs b/PluginListener/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..756f1b1
--- /dev/null
+++ b/PluginListener/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("PluginListener")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PluginListener")]
+[assembly: AssemblyCopyright("Copyright 漏  2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                     //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                     //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                              //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                              //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/PluginListener/Properties/Resources.Designer.cs b/PluginListener/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..badfa97
--- /dev/null
+++ b/PluginListener/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace PluginListener.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   涓�涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈��
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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 (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PluginListener.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;
+            }
+        }
+    }
+}
diff --git a/PluginListener/Properties/Resources.resx b/PluginListener/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/PluginListener/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>
\ No newline at end of file
diff --git a/PluginListener/Properties/Settings.Designer.cs b/PluginListener/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..2ad6dbc
--- /dev/null
+++ b/PluginListener/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace PluginListener.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.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;
+            }
+        }
+    }
+}
diff --git a/PluginListener/Properties/Settings.settings b/PluginListener/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/PluginListener/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/PluginListener/Properties/app.manifest b/PluginListener/Properties/app.manifest
new file mode 100644
index 0000000..e1175ad
--- /dev/null
+++ b/PluginListener/Properties/app.manifest
@@ -0,0 +1,73 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+	<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
+	<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+		<security>
+			<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+				<!-- UAC 娓呭崟閫夐」
+             濡傛灉鎯宠鏇存敼 Windows 鐢ㄦ埛甯愭埛鎺у埗绾у埆锛岃浣跨敤
+             浠ヤ笅鑺傜偣涔嬩竴鏇挎崲 requestedExecutionLevel 鑺傜偣銆�
+
+        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
+        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
+        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
+
+            鎸囧畾 requestedExecutionLevel 鍏冪礌灏嗙鐢ㄦ枃浠跺拰娉ㄥ唽琛ㄨ櫄鎷熷寲銆�
+            濡傛灉浣犵殑搴旂敤绋嬪簭闇�瑕佹铏氭嫙鍖栨潵瀹炵幇鍚戝悗鍏煎鎬э紝鍒欑Щ闄ゆ
+            鍏冪礌銆�
+        -->
+				<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
+			</requestedPrivileges>
+			<applicationRequestMinimum>
+				<defaultAssemblyRequest permissionSetReference="Custom" />
+				<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site" Unrestricted="true" />
+			</applicationRequestMinimum>
+		</security>
+	</trustInfo>
+	<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+		<application>
+			<!-- 璁捐姝ゅ簲鐢ㄧ▼搴忎笌鍏朵竴璧峰伐浣滀笖宸查拡瀵规搴旂敤绋嬪簭杩涜娴嬭瘯鐨�
+           Windows 鐗堟湰鐨勫垪琛ㄣ�傚彇娑堣瘎璁洪�傚綋鐨勫厓绱狅紝
+           Windows 灏嗚嚜鍔ㄩ�夋嫨鏈�鍏煎鐨勭幆澧冦�� -->
+			<!-- Windows Vista -->
+			<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
+			<!-- Windows 7 -->
+			<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
+			<!-- Windows 8 -->
+			<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
+			<!-- Windows 8.1 -->
+			<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
+			<!-- Windows 10 -->
+			<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
+		</application>
+	</compatibility>
+	<!-- 鎸囩ず璇ュ簲鐢ㄧ▼搴忓彲鎰熺煡 DPI 涓� Windows 鍦� DPI 杈冮珮鏃跺皢涓嶄細瀵瑰叾杩涜
+       鑷姩缂╂斁銆俉indows Presentation Foundation (WPF)搴旂敤绋嬪簭鑷姩鎰熺煡 DPI锛屾棤闇�
+       閫夋嫨鍔犲叆銆傞�夋嫨鍔犲叆姝よ缃殑 Windows 绐椾綋搴旂敤绋嬪簭(闈㈠悜 .NET Framework 4.6)杩樺簲
+       鍦ㄥ叾 app.config 涓皢 "EnableWindowsFormsHighDpiAutoResizing" 璁剧疆璁剧疆涓� "true"銆�
+       
+       灏嗗簲鐢ㄧ▼搴忚涓烘劅鐭ラ暱璺緞銆傝鍙傞槄 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
+	<!--
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings>
+      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
+      <longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
+    </windowsSettings>
+  </application>
+  -->
+	<!-- 鍚敤 Windows 鍏叡鎺т欢鍜屽璇濇鐨勪富棰�(Windows XP 鍜屾洿楂樼増鏈�) -->
+	<!--
+  <dependency>
+    <dependentAssembly>
+      <assemblyIdentity
+          type="win32"
+          name="Microsoft.Windows.Common-Controls"
+          version="6.0.0.0"
+          processorArchitecture="*"
+          publicKeyToken="6595b64144ccf1df"
+          language="*"
+        />
+    </dependentAssembly>
+  </dependency>
+  -->
+</assembly>
\ No newline at end of file
diff --git a/PluginListener/Util.cs b/PluginListener/Util.cs
new file mode 100644
index 0000000..e8343fa
--- /dev/null
+++ b/PluginListener/Util.cs
@@ -0,0 +1,184 @@
+锘縰sing System;
+using System.Runtime.InteropServices;
+
+namespace PluginListener
+{
+    public class WinAPI_Interop
+    {
+        public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
+        /// <summary>
+        /// 鏈嶅姟绋嬪簭鎵ц娑堟伅鎻愮ず,鍓嶅彴MessageBox.Show
+        /// </summary>
+        /// <param name="message">娑堟伅鍐呭</param>
+        /// <param name="title">鏍囬</param>
+        public static void ShowServiceMessage(string message, string title)
+        {
+            int resp = 0;
+            WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, WTSGetActiveConsoleSessionId(), title, title.Length, message, message.Length, 0, 0, out resp, false);
+        }
+
+        [DllImport("kernel32.dll", SetLastError = true)]
+        public static extern int WTSGetActiveConsoleSessionId();
+
+        [DllImport("wtsapi32.dll", SetLastError = true)]
+        public static extern bool WTSSendMessage(IntPtr hServer, int SessionId, String pTitle, int TitleLength, String pMessage, int MessageLength, int Style, int Timeout, out int pResponse, bool bWait);
+        #region P/Invoke WTS APIs
+        private enum WTS_CONNECTSTATE_CLASS
+        {
+            WTSActive,
+            WTSConnected,
+            WTSConnectQuery,
+            WTSShadow,
+            WTSDisconnected,
+            WTSIdle,
+            WTSListen,
+            WTSReset,
+            WTSDown,
+            WTSInit
+        }
+
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
+        private struct WTS_SESSION_INFO
+        {
+            public UInt32 SessionID;
+            public string pWinStationName;
+            public WTS_CONNECTSTATE_CLASS State;
+        }
+
+        [DllImport("WTSAPI32.DLL", SetLastError = true, CharSet = CharSet.Auto)]
+        static extern bool WTSEnumerateSessions(
+            IntPtr hServer,
+            [MarshalAs(UnmanagedType.U4)] UInt32 Reserved,
+            [MarshalAs(UnmanagedType.U4)] UInt32 Version,
+            ref IntPtr ppSessionInfo,
+            [MarshalAs(UnmanagedType.U4)] ref UInt32 pSessionInfoCount
+            );
+
+        [DllImport("WTSAPI32.DLL", SetLastError = true, CharSet = CharSet.Auto)]
+        static extern void WTSFreeMemory(IntPtr pMemory);
+
+        [DllImport("WTSAPI32.DLL", SetLastError = true, CharSet = CharSet.Auto)]
+        static extern bool WTSQueryUserToken(UInt32 sessionId, out IntPtr Token);
+        #endregion
+
+        #region P/Invoke CreateProcessAsUser
+        /// <summary> 
+        /// Struct, Enum and P/Invoke Declarations for CreateProcessAsUser. 
+        /// </summary> 
+        ///  
+
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
+        struct STARTUPINFO
+        {
+            public Int32 cb;
+            public string lpReserved;
+            public string lpDesktop;
+            public string lpTitle;
+            public Int32 dwX;
+            public Int32 dwY;
+            public Int32 dwXSize;
+            public Int32 dwYSize;
+            public Int32 dwXCountChars;
+            public Int32 dwYCountChars;
+            public Int32 dwFillAttribute;
+            public Int32 dwFlags;
+            public Int16 wShowWindow;
+            public Int16 cbReserved2;
+            public IntPtr lpReserved2;
+            public IntPtr hStdInput;
+            public IntPtr hStdOutput;
+            public IntPtr hStdError;
+        }
+
+        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
+        struct PROCESS_INFORMATION
+        {
+            public IntPtr hProcess;
+            public IntPtr hThread;
+            public int dwProcessId;
+            public int dwThreadId;
+        }
+
+        /// <summary>
+        /// 浠ュ綋鍓嶇櫥褰曠殑windows鐢ㄦ埛(瑙掕壊鏉冮檺)杩愯鎸囧畾绋嬪簭杩涚▼
+        /// </summary>
+        /// <param name="hToken"></param>
+        /// <param name="lpApplicationName">鎸囧畾绋嬪簭(鍏ㄨ矾寰�)</param>
+        /// <param name="lpCommandLine">鍙傛暟</param>
+        /// <param name="lpProcessAttributes">杩涚▼灞炴��</param>
+        /// <param name="lpThreadAttributes">绾跨▼灞炴��</param>
+        /// <param name="bInheritHandles"></param>
+        /// <param name="dwCreationFlags"></param>
+        /// <param name="lpEnvironment"></param>
+        /// <param name="lpCurrentDirectory"></param>
+        /// <param name="lpStartupInfo">绋嬪簭鍚姩灞炴��</param>
+        /// <param name="lpProcessInformation">鏈�鍚庤繑鍥炵殑杩涚▼淇℃伅</param>
+        /// <returns>鏄惁璋冪敤鎴愬姛</returns>
+        [DllImport("ADVAPI32.DLL", SetLastError = true, CharSet = CharSet.Auto)]
+        static extern bool CreateProcessAsUser(IntPtr hToken, string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes,
+                                                      bool bInheritHandles, uint dwCreationFlags, string lpEnvironment, string lpCurrentDirectory,
+                                                      ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation);
+
+        [DllImport("KERNEL32.DLL", SetLastError = true, CharSet = CharSet.Auto)]
+        static extern bool CloseHandle(IntPtr hHandle);
+        #endregion
+
+        /// <summary>
+        /// 浠ュ綋鍓嶇櫥褰曠郴缁熺殑鐢ㄦ埛瑙掕壊鏉冮檺鍚姩鎸囧畾鐨勮繘绋�
+        /// </summary>
+        /// <param name="ChildProcName">鎸囧畾鐨勮繘绋�(鍏ㄨ矾寰�)</param>
+        public static void CreateProcess(string ChildProcName)
+        {
+            IntPtr ppSessionInfo = IntPtr.Zero;
+            UInt32 SessionCount = 0;
+            if (WTSEnumerateSessions(
+                                    (IntPtr)WTS_CURRENT_SERVER_HANDLE,  // Current RD Session Host Server handle would be zero. 
+                                    0,  // This reserved parameter must be zero. 
+                                    1,  // The version of the enumeration request must be 1. 
+                                    ref ppSessionInfo, // This would point to an array of session info. 
+                                    ref SessionCount  // This would indicate the length of the above array.
+                                    ))
+            {
+                for (int nCount = 0; nCount < SessionCount; nCount++)
+                {
+                    WTS_SESSION_INFO tSessionInfo = (WTS_SESSION_INFO)Marshal.PtrToStructure(ppSessionInfo + nCount * Marshal.SizeOf(typeof(WTS_SESSION_INFO)), typeof(WTS_SESSION_INFO));
+                    if (WTS_CONNECTSTATE_CLASS.WTSActive == tSessionInfo.State)
+                    {
+                        IntPtr hToken = IntPtr.Zero;
+                        if (WTSQueryUserToken(tSessionInfo.SessionID, out hToken))
+                        {
+                            PROCESS_INFORMATION tProcessInfo;
+                            STARTUPINFO tStartUpInfo = new STARTUPINFO();
+                            tStartUpInfo.cb = Marshal.SizeOf(typeof(STARTUPINFO));
+                            bool ChildProcStarted = CreateProcessAsUser(
+                                                                        hToken,             // Token of the logged-on user. 
+                                                                        ChildProcName,      // Name of the process to be started. 
+                                                                        null,               // Any command line arguments to be passed. 
+                                                                        IntPtr.Zero,        // Default Process' attributes. 
+                                                                        IntPtr.Zero,        // Default Thread's attributes. 
+                                                                        false,              // Does NOT inherit parent's handles. 
+                                                                        0,                  // No any specific creation flag. 
+                                                                        null,               // Default environment path. 
+                                                                        null,               // Default current directory. 
+                                                                        ref tStartUpInfo,   // Process Startup Info.  
+                                                                        out tProcessInfo    // Process information to be returned. 
+                                                     );
+                            if (ChildProcStarted)
+                            {
+                                CloseHandle(tProcessInfo.hThread);
+                                CloseHandle(tProcessInfo.hProcess);
+                            }
+                            else
+                            {
+                                ShowServiceMessage("CreateProcessAsUser澶辫触", "CreateProcess");
+                            }
+                            CloseHandle(hToken);
+                            break;
+                        }
+                    }
+                }
+                WTSFreeMemory(ppSessionInfo);
+            }
+        }
+    }
+}
diff --git a/PluginListener/WindowUtil.cs b/PluginListener/WindowUtil.cs
new file mode 100644
index 0000000..79e42fc
--- /dev/null
+++ b/PluginListener/WindowUtil.cs
@@ -0,0 +1,48 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+namespace PluginListener
+{
+    public class WindowIntPtrUtil
+    {
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern IntPtr FindWindow(string className, string windowName);
+
+        [DllImport("user32.dll")]
+        public static extern IntPtr FindWindowByProcessId(int processId, int threadId);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern uint GetWindowThreadProcessId(IntPtr ptr, out uint processId);
+
+        /// <summary>
+        /// 鎿嶄綔绐楀彛 1鏄縺娲� 6鏄渶灏忓寲
+        /// </summary>
+        /// <param name="ptr"></param>
+        /// <param name="command">1鏄縺娲� 6鏄渶灏忓寲</param>
+        /// <returns></returns>
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern bool ShowWindow(IntPtr ptr, int command);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern bool SendMessage(IntPtr ptr, UInt32 Msg, IntPtr wParam, IntPtr lParam);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern bool PostMessage(IntPtr ptr, UInt32 Msg, IntPtr wParam, IntPtr lParam);
+
+        public static void KillProcessByIntPtr(IntPtr ptr)
+        {
+            //GetWindowThreadProcessId(ptr, out uint processId);
+            //if (processId == 0) return;
+            //Process process = Process.GetProcessById((int)processId);
+            //process.Kill();
+            //process.WaitForExit();
+            CloseWindow(ptr);
+        }
+
+        public static void CloseWindow(IntPtr ptr)
+        {
+            SendMessage(ptr, (UInt32)0x0010, IntPtr.Zero, IntPtr.Zero);
+        }
+    }
+}
diff --git a/PluginListener/log4net.config b/PluginListener/log4net.config
new file mode 100644
index 0000000..8b8684b
--- /dev/null
+++ b/PluginListener/log4net.config
@@ -0,0 +1,37 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<log4net>
+	<!-- 鎺у埗鍙版棩蹇楅厤缃� -->
+	<appender name="Console" type="log4net.Appender.ConsoleAppender">
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
+		</layout>
+	</appender>
+
+	<!-- 鏂囦欢瀛樺偍鏃ュ織閰嶇疆 -->
+	<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
+		<!-- 淇濆瓨鏂囦欢鐨勫悕绉� -->
+		<file value="./Log/" />
+		<appendToFile value="true" />
+		<rollingStyle value="Date" />
+		<datePattern value="'log_'yyyyMMdd'.log'"/>
+		<staticLogFileName value="false"/>
+
+		<!-- 鏂囦欢鐨勭紪鐮佹柟寮� -->
+		<param name="Encoding" value="UTF-8"/>
+		<!-- 姣忎釜鏂囦欢鐨勫ぇ灏� -->
+		<maximumFileSize value="100KB" />
+		<!-- 淇濆瓨鏂囦欢鏁伴噺 -->
+		<maxSizeRollBackups value="2" />
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%date{ISO8601} [%logger]  %level  %class - %message%newline" />
+		</layout>
+	</appender>
+
+	<root>
+		<level value="DEBUG" />
+		<appender-ref ref="Console" />
+		<appender-ref ref="RollingFile" />
+	</root>
+</log4net>
\ No newline at end of file
diff --git a/PluginListener/packages.config b/PluginListener/packages.config
new file mode 100644
index 0000000..02a9f03
--- /dev/null
+++ b/PluginListener/packages.config
@@ -0,0 +1,23 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="2.0.3" targetFramework="net472" />
+  <package id="SuperSocket" version="1.6.6.1" targetFramework="net472" />
+  <package id="SuperSocket.ClientEngine" version="0.10.0" targetFramework="net472" />
+  <package id="SuperSocket.Engine" version="1.6.6.1" targetFramework="net472" />
+  <package id="SuperSocket.ProtoBase" version="1.7.0.17" targetFramework="net472" />
+  <package id="System.Collections.Specialized" version="4.3.0" targetFramework="net472" />
+  <package id="System.IO" version="4.3.0" targetFramework="net472" />
+  <package id="System.Linq" version="4.3.0" targetFramework="net472" />
+  <package id="System.Net.NameResolution" version="4.3.0" targetFramework="net472" />
+  <package id="System.Net.Security" version="4.3.0" targetFramework="net472" />
+  <package id="System.Net.Sockets" version="4.3.0" targetFramework="net472" />
+  <package id="System.Runtime" version="4.3.0" targetFramework="net472" />
+  <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net472" />
+  <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net472" />
+  <package id="System.Text.Encoding" version="4.3.0" targetFramework="net472" />
+  <package id="System.Threading" version="4.3.0" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/PluginListener/supersocket.cmd b/PluginListener/supersocket.cmd
new file mode 100644
index 0000000..4532661
--- /dev/null
+++ b/PluginListener/supersocket.cmd
@@ -0,0 +1,2 @@
+@echo off
+SuperSocket.SocketService.exe -c %1 %2
\ No newline at end of file
diff --git a/PluginListener/supersocket.sh b/PluginListener/supersocket.sh
new file mode 100644
index 0000000..f3cd0d9
--- /dev/null
+++ b/PluginListener/supersocket.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+mono SuperSocket.SocketService.exe -c $1 $2
\ No newline at end of file
diff --git a/SolidWorksListener/App.config b/SolidWorksListener/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/SolidWorksListener/App.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/SolidWorksListener/App.xaml b/SolidWorksListener/App.xaml
new file mode 100644
index 0000000..37ce4e0
--- /dev/null
+++ b/SolidWorksListener/App.xaml
@@ -0,0 +1,9 @@
+锘�<Application x:Class="SolidWorksListener.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:SolidWorksListener"
+             Startup="Application_Startup">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>
diff --git a/SolidWorksListener/App.xaml.cs b/SolidWorksListener/App.xaml.cs
new file mode 100644
index 0000000..5c49053
--- /dev/null
+++ b/SolidWorksListener/App.xaml.cs
@@ -0,0 +1,34 @@
+锘縰sing System.Windows;
+
+namespace SolidWorksListener
+{
+    /// <summary>
+    /// App.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class App : Application
+    {
+        public static Listener listener;
+        private static System.Threading.Mutex mutex;
+        //绯荤粺鑳藉璇嗗埆鏈夊悕绉扮殑浜掓枼锛屽洜姝ゅ彲浠ヤ娇鐢ㄥ畠绂佹搴旂敤绋嬪簭鍚姩涓ゆ 
+        //绗簩涓弬鏁板彲浠ヨ缃负浜у搧鐨勫悕绉�:Application.ProductName 
+        // 姣忔鍚姩搴旂敤绋嬪簭锛岄兘浼氶獙璇佸悕绉颁负OnlyRun鐨勪簰鏂ユ槸鍚﹀瓨鍦� 
+        protected override void OnStartup(StartupEventArgs e)
+        {
+            mutex = new System.Threading.Mutex(true, Application.Current.ToString());
+            if (mutex.WaitOne(0, false))
+            {
+                base.OnStartup(e);
+            }
+            else
+            {
+                this.Shutdown();
+            }
+        }
+
+        private void Application_Startup(object sender, StartupEventArgs e)
+        {
+            listener = new Listener();
+            listener.Start();
+        }
+    }
+}
diff --git a/SolidWorksListener/Listener.cs b/SolidWorksListener/Listener.cs
new file mode 100644
index 0000000..1719930
--- /dev/null
+++ b/SolidWorksListener/Listener.cs
@@ -0,0 +1,355 @@
+锘縰sing log4net;
+using SuperSocket.ClientEngine;
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Net;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Timers;
+using System.Windows;
+
+namespace SolidWorksListener
+{
+    public class Listener
+    {
+        private ILog log = LogManager.GetLogger("Listener");
+        private AsyncTcpSession client;
+
+        private long err_count;
+
+        private System.Timers.Timer socketTimer;
+        private System.Timers.Timer importTimer;
+        private System.Timers.Timer checkInTimer;
+
+        private volatile int is_open = int.MaxValue;
+
+        private int msgInterval = 5000;
+
+        #region 娑堟伅
+        public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
+
+        public void ShowMessageBox(string message, string title)
+        {
+            /*if (is_open == 0)
+            {
+                return;
+            }*/
+            is_open = 0;
+            int res;
+            WTSSendMessage(
+                WTS_CURRENT_SERVER_HANDLE,
+                WTSGetActiveConsoleSessionId(),
+                title, title.Length,
+                message, message.Length,
+                0, 0, out res, true);
+            is_open = res;
+        }
+
+        [DllImport("kernel32.dll", SetLastError = true)]
+        public static extern int WTSGetActiveConsoleSessionId();
+
+        [DllImport("wtsapi32.dll", SetLastError = true)]
+        public static extern bool WTSSendMessage(
+            IntPtr hServer,
+            int SessionId,
+            String pTitle,
+            int TitleLength,
+            String pMessage,
+            int MessageLength,
+            int Style,
+            int Timeout,
+            out int pResponse,
+            bool bWait);
+        #endregion
+
+        private void AlertMsg(string msg)
+        {
+            /// 鍐呯疆WPF鐨� 涓嶈兘鐢�
+            // alert.Open(msg);
+
+            /*try
+            {
+                // SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application.28");
+                var swApp = (SldWorks)System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application");
+                swApp.SendMsgToUser2(msg, (int)swMessageBoxIcon_e.swMbStop, (int)swMessageBoxBtn_e.swMbOk);
+                Marshal.ReleaseComObject(swApp);
+            }
+            catch (COMException ex)
+            {
+                log.Error("Attach Sw Failed.", ex);
+            }*/
+
+            // WinAPI_Interop.ShowServiceMessage(msg, "鎻愮ず");
+            // ShowMessageBox(msg, "鎻愮ず");
+            string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+            string alertPath = Path.GetFullPath(Path.Combine(exeDir,"..","Alert.exe"));
+            if (File.Exists(alertPath))
+            {
+                Process.Start(alertPath);
+            }
+            else
+            {
+                MessageBox.Show(msg, "鎻愮ず");
+            }
+
+            /// 鐢∕essageBox鐨� 涓嶈兘鐢�
+            /*if (swApp == null)
+            {
+                int res;
+                WTSSendMessage(
+                  WTS_CURRENT_SERVER_HANDLE,
+                  WTSGetActiveConsoleSessionId(),//鑾峰緱褰撳墠鏄剧ず鐨勬闈㈡墍鍦ㄧ殑SessionID
+                          "鎻愮ず", "鎻愮ず".Length,
+                  msg, msg.Length,
+                  0, 0, out res, false);
+            }
+            else
+            {
+                swApp.SendMsgToUser2(msg, (int)swMessageBoxIcon_e.swMbStop, (int)swMessageBoxBtn_e.swMbOk);
+            }*/
+
+            //
+
+            ///鍚姩exe鐨�
+            /*ProcessStartInfo psi = new ProcessStartInfo
+            {
+                FileName = "AlertWindow.exe",
+                UseShellExecute = false,
+                CreateNoWindow = true
+            };
+            Process process = Process.Start(psi);*/
+        }
+
+        public Listener()
+        {
+            client = new AsyncTcpSession();
+            client.Connected += Client_Connected;
+            client.Error += Client_Error;
+            client.Closed += Client_Closed;
+            client.DataReceived += Client_DataReceived;
+            log.Info("Service Started.");
+        }
+
+        public void Start()
+        {
+            InitSocketTimer();
+        }
+
+        public void Stop()
+        {
+            socketTimer?.Stop();
+            StopInterceptTimer();
+            // alert.DoClose();
+            // if (intercepter != null) intercepter.StopIntercept();
+        }
+
+        /// <summary>
+        /// 鍚姩Socket瀹氭椂鍣�
+        /// </summary>
+        public void InitSocketTimer()
+        {
+            log.Info("Starting Socket Timer...");
+            socketTimer = new System.Timers.Timer(msgInterval);
+            socketTimer.Elapsed += Timer_Elapsed;
+            socketTimer.Enabled = true;
+            socketTimer.Start();
+            log.Info("Started Socket Timer!");
+        }
+
+        /// <summary>
+        /// 鍚姩閲戣澏鎷︽埅浠诲姟
+        /// </summary>
+        public void StartInterceptTimer()
+        {
+            // if (intercepter == null) intercepter = new Intercepter(ListenImportHandle, ListenCheckInHandle);
+            if (importTimer == null)
+            {
+                importTimer = new System.Timers.Timer(500);
+                importTimer.Elapsed += ImportTimer_Elapsed;
+            }
+            importTimer.Start();
+            if (checkInTimer == null)
+            {
+                checkInTimer = new System.Timers.Timer(500);
+                checkInTimer.Elapsed += CheckInTimer_Elapsed;
+            }
+            checkInTimer.Start();
+        }
+
+        private void ImportTimer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            lock (importTimer)
+            {
+                ListenImportHandle();
+            }
+        }
+
+        private void CheckInTimer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            lock (checkInTimer)
+            {
+                ListenCheckInHandle();
+            }
+        }
+
+        /// <summary>
+        /// 鍋滄閲戣澏鎷︽埅浠诲姟
+        /// </summary>
+        private void StopInterceptTimer()
+        {
+            /*if (intercepter != null)
+            {
+                intercepter.StopIntercept();
+                intercepter = null;
+            }*/
+            importTimer?.Stop();
+            checkInTimer?.Stop();
+        }
+
+        /// <summary>
+        /// 鎻掍欢杩斿洖姝e父鏃剁殑澶勭悊
+        /// </summary>
+        private void HandleNormal()
+        {
+            err_count = 0;
+            StopInterceptTimer();
+            // alert.DoHide();
+        }
+
+        private bool IsSwRunning()
+        {
+            Process[] ps = Process.GetProcessesByName("SLDWORKS");
+            bool IsRunning = (ps != null && ps.Length > 0);
+            log.Debug($"Sw Is Running: {IsRunning}");
+            return IsRunning;
+        }
+
+        /// <summary>
+        /// 鎻掍欢杩斿洖寮傚父鏃剁殑澶勭悊
+        /// </summary>
+        private void HandleErr()
+        {
+            log.Debug($"err_count: {err_count}");
+            if (++err_count > 3)
+            {
+                if (IsSwRunning())
+                {
+                    // 濡傛灉solidworks鍚姩
+                    StartInterceptTimer();
+                    log.Debug("Ready to show Msg.");
+                    AlertMsg("璇峰惎鐢ㄦ彃浠跺苟鐧诲綍");
+                    err_count = 3;
+                }
+                else
+                {
+                    HandleNormal();
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 鎼滅储鏄惁鏈夊鍏ョ獥鍙o紝鏈夊氨涓�鐩存渶灏忓寲锛屽苟鎵ц瑙勫垯妫�鏌�
+        /// </summary>
+        /// <returns></returns>
+        private void ListenImportHandle()
+        {
+            IntPtr ptr = WindowIntPtrUtil.FindWindow(null, "Everything");//瀵煎叆鏂囨。
+            if (ptr == IntPtr.Zero)
+            {
+                return;
+            }
+            WindowIntPtrUtil.KillProcessByIntPtr(ptr);
+        }
+
+        /// <summary>
+        /// 鎼滅储鏄惁鏈夋鍏ョ獥鍙o紝鏈夊氨涓�鐩存渶灏忓寲锛屽苟鎵ц瑙勫垯妫�鏌�
+        /// </summary>
+        /// <returns></returns>
+        private void ListenCheckInHandle()
+        {
+            IntPtr ptr = WindowIntPtrUtil.FindWindow(null, "妫�鍏ユ枃妗�");
+            if (ptr == IntPtr.Zero)
+            {
+                return;
+            }
+            WindowIntPtrUtil.KillProcessByIntPtr(ptr);
+        }
+
+        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            socketTimer.Stop();
+            try
+            {
+                if (!client.IsConnected)
+                {
+                    client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5678));
+                }
+                else
+                {
+                    var msg = Encoding.Default.GetBytes("HeatBeat");
+                    client.Send(msg, 0, msg.Length);
+                }
+            }
+            catch (Exception ex)
+            {
+                HandleErr();
+            }
+            finally
+            {
+                socketTimer.Start();
+            }
+        }
+
+        /// <summary>
+        /// 鎺ユ敹鍒版秷鎭�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_DataReceived(object sender, DataEventArgs e)
+        {
+            byte flag = e.Data[0];
+            if (flag == 1)
+            {
+                HandleNormal();
+            }
+            else
+            {
+                log.Error("Plugin Return 0.");
+                HandleErr();
+            }
+        }
+
+        /// <summary>
+        /// 瀹㈡埛绔叧闂紝瑙嗕负寮傚父
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_Closed(object sender, EventArgs e)
+        {
+            HandleErr();
+        }
+
+        /// <summary>
+        /// 瀹㈡埛绔紓甯�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
+        {
+            HandleErr();
+        }
+
+        /// <summary>
+        /// 杩炴帴鍚庣殑鎿嶄綔
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Client_Connected(object sender, EventArgs e)
+        {
+
+        }
+    }
+}
diff --git a/SolidWorksListener/Properties/AssemblyInfo.cs b/SolidWorksListener/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9e5310a
--- /dev/null
+++ b/SolidWorksListener/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("SolidWorksListener")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SolidWorksListener")]
+[assembly: AssemblyCopyright("Copyright 漏  2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                     //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                     //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                              //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                              //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SolidWorksListener/Properties/Resources.Designer.cs b/SolidWorksListener/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..4e52da8
--- /dev/null
+++ b/SolidWorksListener/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace SolidWorksListener.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("SolidWorksListener.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;
+            }
+        }
+    }
+}
diff --git a/SolidWorksListener/Properties/Resources.resx b/SolidWorksListener/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/SolidWorksListener/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>
\ No newline at end of file
diff --git a/SolidWorksListener/Properties/Settings.Designer.cs b/SolidWorksListener/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..3400b86
--- /dev/null
+++ b/SolidWorksListener/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 SolidWorksListener.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;
+            }
+        }
+    }
+}
diff --git a/SolidWorksListener/Properties/Settings.settings b/SolidWorksListener/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/SolidWorksListener/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/SolidWorksListener/SolidWorksListener.csproj b/SolidWorksListener/SolidWorksListener.csproj
new file mode 100644
index 0000000..4fc1e4a
--- /dev/null
+++ b/SolidWorksListener/SolidWorksListener.csproj
@@ -0,0 +1,198 @@
+锘�<?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>{CB3551F6-0C4A-4537-9A04-1E40CD475479}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>SolidWorksListener</RootNamespace>
+    <AssemblyName>SolidWorksListener</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </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>..\PdmSw\bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\PdmSw\bin\x64\Debug\Listener\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\PdmSw\bin\x64\Release\Listener\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.ClientEngine, Version=0.10.0.0, Culture=neutral, PublicKeyToken=ee9af13f57f00acc, processorArchitecture=MSIL">
+      <HintPath>..\packages\SuperSocket.ClientEngine.Core.0.10.0\lib\net45\SuperSocket.ClientEngine.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Common, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>..\packages\SuperSocket.1.6.6.1\lib\net45\SuperSocket.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.Facility, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>..\packages\SuperSocket.1.6.6.1\lib\net45\SuperSocket.Facility.dll</HintPath>
+    </Reference>
+    <Reference Include="SuperSocket.SocketBase, Version=1.6.6.1, Culture=neutral, PublicKeyToken=6c80000676988ebb, processorArchitecture=MSIL">
+      <HintPath>..\packages\SuperSocket.1.6.6.1\lib\net45\SuperSocket.SocketBase.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Collections.Specialized, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Collections.Specialized.4.3.0\lib\net46\System.Collections.Specialized.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Net.NameResolution, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Net.NameResolution.4.3.0\lib\net46\System.Net.NameResolution.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Net.Security, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Net.Security.4.3.0\lib\net46\System.Net.Security.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
+      <Private>True</Private>
+      <Private>True</Private>
+    </Reference>
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="WindowUtil.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Listener.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="log4net.config">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/SolidWorksListener/WindowUtil.cs b/SolidWorksListener/WindowUtil.cs
new file mode 100644
index 0000000..1d7d7ef
--- /dev/null
+++ b/SolidWorksListener/WindowUtil.cs
@@ -0,0 +1,46 @@
+锘縰sing System;
+using System.Runtime.InteropServices;
+namespace SolidWorksListener
+{
+    public class WindowIntPtrUtil
+    {
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern IntPtr FindWindow(string className, string windowName);
+
+        [DllImport("user32.dll")]
+        public static extern IntPtr FindWindowByProcessId(int processId, int threadId);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern uint GetWindowThreadProcessId(IntPtr ptr, out uint processId);
+
+        /// <summary>
+        /// 鎿嶄綔绐楀彛 1鏄縺娲� 6鏄渶灏忓寲
+        /// </summary>
+        /// <param name="ptr"></param>
+        /// <param name="command">1鏄縺娲� 6鏄渶灏忓寲</param>
+        /// <returns></returns>
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern bool ShowWindow(IntPtr ptr, int command);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern bool SendMessage(IntPtr ptr, UInt32 Msg, IntPtr wParam, IntPtr lParam);
+
+        [DllImport("user32.dll", SetLastError = true)]
+        public static extern bool PostMessage(IntPtr ptr, UInt32 Msg, IntPtr wParam, IntPtr lParam);
+
+        public static void KillProcessByIntPtr(IntPtr ptr)
+        {
+            //GetWindowThreadProcessId(ptr, out uint processId);
+            //if (processId == 0) return;
+            //Process process = Process.GetProcessById((int)processId);
+            //process.Kill();
+            //process.WaitForExit();
+            CloseWindow(ptr);
+        }
+
+        public static void CloseWindow(IntPtr ptr)
+        {
+            SendMessage(ptr, (UInt32)0x0010, IntPtr.Zero, IntPtr.Zero);
+        }
+    }
+}
diff --git a/SolidWorksListener/log4net.config b/SolidWorksListener/log4net.config
new file mode 100644
index 0000000..8b8684b
--- /dev/null
+++ b/SolidWorksListener/log4net.config
@@ -0,0 +1,37 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<log4net>
+	<!-- 鎺у埗鍙版棩蹇楅厤缃� -->
+	<appender name="Console" type="log4net.Appender.ConsoleAppender">
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" />
+		</layout>
+	</appender>
+
+	<!-- 鏂囦欢瀛樺偍鏃ュ織閰嶇疆 -->
+	<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
+		<!-- 淇濆瓨鏂囦欢鐨勫悕绉� -->
+		<file value="./Log/" />
+		<appendToFile value="true" />
+		<rollingStyle value="Date" />
+		<datePattern value="'log_'yyyyMMdd'.log'"/>
+		<staticLogFileName value="false"/>
+
+		<!-- 鏂囦欢鐨勭紪鐮佹柟寮� -->
+		<param name="Encoding" value="UTF-8"/>
+		<!-- 姣忎釜鏂囦欢鐨勫ぇ灏� -->
+		<maximumFileSize value="100KB" />
+		<!-- 淇濆瓨鏂囦欢鏁伴噺 -->
+		<maxSizeRollBackups value="2" />
+		<!-- 鏃ュ織杈撳嚭鏍煎紡 -->
+		<layout type="log4net.Layout.PatternLayout">
+			<conversionPattern value="%date{ISO8601} [%logger]  %level  %class - %message%newline" />
+		</layout>
+	</appender>
+
+	<root>
+		<level value="DEBUG" />
+		<appender-ref ref="Console" />
+		<appender-ref ref="RollingFile" />
+	</root>
+</log4net>
\ No newline at end of file
diff --git a/SolidWorksListener/packages.config b/SolidWorksListener/packages.config
new file mode 100644
index 0000000..d4bc385
--- /dev/null
+++ b/SolidWorksListener/packages.config
@@ -0,0 +1,19 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="log4net" version="2.0.3" targetFramework="net472" />
+  <package id="SuperSocket" version="1.6.6.1" targetFramework="net472" />
+  <package id="SuperSocket.ClientEngine.Core" version="0.10.0" targetFramework="net472" />
+  <package id="System.Collections.Specialized" version="4.3.0" targetFramework="net472" />
+  <package id="System.IO" version="4.3.0" targetFramework="net472" />
+  <package id="System.Linq" version="4.3.0" targetFramework="net472" />
+  <package id="System.Net.NameResolution" version="4.3.0" targetFramework="net472" />
+  <package id="System.Net.Security" version="4.3.0" targetFramework="net472" />
+  <package id="System.Net.Sockets" version="4.3.0" targetFramework="net472" />
+  <package id="System.Runtime" version="4.3.0" targetFramework="net472" />
+  <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net472" />
+  <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net472" />
+  <package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net472" />
+</packages>
\ No newline at end of file
diff --git a/SolidWorksListenerAlert/App.config b/SolidWorksListenerAlert/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/SolidWorksListenerAlert/App.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/SolidWorksListenerAlert/App.xaml b/SolidWorksListenerAlert/App.xaml
new file mode 100644
index 0000000..d44d69c
--- /dev/null
+++ b/SolidWorksListenerAlert/App.xaml
@@ -0,0 +1,9 @@
+锘�<Application x:Class="SolidWorksListenerAlert.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:SolidWorksListenerAlert"
+             StartupUri="MainWindow.xaml">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>
diff --git a/SolidWorksListenerAlert/App.xaml.cs b/SolidWorksListenerAlert/App.xaml.cs
new file mode 100644
index 0000000..5d8c696
--- /dev/null
+++ b/SolidWorksListenerAlert/App.xaml.cs
@@ -0,0 +1,27 @@
+锘縰sing System.Windows;
+
+namespace SolidWorksListenerAlert
+{
+    /// <summary>
+    /// App.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class App : Application
+    {
+        private static System.Threading.Mutex mutex;
+        //绯荤粺鑳藉璇嗗埆鏈夊悕绉扮殑浜掓枼锛屽洜姝ゅ彲浠ヤ娇鐢ㄥ畠绂佹搴旂敤绋嬪簭鍚姩涓ゆ 
+        //绗簩涓弬鏁板彲浠ヨ缃负浜у搧鐨勫悕绉�:Application.ProductName 
+        // 姣忔鍚姩搴旂敤绋嬪簭锛岄兘浼氶獙璇佸悕绉颁负OnlyRun鐨勪簰鏂ユ槸鍚﹀瓨鍦� 
+        protected override void OnStartup(StartupEventArgs e)
+        {
+            mutex = new System.Threading.Mutex(true, Application.Current.ToString());
+            if (mutex.WaitOne(0, false))
+            {
+                base.OnStartup(e);
+            }
+            else
+            {
+                this.Shutdown();
+            }
+        }
+    }
+}
diff --git a/SolidWorksListenerAlert/MainWindow.xaml b/SolidWorksListenerAlert/MainWindow.xaml
new file mode 100644
index 0000000..54a4b0f
--- /dev/null
+++ b/SolidWorksListenerAlert/MainWindow.xaml
@@ -0,0 +1,18 @@
+锘�<Window x:Class="SolidWorksListenerAlert.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:SolidWorksListenerAlert"
+        mc:Ignorable="d"
+        Topmost="True"
+        ShowInTaskbar="False"
+        ResizeMode="NoResize"
+        WindowStartupLocation="CenterScreen"
+        WindowStyle="ToolWindow"
+        Title="鎻愮ず" Height="150" Width="200">
+    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
+        <Label Margin="0,0,0,20">璇峰惎鐢ㄦ彃浠跺苟鐧诲綍锛�</Label>
+        <Button Click="Button_Click" Padding="8">鎴戠煡閬撲簡</Button>
+    </StackPanel>
+</Window>
diff --git a/SolidWorksListenerAlert/MainWindow.xaml.cs b/SolidWorksListenerAlert/MainWindow.xaml.cs
new file mode 100644
index 0000000..167bab2
--- /dev/null
+++ b/SolidWorksListenerAlert/MainWindow.xaml.cs
@@ -0,0 +1,34 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace SolidWorksListenerAlert
+{
+    /// <summary>
+    /// MainWindow.xaml 鐨勪氦浜掗�昏緫
+    /// </summary>
+    public partial class MainWindow : Window
+    {
+        public MainWindow()
+        {
+            Icon = new DrawingImage();
+            InitializeComponent();
+        }
+
+        private void Button_Click(object sender, RoutedEventArgs e)
+        {
+            Close();
+        }
+    }
+}
diff --git a/SolidWorksListenerAlert/Properties/AssemblyInfo.cs b/SolidWorksListenerAlert/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7dfbc72
--- /dev/null
+++ b/SolidWorksListenerAlert/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+锘縰sing System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("SolidWorksListenerAlert")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SolidWorksListenerAlert")]
+[assembly: AssemblyCopyright("Copyright 漏  2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+//鑻ヨ寮�濮嬬敓鎴愬彲鏈湴鍖栫殑搴旂敤绋嬪簭锛岃璁剧疆
+//.csproj 鏂囦欢涓殑 <UICulture>CultureYouAreCodingWith</UICulture>
+//鍦� <PropertyGroup> 涓�備緥濡傦紝濡傛灉浣犱娇鐢ㄧ殑鏄編鍥借嫳璇��
+//浣跨敤鐨勬槸缇庡浗鑻辫锛岃灏� <UICulture> 璁剧疆涓� en-US銆�  鐒跺悗鍙栨秷
+//瀵逛互涓� NeutralResourceLanguage 鐗规�х殑娉ㄩ噴銆�  鏇存柊
+//浠ヤ笅琛屼腑鐨勨�渆n-US鈥濅互鍖归厤椤圭洰鏂囦欢涓殑 UICulture 璁剧疆銆�
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None, //涓婚鐗瑰畾璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                     //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                     //鎴栧簲鐢ㄧ▼搴忚祫婧愬瓧鍏镐腑鎵惧埌鏃朵娇鐢�)
+    ResourceDictionaryLocation.SourceAssembly //甯歌璧勬簮璇嶅吀鎵�澶勪綅缃�
+                                              //(鏈湪椤甸潰涓壘鍒拌祫婧愭椂浣跨敤锛�
+                                              //銆佸簲鐢ㄧ▼搴忔垨浠讳綍涓婚涓撶敤璧勬簮瀛楀吀涓壘鍒版椂浣跨敤)
+)]
+
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SolidWorksListenerAlert/Properties/Resources.Designer.cs b/SolidWorksListenerAlert/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..14a0bb6
--- /dev/null
+++ b/SolidWorksListenerAlert/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace SolidWorksListenerAlert.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("SolidWorksListenerAlert.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;
+            }
+        }
+    }
+}
diff --git a/SolidWorksListenerAlert/Properties/Resources.resx b/SolidWorksListenerAlert/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/SolidWorksListenerAlert/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>
\ No newline at end of file
diff --git a/SolidWorksListenerAlert/Properties/Settings.Designer.cs b/SolidWorksListenerAlert/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..a8fddad
--- /dev/null
+++ b/SolidWorksListenerAlert/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 SolidWorksListenerAlert.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;
+            }
+        }
+    }
+}
diff --git a/SolidWorksListenerAlert/Properties/Settings.settings b/SolidWorksListenerAlert/Properties/Settings.settings
new file mode 100644
index 0000000..033d7a5
--- /dev/null
+++ b/SolidWorksListenerAlert/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
\ No newline at end of file
diff --git a/SolidWorksListenerAlert/SolidWorksListenerAlert.csproj b/SolidWorksListenerAlert/SolidWorksListenerAlert.csproj
new file mode 100644
index 0000000..dc323a6
--- /dev/null
+++ b/SolidWorksListenerAlert/SolidWorksListenerAlert.csproj
@@ -0,0 +1,118 @@
+锘�<?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>{201D10C1-DC69-4B1A-B759-876E1B94A2BA}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>SolidWorksListenerAlert</RootNamespace>
+    <AssemblyName>Alert</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <WarningLevel>4</WarningLevel>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </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>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\PdmSw\bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\PdmSw\bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xaml">
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="WindowsBase" />
+    <Reference Include="PresentationCore" />
+    <Reference Include="PresentationFramework" />
+  </ItemGroup>
+  <ItemGroup>
+    <ApplicationDefinition Include="App.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </ApplicationDefinition>
+    <Page Include="MainWindow.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
+    <Compile Include="App.xaml.cs">
+      <DependentUpon>App.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="MainWindow.xaml.cs">
+      <DependentUpon>MainWindow.xaml</DependentUpon>
+      <SubType>Code</SubType>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/WpfUI/.vs/WpfUI.csproj.dtbcache.json b/WpfUI/.vs/WpfUI.csproj.dtbcache.json
index 6504198..2c980e7 100644
--- a/WpfUI/.vs/WpfUI.csproj.dtbcache.json
+++ b/WpfUI/.vs/WpfUI.csproj.dtbcache.json
@@ -1 +1 @@
-{"RootPath":"D:\\Workspace\\PdmSwPlugin2\\WpfUI","ProjectFileName":"WpfUI.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"AsyncAttacher.cs"},{"SourceFile":"Form1.cs"},{"SourceFile":"Form1.Designer.cs"},{"SourceFile":"Window1.xaml.cs"},{"SourceFile":"App.xaml.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\obj\\Debug\\Window1.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\obj\\Debug\\App.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\obj\\Debug\\WpfUI_Content.g.cs"}],"References":[{"Reference":"D:\\Workspace\\PdmSwPlugin2\\lib\\Interop.EModelView.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\lib\\log4net.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\IIS\\Microsoft Web Deploy V3\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\bin\\Debug\\PdmSwPlugin.Common.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\bin\\Debug\\PdmSwPlugin.Common.dll"},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\bin\\Debug\\PdmSwPlugin.Main.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\bin\\Debug\\PdmSwPlugin.Main.dll"},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.sldworks.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swconst.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swdocumentmgr.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swpublished.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\solidworkstools.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\PublicAssemblies\\System.Buffers.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.ComponentModel.DataAnnotations.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\PublicAssemblies\\System.Memory.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Numerics.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\PublicAssemblies\\System.Numerics.Vectors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\PublicAssemblies\\System.Runtime.CompilerServices.Unsafe.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\PublicAssemblies\\System.Threading.Tasks.Extensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\PublicAssemblies\\System.ValueTuple.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsFormsIntegration.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\bin\\Debug\\WpfUI.exe","OutputItemRelativePath":"WpfUI.exe"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
+{"RootPath":"D:\\Workspace\\PdmSwPlugin2\\WpfUI","ProjectFileName":"WpfUI.csproj","Configuration":"Debug|x64","FrameworkPath":"","Sources":[{"SourceFile":"AsyncAttacher.cs"},{"SourceFile":"Form1.cs"},{"SourceFile":"Form1.Designer.cs"},{"SourceFile":"Window1.xaml.cs"},{"SourceFile":"App.xaml.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\x64\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\obj\\x64\\Debug\\Window1.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\obj\\x64\\Debug\\App.g.cs"},{"SourceFile":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\obj\\x64\\Debug\\WpfUI_Content.g.cs"}],"References":[{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\DuEDrawingControl.1.0.2\\lib\\net461\\DuEDrawingControl.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\lib\\Interop.EModelView.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\lib\\log4net.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Bcl.AsyncInterfaces.7.0.0\\lib\\net462\\Microsoft.Bcl.AsyncInterfaces.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.7.0.0\\lib\\net462\\Microsoft.Extensions.DependencyInjection.Abstractions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.DependencyInjection.7.0.0\\lib\\net462\\Microsoft.Extensions.DependencyInjection.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.Http.7.0.0\\lib\\net462\\Microsoft.Extensions.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.Logging.Abstractions.7.0.0\\lib\\net462\\Microsoft.Extensions.Logging.Abstractions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.Logging.7.0.0\\lib\\net462\\Microsoft.Extensions.Logging.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.Options.7.0.0\\lib\\net462\\Microsoft.Extensions.Options.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Microsoft.Extensions.Primitives.7.0.0\\lib\\net462\\Microsoft.Extensions.Primitives.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\bin\\x64\\Debug\\PdmSwPlugin.Common.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Common\\bin\\x64\\Debug\\PdmSwPlugin.Common.dll"},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\bin\\x64\\Debug\\PdmSwPlugin.Main.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":"D:\\Workspace\\PdmSwPlugin2\\PdmSwPlugin.Main\\bin\\x64\\Debug\\PdmSwPlugin.Main.dll"},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.sldworks.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swconst.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swdocumentmgr.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\api\\redist\\SolidWorks.Interop.swpublished.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\solidworkstools.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Buffers.4.5.1\\lib\\net461\\System.Buffers.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.ComponentModel.DataAnnotations.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Diagnostics.DiagnosticSource.7.0.0\\lib\\net462\\System.Diagnostics.DiagnosticSource.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Memory.4.5.5\\lib\\net461\\System.Memory.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Numerics.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Numerics.Vectors.4.5.0\\lib\\net46\\System.Numerics.Vectors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Runtime.CompilerServices.Unsafe.6.0.0\\lib\\net461\\System.Runtime.CompilerServices.Unsafe.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Text.Encodings.Web.7.0.0\\lib\\net462\\System.Text.Encodings.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.Threading.Tasks.Extensions.4.5.4\\lib\\net461\\System.Threading.Tasks.Extensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\Workspace\\PdmSwPlugin2\\PdmSw\\packages\\System.ValueTuple.4.5.0\\lib\\net47\\System.ValueTuple.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Web.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsFormsIntegration.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\Workspace\\PdmSwPlugin2\\WpfUI\\bin\\x64\\Debug\\WpfUI.exe","OutputItemRelativePath":"WpfUI.exe"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/WpfUI/Window1.xaml.cs b/WpfUI/Window1.xaml.cs
index 208bd77..68f9cd9 100644
--- a/WpfUI/Window1.xaml.cs
+++ b/WpfUI/Window1.xaml.cs
@@ -24,8 +24,6 @@
             GlobalConfig = PluginSetting.Instance;
         }
 
-       
-
         private void Button_Click(object sender, RoutedEventArgs e)
         {
             if (SwApp != null)
@@ -41,7 +39,7 @@
                     mainControl = new MainControl(SwApp);
                     mainControl.Loaded += MainControl_Loaded;
                     stack.Children.Add(mainControl);
-                    
+
                 }
                 catch (COMException ex)
                 {
diff --git a/lib/SuperSocket.Common.XML b/lib/SuperSocket.Common.XML
new file mode 100644
index 0000000..1118eca
--- /dev/null
+++ b/lib/SuperSocket.Common.XML
@@ -0,0 +1,1346 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>SuperSocket.Common</name>
+    </assembly>
+    <members>
+        <member name="P:SuperSocket.Common.ArraySegmentEx`1.Array">
+            <summary>
+            Gets the array.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.ArraySegmentEx`1.Count">
+            <summary>
+            Gets the count.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.ArraySegmentEx`1.Offset">
+            <summary>
+            Gets the offset.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Common.ArraySegmentList`1">
+            <summary>
+            ArraySegmentList
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.ArraySegmentList`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.IndexOf(`0)">
+            <summary>
+            Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>.
+            </summary>
+            <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
+            <returns>
+            The index of <paramref name="item"/> if found in the list; otherwise, -1.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.Insert(System.Int32,`0)">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.RemoveAt(System.Int32)">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.Add(`0)">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.Clear">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.Contains(`0)">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.CopyTo(`0[],System.Int32)">
+            <summary>
+            Copies to.
+            </summary>
+            <param name="array">The array.</param>
+            <param name="arrayIndex">Index of the array.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.Remove(`0)">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.GetEnumerator">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            NotSupported
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.RemoveSegmentAt(System.Int32)">
+            <summary>
+            Removes the segment at.
+            </summary>
+            <param name="index">The index.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.AddSegment(`0[],System.Int32,System.Int32)">
+            <summary>
+            Adds the segment to the list.
+            </summary>
+            <param name="array">The array.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.AddSegment(`0[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Adds the segment to the list.
+            </summary>
+            <param name="array">The array.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.ClearSegements">
+            <summary>
+            Clears all the segements.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.ToArrayData">
+            <summary>
+            Read all data in this list to the array data.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.ToArrayData(System.Int32,System.Int32)">
+            <summary>
+            Read the data in specific range to the array data.
+            </summary>
+            <param name="startIndex">The start index.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.TrimEnd(System.Int32)">
+            <summary>
+            Trims the end.
+            </summary>
+            <param name="trimSize">Size of the trim.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.SearchLastSegment(SuperSocket.Common.SearchMarkState{`0})">
+            <summary>
+            Searches the last segment.
+            </summary>
+            <param name="state">The state.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.CopyTo(`0[])">
+            <summary>
+            Copies to.
+            </summary>
+            <param name="to">To.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList`1.CopyTo(`0[],System.Int32,System.Int32,System.Int32)">
+            <summary>
+            Copies to.
+            </summary>
+            <param name="to">To.</param>
+            <param name="srcIndex">Index of the SRC.</param>
+            <param name="toIndex">To index.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.Common.ArraySegmentList`1.Item(System.Int32)">
+            <summary>
+            Gets or sets the element at the specified index.
+            </summary>
+            <returns>
+            The element at the specified index.
+              </returns>
+              
+            <exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
+              </exception>
+              
+            <exception cref="T:System.NotSupportedException">
+            The property is set and the <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
+              </exception>
+        </member>
+        <member name="P:SuperSocket.Common.ArraySegmentList`1.Count">
+            <summary>
+            Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+            </summary>
+            <returns>
+            The number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+              </returns>
+        </member>
+        <member name="P:SuperSocket.Common.ArraySegmentList`1.IsReadOnly">
+            <summary>
+            Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
+            </summary>
+            <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only; otherwise, false.
+              </returns>
+        </member>
+        <member name="P:SuperSocket.Common.ArraySegmentList`1.SegmentCount">
+            <summary>
+            Gets the segment count.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Common.ArraySegmentList">
+            <summary>
+            ArraySegmentList
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList.Decode(System.Text.Encoding)">
+            <summary>
+            Decodes bytes to string by the specified encoding.
+            </summary>
+            <param name="encoding">The encoding.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList.Decode(System.Text.Encoding,System.Int32,System.Int32)">
+            <summary>
+            Decodes bytes to string by the specified encoding.
+            </summary>
+            <param name="encoding">The encoding.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ArraySegmentList.DecodeMask(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Decodes data by the mask.
+            </summary>
+            <param name="mask">The mask.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+        </member>
+        <member name="T:SuperSocket.Common.AssemblyUtil">
+            <summary>
+            Assembly Util Class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.CreateInstance``1(System.String)">
+            <summary>
+            Creates the instance from type name.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="type">The type.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.CreateInstance``1(System.String,System.Object[])">
+            <summary>
+            Creates the instance from type name and parameters.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="type">The type.</param>
+            <param name="parameters">The parameters.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.GetType(System.String,System.Boolean,System.Boolean)">
+            <summary>
+            Gets the type by the full name, also return matched generic type without checking generic type parameters in the name.
+            </summary>
+            <param name="fullTypeName">Full name of the type.</param>
+            <param name="throwOnError">if set to <c>true</c> [throw on error].</param>
+            <param name="ignoreCase">if set to <c>true</c> [ignore case].</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.GetImplementTypes``1(System.Reflection.Assembly)">
+            <summary>
+            Gets the implement types from assembly.
+            </summary>
+            <typeparam name="TBaseType">The type of the base type.</typeparam>
+            <param name="assembly">The assembly.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.GetImplementedObjectsByInterface``1(System.Reflection.Assembly)">
+            <summary>
+            Gets the implemented objects by interface.
+            </summary>
+            <typeparam name="TBaseInterface">The type of the base interface.</typeparam>
+            <param name="assembly">The assembly.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.GetImplementedObjectsByInterface``1(System.Reflection.Assembly,System.Type)">
+            <summary>
+            Gets the implemented objects by interface.
+            </summary>
+            <typeparam name="TBaseInterface">The type of the base interface.</typeparam>
+            <param name="assembly">The assembly.</param>
+            <param name="targetType">Type of the target.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.BinaryClone``1(``0)">
+            <summary>
+            Clone object in binary format.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="target">The target.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.CopyPropertiesTo``1(``0,``0)">
+            <summary>
+            Copies the properties of one object to another object.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="target">The target.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.CopyPropertiesTo``1(``0,System.Predicate{System.Reflection.PropertyInfo},``0)">
+            <summary>
+            Copies the properties of one object to another object.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="predict">The properties predict.</param>
+            <param name="target">The target.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.GetAssembliesFromString(System.String)">
+            <summary>
+            Gets the assemblies from string.
+            </summary>
+            <param name="assemblyDef">The assembly def.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.AssemblyUtil.GetAssembliesFromStrings(System.String[])">
+            <summary>
+            Gets the assemblies from strings.
+            </summary>
+            <param name="assemblies">The assemblies.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.BinaryUtil">
+            <summary>
+            Binary util class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.IndexOf``1(System.Collections.Generic.IList{``0},``0,System.Int32,System.Int32)">
+            <summary>
+            Search target from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="target">The target.</param>
+            <param name="pos">The pos.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},``0[],System.Int32@)">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="mark">The mark.</param>
+            <param name="parsedLength">Length of the parsed.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},``0[])">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="mark">The mark.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0[])">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="mark">The mark.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0[],System.Int32@)">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="mark">The mark.</param>
+            <param name="parsedLength">Length of the parsed.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0[],System.Int32)">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="mark">The mark.</param>
+            <param name="matched">The matched.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0[],System.Int32,System.Int32@)">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="mark">The mark.</param>
+            <param name="matched">The matched.</param>
+            <param name="parsedLength">Length of the parsed.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,SuperSocket.Common.SearchMarkState{``0},System.Int32@)">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="searchState">State of the search.</param>
+            <param name="parsedLength">Length of the parsed.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.SearchMark``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,SuperSocket.Common.SearchMarkState{``0})">
+            <summary>
+            Searches the mark from source.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="searchState">State of the search.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.StartsWith``1(System.Collections.Generic.IList{``0},``0[])">
+            <summary>
+            Startses the with.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="mark">The mark.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.StartsWith``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0[])">
+            <summary>
+            Startses the with.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="mark">The mark.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.EndsWith``1(System.Collections.Generic.IList{``0},``0[])">
+            <summary>
+            Endses the with.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="mark">The mark.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.EndsWith``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32,``0[])">
+            <summary>
+            Endses the with.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="mark">The mark.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.BinaryUtil.CloneRange``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32)">
+            <summary>
+            Clones the elements in the specific range.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="source">The source.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.BufferManager">
+            <summary>
+            This class creates a single large buffer which can be divided up and assigned to SocketAsyncEventArgs objects for use
+            with each socket I/O operation.  This enables bufffers to be easily reused and gaurds against fragmenting heap memory.
+            
+            The operations exposed on the BufferManager class are not thread safe.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.BufferManager.#ctor(System.Int32,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.BufferManager"/> class.
+            </summary>
+            <param name="totalBytes">The total bytes.</param>
+            <param name="bufferSize">Size of the buffer.</param>
+        </member>
+        <member name="M:SuperSocket.Common.BufferManager.InitBuffer">
+            <summary>
+            Allocates buffer space used by the buffer pool
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.BufferManager.SetBuffer(System.Net.Sockets.SocketAsyncEventArgs)">
+            <summary>
+            Assigns a buffer from the buffer pool to the specified SocketAsyncEventArgs object
+            </summary>
+            <returns>true if the buffer was successfully set, else false</returns>
+        </member>
+        <member name="M:SuperSocket.Common.BufferManager.FreeBuffer(System.Net.Sockets.SocketAsyncEventArgs)">
+            <summary>
+            Removes the buffer from a SocketAsyncEventArg object.  This frees the buffer back to the 
+            buffer pool
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Common.ConfigurationElementBase">
+            <summary>
+            ConfigurationElementBase
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.ConfigurationElementBase"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.#ctor(System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.ConfigurationElementBase"/> class.
+            </summary>
+            <param name="nameRequired">if set to <c>true</c> [name required].</param>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.DeserializeElement(System.Xml.XmlReader,System.Boolean)">
+            <summary>
+            Reads XML from the configuration file.
+            </summary>
+            <param name="reader">The <see cref="T:System.Xml.XmlReader"/> that reads from the configuration file.</param>
+            <param name="serializeCollectionKey">true to serialize only the collection key properties; otherwise, false.</param>
+            <exception cref="T:System.Configuration.ConfigurationErrorsException">The element to read is locked.- or -An attribute of the current node is not recognized.- or -The lock status of the current node cannot be determined.  </exception>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.OnDeserializeUnrecognizedAttribute(System.String,System.String)">
+            <summary>
+            Gets a value indicating whether an unknown attribute is encountered during deserialization.
+            </summary>
+            <param name="name">The name of the unrecognized attribute.</param>
+            <param name="value">The value of the unrecognized attribute.</param>
+            <returns>
+            true when an unknown attribute is encountered while deserializing; otherwise, false.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.Unmerge(System.Configuration.ConfigurationElement,System.Configuration.ConfigurationElement,System.Configuration.ConfigurationSaveMode)">
+            <summary>
+            Modifies the <see cref="T:System.Configuration.ConfigurationElement" /> object to remove all values that should not be saved.
+            </summary>
+            <param name="sourceElement">A <see cref="T:System.Configuration.ConfigurationElement" /> at the current level containing a merged view of the properties.</param>
+            <param name="parentElement">The parent <see cref="T:System.Configuration.ConfigurationElement" />, or null if this is the top level.</param>
+            <param name="saveMode">A <see cref="T:System.Configuration.ConfigurationSaveMode" /> that determines which property values to include.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.SerializeElement(System.Xml.XmlWriter,System.Boolean)">
+            <summary>
+            Writes the contents of this configuration element to the configuration file when implemented in a derived class.
+            </summary>
+            <param name="writer">The <see cref="T:System.Xml.XmlWriter" /> that writes to the configuration file.</param>
+            <param name="serializeCollectionKey">true to serialize only the collection key properties; otherwise, false.</param>
+            <returns>
+            true if any data was actually serialized; otherwise, false.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationElementBase.OnDeserializeUnrecognizedElement(System.String,System.Xml.XmlReader)">
+            <summary>
+            Gets a value indicating whether an unknown element is encountered during deserialization.
+            </summary>
+            <param name="elementName">The name of the unknown subelement.</param>
+            <param name="reader">The <see cref="T:System.Xml.XmlReader"/> being used for deserialization.</param>
+            <returns>
+            true when an unknown element is encountered while deserializing; otherwise, false.
+            </returns>
+            <exception cref="T:System.Configuration.ConfigurationErrorsException">The element identified by <paramref name="elementName"/> is locked.- or -One or more of the element's attributes is locked.- or -<paramref name="elementName"/> is unrecognized, or the element has an unrecognized attribute.- or -The element has a Boolean attribute with an invalid value.- or -An attempt was made to deserialize a property more than once.- or -An attempt was made to deserialize a property that is not a valid member of the element.- or -The element cannot contain a CDATA or text element.</exception>
+        </member>
+        <member name="P:SuperSocket.Common.ConfigurationElementBase.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.ConfigurationElementBase.Options">
+            <summary>
+            Gets the options.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.ConfigurationElementBase.OptionElements">
+            <summary>
+            Gets the option elements.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Common.ConfigurationExtension">
+            <summary>
+            Configuration extension class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.GetValue(System.Collections.Specialized.NameValueCollection,System.String)">
+            <summary>
+            Gets the value from namevalue collection by key.
+            </summary>
+            <param name="collection">The collection.</param>
+            <param name="key">The key.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.GetValue(System.Collections.Specialized.NameValueCollection,System.String,System.String)">
+            <summary>
+            Gets the value from namevalue collection by key.
+            </summary>
+            <param name="collection">The collection.</param>
+            <param name="key">The key.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.Deserialize``1(``0,System.Xml.XmlReader)">
+            <summary>
+            Deserializes the specified configuration section.
+            </summary>
+            <typeparam name="TElement">The type of the element.</typeparam>
+            <param name="section">The section.</param>
+            <param name="reader">The reader.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.DeserializeChildConfig``1(System.String)">
+            <summary>
+            Deserializes the child configuration.
+            </summary>
+            <typeparam name="TConfig">The type of the configuration.</typeparam>
+            <param name="childConfig">The child configuration string.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.GetChildConfig``1(System.Collections.Specialized.NameValueCollection,System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childElements">The child elements.</param>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.GetConfigSource(System.Configuration.ConfigurationElement)">
+            <summary>
+            Gets the config source path.
+            </summary>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.LoadFrom(System.Configuration.ConfigurationElement,System.Object)">
+            <summary>
+            Loads configuration element's node information from a model.
+            </summary>
+            <param name="configElement">The config element.</param>
+            <param name="source">The source.</param>
+            <exception cref="T:System.Exception">Cannot find expected property 'Item' from the type 'ConfigurationElement'.</exception>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.GetCurrentConfiguration(System.Configuration.ConfigurationElement)">
+            <summary>
+            Gets the current configuration of the configuration element.
+            </summary>
+            <returns>The current configuration.</returns>
+            <param name="configElement">Configuration element.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ConfigurationExtension.ResetConfiguration(System.AppDomain,System.String)">
+            <summary>
+            Reset application's configuration to a another config file
+            </summary>
+            <param name="appDomain">the assosiated AppDomain</param>
+            <param name="configFilePath">the config file path want to reset to</param>
+        </member>
+        <member name="T:SuperSocket.Common.DictionaryExtension">
+            <summary>
+            Extension class for IDictionary
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.DictionaryExtension.GetValue``1(System.Collections.Generic.IDictionary{System.Object,System.Object},System.Object)">
+            <summary>
+            Gets the value by key.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="dictionary">The dictionary.</param>
+            <param name="key">The key.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.DictionaryExtension.GetValue``1(System.Collections.Generic.IDictionary{System.Object,System.Object},System.Object,``0)">
+            <summary>
+            Gets the value by key and default value.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="dictionary">The dictionary.</param>
+            <param name="key">The key.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.ErrorEventArgs">
+            <summary>
+            EventArgs for error and exception
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.ErrorEventArgs.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.ErrorEventArgs"/> class.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ErrorEventArgs.#ctor(System.Exception)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.ErrorEventArgs"/> class.
+            </summary>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="P:SuperSocket.Common.ErrorEventArgs.Exception">
+            <summary>
+            Gets the exception.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Common.GenericConfigurationElementCollectionBase`2">
+            <summary>
+            GenericConfigurationElementCollectionBase
+            </summary>
+            <typeparam name="TConfigElement">The type of the config element.</typeparam>
+            <typeparam name="TConfigInterface">The type of the config interface.</typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.GenericConfigurationElementCollectionBase`2.CreateNewElement">
+            <summary>
+            When overridden in a derived class, creates a new <see cref="T:System.Configuration.ConfigurationElement"/>.
+            </summary>
+            <returns>
+            A new <see cref="T:System.Configuration.ConfigurationElement"/>.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.Common.GenericConfigurationElementCollectionBase`2.GetElementKey(System.Configuration.ConfigurationElement)">
+            <summary>
+            Gets the element key for a specified configuration element when overridden in a derived class.
+            </summary>
+            <param name="element">The <see cref="T:System.Configuration.ConfigurationElement"/> to return the key for.</param>
+            <returns>
+            An <see cref="T:System.Object"/> that acts as the key for the specified <see cref="T:System.Configuration.ConfigurationElement"/>.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.Common.GenericConfigurationElementCollectionBase`2.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the collection.
+            </summary>
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
+            </returns>
+        </member>
+        <member name="P:SuperSocket.Common.GenericConfigurationElementCollectionBase`2.Item(System.Int32)">
+            <summary>
+            Gets or sets a property, attribute, or child element of this configuration element.
+            </summary>
+            <returns>The specified property, attribute, or child element</returns>
+        </member>
+        <member name="T:SuperSocket.Common.GenericConfigurationElementCollection`2">
+            <summary>
+            GenericConfigurationElementCollection
+            </summary>
+            <typeparam name="TConfigElement">The type of the config element.</typeparam>
+            <typeparam name="TConfigInterface">The type of the config interface.</typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.GenericConfigurationElementCollection`2.GetElementKey(System.Configuration.ConfigurationElement)">
+            <summary>
+            Gets the element key.
+            </summary>
+            <param name="element">The element.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.Platform">
+            <summary>
+            This class is designed for detect platform attribute in runtime
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.Platform.SupportSocketIOControlByCodeEnum">
+            <summary>
+            Gets a value indicating whether [support socket IO control by code enum].
+            </summary>
+            <value>
+            	<c>true</c> if [support socket IO control by code enum]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.Platform.IsMono">
+            <summary>
+            Gets a value indicating whether this instance is mono.
+            </summary>
+            <value>
+              <c>true</c> if this instance is mono; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Common.SearchMarkState`1">
+            <summary>
+            SearchMarkState
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.SearchMarkState`1.#ctor(`0[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.SearchMarkState`1"/> class.
+            </summary>
+            <param name="mark">The mark.</param>
+        </member>
+        <member name="P:SuperSocket.Common.SearchMarkState`1.Mark">
+            <summary>
+            Gets the mark.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.SearchMarkState`1.Matched">
+            <summary>
+            Gets or sets whether matched already.
+            </summary>
+            <value>
+            The matched.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Common.SendingQueue">
+            <summary>
+            SendingQueue
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.#ctor(System.ArraySegment{System.Byte}[],System.Int32,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.SendingQueue"/> class.
+            </summary>
+            <param name="globalQueue">The global queue.</param>
+            <param name="offset">The offset.</param>
+            <param name="capacity">The capacity.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Enqueue(System.ArraySegment{System.Byte},System.UInt16)">
+            <summary>
+            Enqueues the specified item.
+            </summary>
+            <param name="item">The item.</param>
+            <param name="trackID">The track ID.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Enqueue(System.Collections.Generic.IList{System.ArraySegment{System.Byte}},System.UInt16)">
+            <summary>
+            Enqueues the specified items.
+            </summary>
+            <param name="items">The items.</param>
+            <param name="trackID">The track ID.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.StopEnqueue">
+            <summary>
+            Stops the enqueue, and then wait all current excueting enqueu threads exit.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.StartEnqueue">
+            <summary>
+            Starts to allow enqueue.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.IndexOf(System.ArraySegment{System.Byte})">
+            <summary>
+            Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>.
+            </summary>
+            <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
+            <returns>
+            The index of <paramref name="item"/> if found in the list; otherwise, -1.
+            </returns>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Insert(System.Int32,System.ArraySegment{System.Byte})">
+            <summary>
+            Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index.
+            </summary>
+            <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.</param>
+            <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.</param>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.RemoveAt(System.Int32)">
+            <summary>
+            Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index.
+            </summary>
+            <param name="index">The zero-based index of the item to remove.</param>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Add(System.ArraySegment{System.Byte})">
+            <summary>
+            Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+            </summary>
+            <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Clear">
+            <summary>
+            Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+            </summary>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Contains(System.ArraySegment{System.Byte})">
+            <summary>
+            Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value.
+            </summary>
+            <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
+            <returns>
+            true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false.
+            </returns>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.CopyTo(System.ArraySegment{System.Byte}[],System.Int32)">
+            <summary>
+            Copies to.
+            </summary>
+            <param name="array">The array.</param>
+            <param name="arrayIndex">Index of the array.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.Remove(System.ArraySegment{System.Byte})">
+            <summary>
+            Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+            </summary>
+            <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
+            <returns>
+            true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>.
+            </returns>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the collection.
+            </summary>
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
+            </returns>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.System#Collections#IEnumerable#GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through a collection.
+            </summary>
+            <returns>
+            An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
+            </returns>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueue.InternalTrim(System.Int32)">
+            <summary>
+            Trim the internal segments at the begining by the binary data size.
+            </summary>
+            <param name="offset">The binary data size should be trimed at the begining.</param>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.TrackID">
+            <summary>
+            Gets the track ID.
+            </summary>
+            <value>
+            The track ID.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.GlobalQueue">
+            <summary>
+            Gets the global queue.
+            </summary>
+            <value>
+            The global queue.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.Offset">
+            <summary>
+            Gets the offset.
+            </summary>
+            <value>
+            The offset.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.Capacity">
+            <summary>
+            Gets the capacity.
+            </summary>
+            <value>
+            The capacity.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.Count">
+            <summary>
+            Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1" />.
+            </summary>
+            <returns>The number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1" />.</returns>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.Position">
+            <summary>
+            Gets or sets the position.
+            </summary>
+            <value>
+            The position.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.Item(System.Int32)">
+            <summary>
+            Gets or sets the element at the specified index.
+            </summary>
+            <param name="index">The index.</param>
+            <returns></returns>
+            <exception cref="T:System.NotSupportedException"></exception>
+        </member>
+        <member name="P:SuperSocket.Common.SendingQueue.IsReadOnly">
+            <summary>
+            Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.
+            </summary>
+            <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns>
+        </member>
+        <member name="T:SuperSocket.Common.SendingQueueSourceCreator">
+            <summary>
+            SendingQueueSourceCreator
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Common.ISmartPoolSourceCreator`1">
+            <summary>
+            ISmartPoolSourceCreator
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.ISmartPoolSourceCreator`1.Create(System.Int32,`0[]@)">
+            <summary>
+            Creates the specified size.
+            </summary>
+            <param name="size">The size.</param>
+            <param name="poolItems">The pool items.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueueSourceCreator.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.SendingQueueSourceCreator"/> class.
+            </summary>
+            <param name="sendingQueueSize">Size of the sending queue.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SendingQueueSourceCreator.Create(System.Int32,SuperSocket.Common.SendingQueue[]@)">
+            <summary>
+            Creates the specified size.
+            </summary>
+            <param name="size">The size.</param>
+            <param name="poolItems">The pool items.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.IPoolInfo">
+            <summary>
+            The pool information class
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.IPoolInfo.MinPoolSize">
+            <summary>
+            Gets the min size of the pool.
+            </summary>
+            <value>
+            The min size of the pool.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.IPoolInfo.MaxPoolSize">
+            <summary>
+            Gets the max size of the pool.
+            </summary>
+            <value>
+            The max size of the pool.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.IPoolInfo.AvialableItemsCount">
+            <summary>
+            Gets the avialable items count.
+            </summary>
+            <value>
+            The avialable items count.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.IPoolInfo.TotalItemsCount">
+            <summary>
+            Gets the total items count, include items in the pool and outside the pool.
+            </summary>
+            <value>
+            The total items count.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Common.ISmartPool`1">
+            <summary>
+            The basic interface of smart pool
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.ISmartPool`1.Initialize(System.Int32,System.Int32,SuperSocket.Common.ISmartPoolSourceCreator{`0})">
+            <summary>
+            Initializes the specified min pool size.
+            </summary>
+            <param name="minPoolSize">The min size of the pool.</param>
+            <param name="maxPoolSize">The max size of the pool.</param>
+            <param name="sourceCreator">The source creator.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.ISmartPool`1.Push(`0)">
+            <summary>
+            Pushes the specified item into the pool.
+            </summary>
+            <param name="item">The item.</param>
+        </member>
+        <member name="M:SuperSocket.Common.ISmartPool`1.TryGet(`0@)">
+            <summary>
+            Tries to get one item from the pool.
+            </summary>
+            <param name="item">The item.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.ISmartPoolSource">
+            <summary>
+            ISmartPoolSource
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Common.ISmartPoolSource.Count">
+            <summary>
+            Gets the count.
+            </summary>
+            <value>
+            The count.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Common.SmartPoolSource">
+            <summary>
+            SmartPoolSource
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.SmartPoolSource.#ctor(System.Object,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Common.SmartPoolSource"/> class.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="itemsCount">The items count.</param>
+        </member>
+        <member name="P:SuperSocket.Common.SmartPoolSource.Source">
+            <summary>
+            Gets the source.
+            </summary>
+            <value>
+            The source.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SmartPoolSource.Count">
+            <summary>
+            Gets the count.
+            </summary>
+            <value>
+            The count.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Common.SmartPool`1">
+            <summary>
+            The smart pool
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="M:SuperSocket.Common.SmartPool`1.Initialize(System.Int32,System.Int32,SuperSocket.Common.ISmartPoolSourceCreator{`0})">
+            <summary>
+            Initializes the specified min and max pool size.
+            </summary>
+            <param name="minPoolSize">The min size of the pool.</param>
+            <param name="maxPoolSize">The max size of the pool.</param>
+            <param name="sourceCreator">The source creator.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SmartPool`1.Push(`0)">
+            <summary>
+            Pushes the specified item into the pool.
+            </summary>
+            <param name="item">The item.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SmartPool`1.TryGet(`0@)">
+            <summary>
+            Tries to get one item from the pool.
+            </summary>
+            <param name="item">The item.</param>
+            <returns></returns>
+            <exception cref="T:System.NotImplementedException"></exception>
+        </member>
+        <member name="P:SuperSocket.Common.SmartPool`1.MinPoolSize">
+            <summary>
+            Gets the size of the min pool.
+            </summary>
+            <value>
+            The size of the min pool.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SmartPool`1.MaxPoolSize">
+            <summary>
+            Gets the size of the max pool.
+            </summary>
+            <value>
+            The size of the max pool.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SmartPool`1.AvialableItemsCount">
+            <summary>
+            Gets the avialable items count.
+            </summary>
+            <value>
+            The avialable items count.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Common.SmartPool`1.TotalItemsCount">
+            <summary>
+            Gets the total items count, include items in the pool and outside the pool.
+            </summary>
+            <value>
+            The total items count.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Common.SocketEx">
+            <summary>
+            Socket extension class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.SocketEx.SafeClose(System.Net.Sockets.Socket)">
+            <summary>
+            Close the socket safely.
+            </summary>
+            <param name="socket">The socket.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SocketEx.SendData(System.Net.Sockets.Socket,System.Byte[])">
+            <summary>
+            Sends the data.
+            </summary>
+            <param name="client">The client.</param>
+            <param name="data">The data.</param>
+        </member>
+        <member name="M:SuperSocket.Common.SocketEx.SendData(System.Net.Sockets.Socket,System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Sends the data.
+            </summary>
+            <param name="client">The client.</param>
+            <param name="data">The data.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+        </member>
+        <member name="T:SuperSocket.Common.StringExtension">
+            <summary>
+            String extension class
+            </summary>
+            <summary>
+            String extension
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToInt32(System.String)">
+            <summary>
+            Convert string to int32.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToInt32(System.String,System.Int32)">
+            <summary>
+            Convert string to int32.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToLong(System.String)">
+            <summary>
+            Convert string to long.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToLong(System.String,System.Int64)">
+            <summary>
+            Convert string to long.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToShort(System.String)">
+            <summary>
+            Convert string to short.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToShort(System.String,System.Int16)">
+            <summary>
+            Convert string to short.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToDecimal(System.String)">
+            <summary>
+            Convert string to decimal.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToDecimal(System.String,System.Decimal)">
+            <summary>
+            Convert string to decimal.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToDateTime(System.String)">
+            <summary>
+            Convert string to date time.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToDateTime(System.String,System.DateTime)">
+            <summary>
+            Convert string to date time.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToBoolean(System.String)">
+            <summary>
+            Convert string to boolean.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.ToBoolean(System.String,System.Boolean)">
+            <summary>
+            Convert string tp boolean.
+            </summary>
+            <param name="source">The source.</param>
+            <param name="defaultValue">if set to <c>true</c> [default value].</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Common.StringExtension.TryParseEnum``1(System.String,System.Boolean,``0@)">
+            <summary>
+            Tries parse string to enum.
+            </summary>
+            <typeparam name="T">the enum type</typeparam>
+            <param name="value">The value.</param>
+            <param name="ignoreCase">if set to <c>true</c> [ignore case].</param>
+            <param name="enumValue">The enum value.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Common.TheadPoolEx">
+            <summary>
+            Thread pool extension class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Common.TheadPoolEx.ResetThreadPool(System.Nullable{System.Int32},System.Nullable{System.Int32},System.Nullable{System.Int32},System.Nullable{System.Int32})">
+            <summary>
+            Resets the thread pool.
+            </summary>
+            <param name="maxWorkingThreads">The max working threads.</param>
+            <param name="maxCompletionPortThreads">The max completion port threads.</param>
+            <param name="minWorkingThreads">The min working threads.</param>
+            <param name="minCompletionPortThreads">The min completion port threads.</param>
+            <returns></returns>
+        </member>
+    </members>
+</doc>
diff --git a/lib/SuperSocket.Common.dll b/lib/SuperSocket.Common.dll
new file mode 100644
index 0000000..0fea68f
--- /dev/null
+++ b/lib/SuperSocket.Common.dll
Binary files differ
diff --git a/lib/SuperSocket.Facility.XML b/lib/SuperSocket.Facility.XML
new file mode 100644
index 0000000..0f66d5b
--- /dev/null
+++ b/lib/SuperSocket.Facility.XML
@@ -0,0 +1,601 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>SuperSocket.Facility</name>
+    </assembly>
+    <members>
+        <member name="T:SuperSocket.Facility.PolicyServer.FlashPolicyServer">
+            <summary>
+            Flash policy AppServer
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.PolicyServer.PolicyServer">
+            <summary>
+            PolicyServer base class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyServer.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.PolicyServer.PolicyServer"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyServer.Setup(SuperSocket.SocketBase.Config.IRootConfig,SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Setups the specified root config.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyServer.SetupPolicyResponse(System.Byte[])">
+            <summary>
+            Setups the policy response.
+            </summary>
+            <param name="policyFileData">The policy file data.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyServer.GetPolicyFileResponse(System.Net.IPEndPoint)">
+            <summary>
+            Gets the policy file response.
+            </summary>
+            <param name="clientEndPoint">The client end point.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyServer.ProcessRequest(SuperSocket.Facility.PolicyServer.PolicySession,System.Byte[])">
+            <summary>
+            Processes the request.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="data">The data.</param>
+        </member>
+        <member name="P:SuperSocket.Facility.PolicyServer.PolicyServer.PolicyResponse">
+            <summary>
+            Gets the policy response.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.FlashPolicyServer.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.PolicyServer.FlashPolicyServer"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.FlashPolicyServer.SetupPolicyResponse(System.Byte[])">
+            <summary>
+            Setups the policy response.
+            </summary>
+            <param name="policyFileData">The policy file data.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Facility.PolicyServer.PolicyReceiveFilter">
+            <summary>
+            PolicyReceiveFilter
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1">
+            <summary>
+            FixedSizeReceiveFilter
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="F:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.NullRequestInfo">
+            <summary>
+            Null RequestInfo
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1"/> class.
+            </summary>
+            <param name="size">The size.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters the specified session.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Filters the buffer after the server receive the enough size of data.
+            </summary>
+            <param name="buffer">The buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.Reset">
+            <summary>
+            Resets this instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.Size">
+            <summary>
+            Gets the size of the fixed size Receive filter.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.LeftBufferSize">
+            <summary>
+            Gets the size of the rest buffer.
+            </summary>
+            <value>
+            The size of the rest buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.NextReceiveFilter">
+            <summary>
+            Gets the next Receive filter.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.SuperSocket#SocketBase#Protocol#IOffsetAdapter#OffsetDelta">
+            <summary>
+            Gets the offset delta.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.FixedSizeReceiveFilter`1.State">
+            <summary>
+            Gets the filter state.
+            </summary>
+            <value>
+            The filter state.
+            </value>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyReceiveFilter.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.PolicyServer.PolicyReceiveFilter"/> class.
+            </summary>
+            <param name="size">The size.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyReceiveFilter.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Filters the buffer after the server receive the enough size of data.
+            </summary>
+            <param name="buffer">The buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyReceiveFilterFactory.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.PolicyServer.PolicyReceiveFilterFactory"/> class.
+            </summary>
+            <param name="fixRequestSize">Size of the fix request.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.PolicyReceiveFilterFactory.CreateFilter(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession,System.Net.IPEndPoint)">
+            <summary>
+            Creates the filter.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="appSession">The app session.</param>
+            <param name="remoteEndPoint">The remote end point.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.Facility.PolicyServer.PolicyReceiveFilterFactory.FixRequestSize">
+            <summary>
+            Gets the size of the fix request.
+            </summary>
+            <value>
+            The size of the fix request.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Facility.PolicyServer.PolicySession">
+            <summary>
+            PolicySession
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.PolicyServer.SilverlightPolicyServer">
+            <summary>
+            Silverlight policy AppServer
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.SilverlightPolicyServer.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.PolicyServer.SilverlightPolicyServer"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.PolicyServer.SilverlightPolicyServer.ProcessRequest(SuperSocket.Facility.PolicyServer.PolicySession,System.Byte[])">
+            <summary>
+            Processes the request.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="data">The data.</param>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1">
+            <summary>
+            ReceiveFilter for the protocol that each request has bengin and end mark
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="F:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1.NullRequestInfo">
+            <summary>
+            Null request info
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1.#ctor(System.Byte[],System.Byte[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1"/> class.
+            </summary>
+            <param name="beginMark">The begin mark.</param>
+            <param name="endMark">The end mark.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters the specified session.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Processes the matched request.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter`1.Reset">
+            <summary>
+            Resets this instance.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1">
+            <summary>
+            This Receive filter is designed for this kind protocol:
+            each request has fixed count part which splited by a char(byte)
+            for instance, request is defined like this "#12122#23343#4545456565#343435446#",
+            because this request is splited into many parts by 5 '#', we can create a Receive filter by CountSpliterRequestFilter((byte)'#', 5)
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="F:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.NullRequestInfo">
+            <summary>
+            Null request info instance
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.#ctor(System.Byte,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1"/> class.
+            </summary>
+            <param name="spliter">The spliter.</param>
+            <param name="spliterCount">The spliter count.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters the specified session.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Processes the matched request.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.Reset">
+            <summary>
+            Resets this instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.LeftBufferSize">
+            <summary>
+            Gets the size of the rest buffer.
+            </summary>
+            <value>
+            The size of the rest buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.NextReceiveFilter">
+            <summary>
+            Gets the next Receive filter.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.OffsetDelta">
+            <summary>
+            Gets the offset delta relative original receiving offset which will be used for next round receiving.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter`1.State">
+            <summary>
+            Gets the filter state.
+            </summary>
+            <value>
+            The filter state.
+            </value>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter">
+            <summary>
+            This Receive filter is designed for this kind protocol:
+            each request has fixed count part which splited by a char(byte)
+            for instance, request is defined like this "#12122#23343#4545456565#343435446#",
+            because this request is splited into many parts by 5 '#', we can create a Receive filter by CountSpliterRequestFilter((byte)'#', 5)
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter.#ctor(System.Byte,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter"/> class.
+            </summary>
+            <param name="spliter">The spliter.</param>
+            <param name="spliterCount">The spliter count.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter.#ctor(System.Byte,System.Int32,System.Text.Encoding)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter"/> class.
+            </summary>
+            <param name="spliter">The spliter.</param>
+            <param name="spliterCount">The spliter count.</param>
+            <param name="encoding">The encoding.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter.#ctor(System.Byte,System.Int32,System.Text.Encoding,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter"/> class.
+            </summary>
+            <param name="spliter">The spliter.</param>
+            <param name="spliterCount">The spliter count.</param>
+            <param name="encoding">The encoding.</param>
+            <param name="keyIndex">Index of the key.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilter.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Processes the matched request.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory`2">
+            <summary>
+            ReceiveFilterFactory for CountSpliterReceiveFilter
+            </summary>
+            <typeparam name="TRequestFilter">The type of the Receive filter.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory`2.CreateFilter(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession,System.Net.IPEndPoint)">
+            <summary>
+            Creates the filter.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="appSession">The app session.</param>
+            <param name="remoteEndPoint">The remote end point.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory`1">
+            <summary>
+            ReceiveFilterFactory for CountSpliterReceiveFilter
+            </summary>
+            <typeparam name="TRequestFilter">The type of the Receive filter.</typeparam>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory">
+            <summary>
+            receiveFilterFactory for CountSpliterRequestFilter
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory.#ctor(System.Byte,System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory"/> class.
+            </summary>
+            <param name="spliter">The spliter.</param>
+            <param name="count">The count.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.CountSpliterReceiveFilterFactory.CreateFilter(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession,System.Net.IPEndPoint)">
+            <summary>
+            Creates the filter.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="appSession">The app session.</param>
+            <param name="remoteEndPoint">The remote end point.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1">
+            <summary>
+            FixedHeaderReceiveFilter,
+            it is the Receive filter base for the protocol which define fixed length header and the header contains the request body length,
+            you can implement your own Receive filter for this kind protocol easily by inheriting this class 
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1.#ctor(System.Int32)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1"/> class.
+            </summary>
+            <param name="headerSize">Size of the header.</param>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters the specified session.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Processes the fix size request.
+            </summary>
+            <param name="buffer">The buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1.GetBodyLengthFromHeader(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Gets the body length from header.
+            </summary>
+            <param name="header">The header.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1.ResolveRequestInfo(System.ArraySegment{System.Byte},System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Resolves the request data.
+            </summary>
+            <param name="header">The header.</param>
+            <param name="bodyBuffer">The body buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter`1.Reset">
+            <summary>
+            Resets this instance.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1">
+            <summary>
+            HttpReceiveFilterBase
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="F:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.NewLine">
+            <summary>
+            Http header terminator
+            </summary>
+        </member>
+        <member name="F:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.m_HeaderParsed">
+            <summary>
+            indicate whether the header has been parsed
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters the specified session.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.FilterRequestBody(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters the request body.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest data size.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Resolves the specified data.
+            </summary>
+            <param name="data">The data.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.FilterRequestHeader(System.Collections.Specialized.NameValueCollection)">
+            <summary>
+            Filters the request header.
+            </summary>
+            <param name="header">The header.</param>
+            <returns>
+            return the parsed request info from header; if the request has body, this method should return null
+            </returns>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.Reset">
+            <summary>
+            Resets this instance to inital state.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.HttpReceiveFilterBase`1.HeaderItems">
+            <summary>
+            Gets the header items.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.IHttpRequestInfo">
+            <summary>
+            IHttpRequestInfo
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.IHttpRequestInfo.Header">
+            <summary>
+            Gets the http header.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.HttpRequestInfoBase">
+            <summary>
+            HttpRequestInfoBase
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpRequestInfoBase.#ctor(System.String,System.Collections.Specialized.NameValueCollection)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.HttpRequestInfoBase"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="header">The header.</param>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.HttpRequestInfoBase.Key">
+            <summary>
+            Gets the key of this request.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.HttpRequestInfoBase.Header">
+            <summary>
+            Gets the http header.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.HttpRequestInfoBase`1">
+            <summary>
+            HttpRequestInfoBase
+            </summary>
+            <typeparam name="TRequestBody">The type of the request body.</typeparam>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.HttpRequestInfoBase`1.#ctor(System.String,System.Collections.Specialized.NameValueCollection,`0)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.Facility.Protocol.HttpRequestInfoBase`1"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="header">The header.</param>
+            <param name="body">The body.</param>
+        </member>
+        <member name="P:SuperSocket.Facility.Protocol.HttpRequestInfoBase`1.Body">
+            <summary>
+            Gets the body.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.Facility.Protocol.MimeHeaderHelper">
+            <summary>
+            MimeHeader Helper class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.Facility.Protocol.MimeHeaderHelper.ParseHttpHeader(System.String,System.Collections.Specialized.NameValueCollection)">
+            <summary>
+            Parses the HTTP header.
+            </summary>
+            <param name="headerData">The header data.</param>
+            <param name="header">The header.</param>
+        </member>
+    </members>
+</doc>
diff --git a/lib/SuperSocket.Facility.dll b/lib/SuperSocket.Facility.dll
new file mode 100644
index 0000000..d92108e
--- /dev/null
+++ b/lib/SuperSocket.Facility.dll
Binary files differ
diff --git a/lib/SuperSocket.SocketBase.XML b/lib/SuperSocket.SocketBase.XML
new file mode 100644
index 0000000..32883d9
--- /dev/null
+++ b/lib/SuperSocket.SocketBase.XML
@@ -0,0 +1,5405 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>SuperSocket.SocketBase</name>
+    </assembly>
+    <members>
+        <member name="T:SuperSocket.SocketBase.AppServerBase`2">
+            <summary>
+            AppServer base class
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IAppServer`2">
+            <summary>
+            The interface for AppServer
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IAppServer`1">
+            <summary>
+            The interface for AppServer
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IAppServer">
+            <summary>
+            The interface for AppServer
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IWorkItem">
+            <summary>
+            An item can be started and stopped
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IWorkItemBase">
+            <summary>
+            An item can be started and stopped
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IStatusInfoSource">
+            <summary>
+            StatusInfo source interface
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IStatusInfoSource.GetServerStatusMetadata">
+            <summary>
+            Gets the server status metadata.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IStatusInfoSource.CollectServerStatus(SuperSocket.SocketBase.StatusInfoCollection)">
+            <summary>
+            Collects the bootstrap status.
+            </summary>
+            <param name="bootstrapStatus">The bootstrap status.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ISystemEndPoint">
+            <summary>
+            The interface for endpoint who can send/receive system message with each other
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISystemEndPoint.TransferSystemMessage(System.String,System.Object)">
+            <summary>
+            Transfers the system message.
+            </summary>
+            <param name="messageType">Type of the message.</param>
+            <param name="messageData">The message data.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IWorkItemBase.Start">
+            <summary>
+            Starts this server instance.
+            </summary>
+            <returns>return true if start successfull, else false</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IWorkItemBase.ReportPotentialConfigChange(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Reports the potential configuration change.
+            </summary>
+            <param name="config">The server config which may be changed.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IWorkItemBase.Stop">
+            <summary>
+            Stops this server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IWorkItemBase.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IWorkItemBase.Config">
+            <summary>
+            Gets the server's config.
+            </summary>
+            <value>
+            The server's config.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IWorkItemBase.SessionCount">
+            <summary>
+            Gets the total session count.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IWorkItem.Setup(SuperSocket.SocketBase.IBootstrap,SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Provider.ProviderFactoryInfo[])">
+            <summary>
+            Setups with the specified root config.
+            </summary>
+            <param name="bootstrap">The bootstrap.</param>
+            <param name="config">The socket server instance config.</param>
+            <param name="factories">The factories.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IWorkItem.State">
+            <summary>
+            Gets the current state of the work item.
+            </summary>
+            <value>
+            The state.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ILoggerProvider">
+            <summary>
+            The interface for who provides logger
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ILoggerProvider.Logger">
+            <summary>
+            Gets the logger assosiated with this object.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppServer.CreateAppSession(SuperSocket.SocketBase.ISocketSession)">
+            <summary>
+            Creates the app session.
+            </summary>
+            <param name="socketSession">The socket session.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppServer.RegisterSession(SuperSocket.SocketBase.IAppSession)">
+            <summary>
+            Registers the new created app session into the appserver's session container.
+            </summary>
+            <param name="session">The session.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppServer.GetSessionByID(System.String)">
+            <summary>
+            Gets the app session by ID.
+            </summary>
+            <param name="sessionID">The session ID.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppServer.ResetSessionSecurity(SuperSocket.SocketBase.IAppSession,System.Security.Authentication.SslProtocols)">
+            <summary>
+            Resets the session's security protocol.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="security">The security protocol.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppServer.StartedTime">
+            <summary>
+            Gets the started time.
+            </summary>
+            <value>
+            The started time.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppServer.Listeners">
+            <summary>
+            Gets or sets the listeners.
+            </summary>
+            <value>
+            The listeners.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppServer.ReceiveFilterFactory">
+            <summary>
+            Gets the Receive filter factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppServer.Certificate">
+            <summary>
+            Gets the certificate of current server.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppServer.BasicSecurity">
+            <summary>
+            Gets the transfer layer security protocol.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppServer.LogFactory">
+            <summary>
+            Gets the log factory.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppServer`1.GetSessions(System.Func{`0,System.Boolean})">
+            <summary>
+            Gets the matched sessions from sessions snapshot.
+            </summary>
+            <param name="critera">The prediction critera.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppServer`1.GetAllSessions">
+            <summary>
+            Gets all sessions in sessions snapshot.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="E:SuperSocket.SocketBase.IAppServer`1.NewSessionConnected">
+            <summary>
+            Gets/sets the new session connected event handler.
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketBase.IAppServer`1.SessionClosed">
+            <summary>
+            Gets/sets the session closed event handler.
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketBase.IAppServer`2.NewRequestReceived">
+            <summary>
+            Occurs when [request comming].
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IRawDataProcessor`1">
+            <summary>
+            The raw data processor
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+        </member>
+        <member name="E:SuperSocket.SocketBase.IRawDataProcessor`1.RawDataReceived">
+            <summary>
+            Gets or sets the raw binary data received event handler.
+            TAppSession: session
+            byte[]: receive buffer
+            int: receive buffer offset
+            int: receive lenght
+            bool: whether process the received data further
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IRequestHandler`1">
+            <summary>
+            The interface for handler of session request
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IRequestHandler`1.ExecuteCommand(SuperSocket.SocketBase.IAppSession,`0)">
+            <summary>
+            Executes the command.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ISocketServerAccessor">
+            <summary>
+            SocketServer Accessor interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketServerAccessor.SocketServer">
+            <summary>
+            Gets the socket server.
+            </summary>
+            <value>
+            The socket server.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IRemoteCertificateValidator">
+            <summary>
+            The basic interface for RemoteCertificateValidator
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IRemoteCertificateValidator.Validate(SuperSocket.SocketBase.IAppSession,System.Object,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Cryptography.X509Certificates.X509Chain,System.Net.Security.SslPolicyErrors)">
+            <summary>
+            Validates the remote certificate
+            </summary>
+            <param name="session">The session.</param>
+            <param name="sender">The sender.</param>
+            <param name="certificate">The certificate.</param>
+            <param name="chain">The chain.</param>
+            <param name="sslPolicyErrors">The SSL policy errors.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IActiveConnector">
+            <summary>
+            The inerface to connect the remote endpoint actively
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IActiveConnector.ActiveConnect(System.Net.EndPoint)">
+            <summary>
+            Connect the target endpoint actively.
+            </summary>
+            <param name="targetEndPoint">The target end point.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IActiveConnector.ActiveConnect(System.Net.EndPoint,System.Net.EndPoint)">
+            <summary>
+            Connect the target endpoint actively.
+            </summary>
+            <param name="targetEndPoint">The target end point.</param>
+            <param name="localEndPoint">The local end point.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.RegisterConfigHandler``1(SuperSocket.SocketBase.Config.IServerConfig,System.String,System.Func{``0,System.Boolean})">
+            <summary>
+            Registers the configuration option value handler, it is used for reading configuration value and reload it after the configuration is changed;
+            </summary>
+            <typeparam name="TConfigOption">The type of the configuration option.</typeparam>
+            <param name="config">The server configuration.</param>
+            <param name="name">The changed config option's name.</param>
+            <param name="handler">The handler.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.RegisterConfigHandler(SuperSocket.SocketBase.Config.IServerConfig,System.String,System.Func{System.String,System.Boolean})">
+            <summary>
+            Registers the configuration option value handler, it is used for reading configuration value and reload it after the configuration is changed;
+            </summary>
+            <param name="config">The server configuration.</param>
+            <param name="name">The changed config option name.</param>
+            <param name="handler">The handler.</param>
+        </member>
+        <member name="F:SuperSocket.SocketBase.AppServerBase`2.NullAppSession">
+            <summary>
+            Null appSession instance
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.AppServerBase`2.m_StateCode">
+            <summary>
+            the current state's code
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServerBase`2"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.#ctor(SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{`1})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServerBase`2"/> class.
+            </summary>
+            <param name="receiveFilterFactory">The Receive filter factory.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetCommandFilterAttributes(System.Type)">
+            <summary>
+            Gets the filter attributes.
+            </summary>
+            <param name="type">The type.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SetupCommands(System.Collections.Generic.Dictionary{System.String,SuperSocket.SocketBase.Command.ICommand{`0,`1}})">
+            <summary>
+            Setups the command into command dictionary
+            </summary>
+            <param name="discoveredCommands">The discovered commands.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Setup(SuperSocket.SocketBase.Config.IRootConfig,SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Setups the specified root config.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Setup(System.Int32)">
+            <summary>
+            Setups with the specified port.
+            </summary>
+            <param name="port">The port.</param>
+            <returns>return setup result</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Setup(SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.ISocketServerFactory,SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{`1},SuperSocket.SocketBase.Logging.ILogFactory,System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.IConnectionFilter},System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.Command.ICommandLoader{SuperSocket.SocketBase.Command.ICommand{`0,`1}}})">
+            <summary>
+            Setups with the specified config.
+            </summary>
+            <param name="config">The server config.</param>
+            <param name="socketServerFactory">The socket server factory.</param>
+            <param name="receiveFilterFactory">The receive filter factory.</param>
+            <param name="logFactory">The log factory.</param>
+            <param name="connectionFilters">The connection filters.</param>
+            <param name="commandLoaders">The command loaders.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Setup(SuperSocket.SocketBase.Config.IRootConfig,SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.ISocketServerFactory,SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{`1},SuperSocket.SocketBase.Logging.ILogFactory,System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.IConnectionFilter},System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.Command.ICommandLoader{SuperSocket.SocketBase.Command.ICommand{`0,`1}}})">
+            <summary>
+            Setups the specified root config, this method used for programming setup
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="config">The server config.</param>
+            <param name="socketServerFactory">The socket server factory.</param>
+            <param name="receiveFilterFactory">The Receive filter factory.</param>
+            <param name="logFactory">The log factory.</param>
+            <param name="connectionFilters">The connection filters.</param>
+            <param name="commandLoaders">The command loaders.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Setup(System.String,System.Int32,SuperSocket.SocketBase.ISocketServerFactory,SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{`1},SuperSocket.SocketBase.Logging.ILogFactory,System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.IConnectionFilter},System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.Command.ICommandLoader{SuperSocket.SocketBase.Command.ICommand{`0,`1}}})">
+            <summary>
+            Setups with the specified ip and port.
+            </summary>
+            <param name="ip">The ip.</param>
+            <param name="port">The port.</param>
+            <param name="socketServerFactory">The socket server factory.</param>
+            <param name="receiveFilterFactory">The Receive filter factory.</param>
+            <param name="logFactory">The log factory.</param>
+            <param name="connectionFilters">The connection filters.</param>
+            <param name="commandLoaders">The command loaders.</param>
+            <returns>return setup result</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IWorkItem#Setup(SuperSocket.SocketBase.IBootstrap,SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Provider.ProviderFactoryInfo[])">
+            <summary>
+            Setups the specified root config.
+            </summary>
+            <param name="bootstrap">The bootstrap.</param>
+            <param name="config">The socket server instance config.</param>
+            <param name="factories">The factories.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SetupCommandLoaders(System.Collections.Generic.List{SuperSocket.SocketBase.Command.ICommandLoader{SuperSocket.SocketBase.Command.ICommand{`0,`1}}})">
+            <summary>
+            Setups the command loaders.
+            </summary>
+            <param name="commandLoaders">The command loaders.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.CreateLogger(System.String)">
+            <summary>
+            Creates the logger for the AppServer.
+            </summary>
+            <param name="loggerName">Name of the logger.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SetupSecurity(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Setups the security option of socket communications.
+            </summary>
+            <param name="config">The config of the server instance.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetCertificate(SuperSocket.SocketBase.Config.ICertificateConfig)">
+            <summary>
+            Gets the certificate from server configuguration.
+            </summary>
+            <param name="certificate">The certificate config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.ValidateClientCertificate(`0,System.Object,System.Security.Cryptography.X509Certificates.X509Certificate,System.Security.Cryptography.X509Certificates.X509Chain,System.Net.Security.SslPolicyErrors)">
+            <summary>
+            Validates the client certificate. This method is only used if the certificate configuration attribute "clientCertificateRequired" is true.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="sender">The sender.</param>
+            <param name="certificate">The certificate.</param>
+            <param name="chain">The chain.</param>
+            <param name="sslPolicyErrors">The SSL policy errors.</param>
+            <returns>return the validation result</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SetupSocketServer">
+            <summary>
+            Setups the socket server.instance
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SetupListeners(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Setups the listeners base on server configuration
+            </summary>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Start">
+            <summary>
+            Starts this server instance.
+            </summary>
+            <returns>
+            return true if start successfull, else false
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnStartup">
+            <summary>
+            Called when [startup].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnStarted">
+            <summary>
+            Called when [started].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnStopped">
+            <summary>
+            Called when [stopped].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Stop">
+            <summary>
+            Stops this server instance.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetCommandByName(System.String)">
+            <summary>
+            Gets command by command name.
+            </summary>
+            <param name="commandName">Name of the command.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnRawDataReceived(SuperSocket.SocketBase.IAppSession,System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Called when [raw data received].
+            </summary>
+            <param name="session">The session.</param>
+            <param name="buffer">The buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.ExecuteCommand(`0,`1)">
+            <summary>
+            Executes the command.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.ExecuteCommand(SuperSocket.SocketBase.IAppSession,`1)">
+            <summary>
+            Executes the command for the session.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IRequestHandler{TRequestInfo}#ExecuteCommand(SuperSocket.SocketBase.IAppSession,`1)">
+            <summary>
+            Executes the command.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.ExecuteConnectionFilters(System.Net.IPEndPoint)">
+            <summary>
+            Executes the connection filters.
+            </summary>
+            <param name="remoteAddress">The remote address.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IAppServer#CreateAppSession(SuperSocket.SocketBase.ISocketSession)">
+            <summary>
+            Creates the app session.
+            </summary>
+            <param name="socketSession">The socket session.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.CreateAppSession(SuperSocket.SocketBase.ISocketSession)">
+            <summary>
+            create a new TAppSession instance, you can override it to create the session instance in your own way
+            </summary>
+            <param name="socketSession">the socket session.</param>
+            <returns>the new created session instance</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IAppServer#RegisterSession(SuperSocket.SocketBase.IAppSession)">
+            <summary>
+            Registers the new created app session into the appserver's session container.
+            </summary>
+            <param name="session">The session.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.RegisterSession(System.String,`0)">
+            <summary>
+            Registers the session into session container.
+            </summary>
+            <param name="sessionID">The session ID.</param>
+            <param name="appSession">The app session.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnNewSessionConnected(`0)">
+            <summary>
+            Called when [new session connected].
+            </summary>
+            <param name="session">The session.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.ResetSessionSecurity(SuperSocket.SocketBase.IAppSession,System.Security.Authentication.SslProtocols)">
+            <summary>
+            Resets the session's security protocol.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="security">The security protocol.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnSocketSessionClosed(SuperSocket.SocketBase.ISocketSession,SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Called when [socket session closed].
+            </summary>
+            <param name="session">The socket session.</param>
+            <param name="reason">The reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnSessionClosed(`0,SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Called when [session closed].
+            </summary>
+            <param name="session">The appSession.</param>
+            <param name="reason">The reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetSessionByID(System.String)">
+            <summary>
+            Gets the app session by ID.
+            </summary>
+            <param name="sessionID">The session ID.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IAppServer#GetSessionByID(System.String)">
+            <summary>
+            Gets the app session by ID.
+            </summary>
+            <param name="sessionID"></param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetSessions(System.Func{`0,System.Boolean})">
+            <summary>
+            Gets the matched sessions from sessions snapshot.
+            </summary>
+            <param name="critera">The prediction critera.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetAllSessions">
+            <summary>
+            Gets all sessions in sessions snapshot.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.GetFilePath(System.String)">
+            <summary>
+            Gets the physical file path by the relative file path,
+            search both in the appserver's root and in the supersocket root dir if the isolation level has been set other than 'None'.
+            </summary>
+            <param name="relativeFilePath">The relative file path.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IActiveConnector#ActiveConnect(System.Net.EndPoint,System.Net.EndPoint)">
+            <summary>
+            Connect the remote endpoint actively.
+            </summary>
+            <param name="targetEndPoint">The target end point.</param>
+            <param name="localEndPoint">The local end point.</param>
+            <returns></returns>
+            <exception cref="T:System.Exception">This server cannot support active connect.</exception>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IActiveConnector#ActiveConnect(System.Net.EndPoint)">
+            <summary>
+            Connect the remote endpoint actively.
+            </summary>
+            <param name="targetEndPoint">The target end point.</param>
+            <returns></returns>
+            <exception cref="T:System.Exception">This server cannot support active connect.</exception>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#ISystemEndPoint#TransferSystemMessage(System.String,System.Object)">
+            <summary>
+            Transfers the system message
+            </summary>
+            <param name="messageType">Type of the message.</param>
+            <param name="messageData">The message data.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnSystemMessageReceived(System.String,System.Object)">
+            <summary>
+            Called when [system message received].
+            </summary>
+            <param name="messageType">Type of the message.</param>
+            <param name="messageData">The message data.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.UpdateServerStatus(SuperSocket.SocketBase.StatusInfoCollection)">
+            <summary>
+            Updates the summary of the server.
+            </summary>
+            <param name="serverStatus">The server status.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.OnServerStatusCollected(SuperSocket.SocketBase.StatusInfoCollection,SuperSocket.SocketBase.StatusInfoCollection)">
+            <summary>
+            Called when [server status collected].
+            </summary>
+            <param name="bootstrapStatus">The bootstrapStatus status.</param>
+            <param name="serverStatus">The server status.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServerBase`2.Dispose">
+            <summary>
+            Releases unmanaged and - optionally - managed resources
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.Config">
+            <summary>
+            Gets the server's config.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.State">
+            <summary>
+            Gets the current state of the work item.
+            </summary>
+            <value>
+            The state.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.Certificate">
+            <summary>
+            Gets the certificate of current server.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.ReceiveFilterFactory">
+            <summary>
+            Gets or sets the receive filter factory.
+            </summary>
+            <value>
+            The receive filter factory.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IAppServer#ReceiveFilterFactory">
+            <summary>
+            Gets the Receive filter factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.BasicSecurity">
+            <summary>
+            Gets the basic transfer layer security protocol.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.RootConfig">
+            <summary>
+            Gets the root config.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.Logger">
+            <summary>
+            Gets the logger assosiated with this object.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.Bootstrap">
+            <summary>
+            Gets the bootstrap of this appServer instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.TotalHandledRequests">
+            <summary>
+            Gets the total handled requests number.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.Listeners">
+            <summary>
+            Gets or sets the listeners inforamtion.
+            </summary>
+            <value>
+            The listeners.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.StartedTime">
+            <summary>
+            Gets the started time of this server instance.
+            </summary>
+            <value>
+            The started time.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.LogFactory">
+            <summary>
+            Gets or sets the log factory.
+            </summary>
+            <value>
+            The log factory.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.TextEncoding">
+            <summary>
+            Gets the default text encoding.
+            </summary>
+            <value>
+            The text encoding.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.Name">
+            <summary>
+            Gets the name of the server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#ISocketServerAccessor#SocketServer">
+            <summary>
+            Gets the socket server.
+            </summary>
+            <value>
+            The socket server.
+            </value>
+        </member>
+        <member name="E:SuperSocket.SocketBase.AppServerBase`2.SuperSocket#SocketBase#IRawDataProcessor{TAppSession}#RawDataReceived">
+            <summary>
+            Gets or sets the raw binary data received event handler.
+            TAppSession: session
+            byte[]: receive buffer
+            int: receive buffer offset
+            int: receive lenght
+            bool: whether process the received data further
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketBase.AppServerBase`2.NewRequestReceived">
+            <summary>
+            Occurs when a full request item received.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.ConnectionFilters">
+            <summary>
+            Gets or sets the server's connection filter
+            </summary>
+            <value>
+            The server's connection filters
+            </value>
+        </member>
+        <member name="E:SuperSocket.SocketBase.AppServerBase`2.NewSessionConnected">
+            <summary>
+            The action which will be executed after a new session connect
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketBase.AppServerBase`2.SessionClosed">
+            <summary>
+            Gets/sets the session closed event handler.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServerBase`2.SessionCount">
+            <summary>
+            Gets the total session count.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Async">
+            <summary>
+            Async extension class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action)">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="taskOption">The task option.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action,System.Action{System.Exception})">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="exceptionHandler">The exception handler.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action,System.Threading.Tasks.TaskCreationOptions,System.Action{System.Exception})">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="taskOption">The task option.</param>
+            <param name="exceptionHandler">The exception handler.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action{System.Object},System.Object)">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="state">The state.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action{System.Object},System.Object,System.Threading.Tasks.TaskCreationOptions)">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="state">The state.</param>
+            <param name="taskOption">The task option.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action{System.Object},System.Object,System.Action{System.Exception})">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="state">The state.</param>
+            <param name="exceptionHandler">The exception handler.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Async.AsyncRun(SuperSocket.SocketBase.ILoggerProvider,System.Action{System.Object},System.Object,System.Threading.Tasks.TaskCreationOptions,System.Action{System.Exception})">
+            <summary>
+            Runs the specified task.
+            </summary>
+            <param name="logProvider">The log provider.</param>
+            <param name="task">The task.</param>
+            <param name="state">The state.</param>
+            <param name="taskOption">The task option.</param>
+            <param name="exceptionHandler">The exception handler.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.CommandExecutingContext">
+            <summary>
+            Command Executing Context
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.CommandExecutingContext.Initialize(SuperSocket.SocketBase.IAppSession,SuperSocket.SocketBase.Protocol.IRequestInfo,SuperSocket.SocketBase.Command.ICommand)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.CommandExecutingContext"/> class.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+            <param name="command">The command.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.CommandExecutingContext.Session">
+            <summary>
+            Gets the session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.CommandExecutingContext.RequestInfo">
+            <summary>
+            Gets the request info.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.CommandExecutingContext.CurrentCommand">
+            <summary>
+            Gets the current command.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.CommandExecutingContext.Exception">
+            <summary>
+            Gets the exception.
+            </summary>
+            <value>
+            The exception.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.CommandExecutingContext.ExceptionHandled">
+            <summary>
+            Gets a value indicating whether [exception handled].
+            </summary>
+            <value>
+              <c>true</c> if [exception handled]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.CommandExecutingContext.Cancel">
+            <summary>
+            Gets or sets a value indicating whether this command executing is cancelled.
+            </summary>
+            <value>
+              <c>true</c> if cancel; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.CommandLoaderBase`1">
+            <summary>
+            CommandLoader base class
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.ICommandLoader`1">
+            <summary>
+            Command loader's interface
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.ICommandLoader">
+            <summary>
+            the empty basic interface for command loader
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ICommandLoader`1.Initialize(SuperSocket.SocketBase.Config.IRootConfig,SuperSocket.SocketBase.IAppServer)">
+            <summary>
+            Initializes the command loader by the root config and the server instance.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="appServer">The app server.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ICommandLoader`1.TryLoadCommands(System.Collections.Generic.IEnumerable{`0}@)">
+            <summary>
+            Tries to load commands.
+            </summary>
+            <param name="commands">The commands.</param>
+            <returns></returns>
+        </member>
+        <member name="E:SuperSocket.SocketBase.Command.ICommandLoader`1.Updated">
+            <summary>
+            Occurs when [updated].
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketBase.Command.ICommandLoader`1.Error">
+            <summary>
+            Occurs when [error].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandLoaderBase`1.Initialize(SuperSocket.SocketBase.Config.IRootConfig,SuperSocket.SocketBase.IAppServer)">
+            <summary>
+            Initializes the command loader by the root config and appserver instance.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="appServer">The app server.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandLoaderBase`1.TryLoadCommands(System.Collections.Generic.IEnumerable{`0}@)">
+            <summary>
+            Tries to load commands.
+            </summary>
+            <param name="commands">The commands.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandLoaderBase`1.OnUpdated(System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.Command.CommandUpdateInfo{`0}})">
+            <summary>
+            Called when [updated].
+            </summary>
+            <param name="commands">The commands.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandLoaderBase`1.OnError(System.String)">
+            <summary>
+            Called when [error].
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandLoaderBase`1.OnError(System.Exception)">
+            <summary>
+            Called when [error].
+            </summary>
+            <param name="e">The e.</param>
+        </member>
+        <member name="E:SuperSocket.SocketBase.Command.CommandLoaderBase`1.Updated">
+            <summary>
+            Occurs when [updated].
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketBase.Command.CommandLoaderBase`1.Error">
+            <summary>
+            Occurs when [error].
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.CommandUpdateEventArgs`1">
+            <summary>
+            CommandUpdateEventArgs
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandUpdateEventArgs`1.#ctor(System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.Command.CommandUpdateInfo{`0}})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Command.CommandUpdateEventArgs`1"/> class.
+            </summary>
+            <param name="commands">The commands.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Command.CommandUpdateEventArgs`1.Commands">
+            <summary>
+            Gets the commands updated.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.ICommandFilterProvider">
+            <summary>
+            The basic interface for CommandFilter
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ICommandFilterProvider.GetFilters">
+            <summary>
+            Gets the filters which assosiated with this command object.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.CommandAssemblyConfig">
+            <summary>
+            Command assembly config
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.ICommandAssemblyConfig">
+            <summary>
+            The basic interface for command assembly config
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICommandAssemblyConfig.Assembly">
+            <summary>
+            Gets the assembly name.
+            </summary>
+            <value>
+            The assembly.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CommandAssemblyConfig.Assembly">
+            <summary>
+            Gets or sets the assembly name.
+            </summary>
+            <value>
+            The assembly.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.IConfigurationSource">
+            <summary>
+            Configuration source interface
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.IRootConfig">
+            <summary>
+            IRootConfig, the part compatible with .Net 4.5 or higher
+            </summary>
+            <summary>
+            The root configuration interface
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.IRootConfig.GetChildConfig``1(System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.DefaultCulture">
+            <summary>
+            Gets the default culture for all server instances.
+            </summary>
+            <value>
+            The default culture.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.MaxWorkingThreads">
+            <summary>
+            Gets the max working threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.MinWorkingThreads">
+            <summary>
+            Gets the min working threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.MaxCompletionPortThreads">
+            <summary>
+            Gets the max completion port threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.MinCompletionPortThreads">
+            <summary>
+            Gets the min completion port threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.DisablePerformanceDataCollector">
+            <summary>
+            Gets a value indicating whether [disable performance data collector].
+            </summary>
+            <value>
+            	<c>true</c> if [disable performance data collector]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.PerformanceDataCollectInterval">
+            <summary>
+            Gets the performance data collect interval, in seconds.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.LogFactory">
+            <summary>
+            Gets the log factory name.
+            </summary>
+            <value>
+            The log factory.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.Isolation">
+            <summary>
+            Gets the isolation mode.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IRootConfig.OptionElements">
+            <summary>
+            Gets the option elements.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IConfigurationSource.Servers">
+            <summary>
+            Gets the servers definitions.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IConfigurationSource.ServerTypes">
+            <summary>
+            Gets the appServer types definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IConfigurationSource.ConnectionFilters">
+            <summary>
+            Gets the connection filters definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IConfigurationSource.LogFactories">
+            <summary>
+            Gets the log factories definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IConfigurationSource.ReceiveFilterFactories">
+            <summary>
+            Gets the Receive filter factories definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IConfigurationSource.CommandLoaders">
+            <summary>
+            Gets the command loaders definition.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.IServerConfig">
+            <summary>
+            IServerConfig, the part compatible with .Net 4.5 or higher
+            </summary>
+            <summary>
+            Server instance configuation interface
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.IServerConfig.GetChildConfig``1(System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.DefaultCulture">
+            <summary>
+            Gets the default culture for this server.
+            </summary>
+            <value>
+            The default culture.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ServerTypeName">
+            <summary>
+            Gets the name of the server type this appServer want to use.
+            </summary>
+            <value>
+            The name of the server type.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ServerType">
+            <summary>
+            Gets the type definition of the appserver.
+            </summary>
+            <value>
+            The type of the server.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ReceiveFilterFactory">
+            <summary>
+            Gets the Receive filter factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Ip">
+            <summary>
+            Gets the ip.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Port">
+            <summary>
+            Gets the port.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Options">
+            <summary>
+            Gets the options.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.OptionElements">
+            <summary>
+            Gets the option elements.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Disabled">
+            <summary>
+            Gets a value indicating whether this <see cref="T:SuperSocket.SocketBase.Config.IServerConfig"/> is disabled.
+            </summary>
+            <value>
+              <c>true</c> if disabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Mode">
+            <summary>
+            Gets the mode.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.SendTimeOut">
+            <summary>
+            Gets the send time out.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.MaxConnectionNumber">
+            <summary>
+            Gets the max connection number.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ReceiveBufferSize">
+            <summary>
+            Gets the size of the receive buffer.
+            </summary>
+            <value>
+            The size of the receive buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.SendBufferSize">
+            <summary>
+            Gets the size of the send buffer.
+            </summary>
+            <value>
+            The size of the send buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.SyncSend">
+            <summary>
+            Gets a value indicating whether sending is in synchronous mode.
+            </summary>
+            <value>
+              <c>true</c> if [sync send]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.LogCommand">
+            <summary>
+            Gets a value indicating whether log command in log file.
+            </summary>
+            <value><c>true</c> if log command; otherwise, <c>false</c>.</value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ClearIdleSession">
+            <summary>
+            Gets a value indicating whether clear idle session.
+            </summary>
+            <value><c>true</c> if clear idle session; otherwise, <c>false</c>.</value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ClearIdleSessionInterval">
+            <summary>
+            Gets the clear idle session interval, in seconds.
+            </summary>
+            <value>The clear idle session interval.</value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.IdleSessionTimeOut">
+            <summary>
+            Gets the idle session timeout time length, in seconds.
+            </summary>
+            <value>The idle session time out.</value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Certificate">
+            <summary>
+            Gets X509Certificate configuration.
+            </summary>
+            <value>X509Certificate configuration.</value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Security">
+            <summary>
+            Gets the security protocol, X509 certificate.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.MaxRequestLength">
+            <summary>
+            Gets the length of the max request.
+            </summary>
+            <value>
+            The length of the max request.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.DisableSessionSnapshot">
+            <summary>
+            Gets a value indicating whether [disable session snapshot].
+            </summary>
+            <value>
+            	<c>true</c> if [disable session snapshot]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.SessionSnapshotInterval">
+            <summary>
+            Gets the interval to taking snapshot for all live sessions.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ConnectionFilter">
+            <summary>
+            Gets the connection filters used by this server instance.
+            </summary>
+            <value>
+            The connection filter's name list, seperated by comma
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.CommandLoader">
+            <summary>
+            Gets the command loader, multiple values should be separated by comma.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.KeepAliveTime">
+            <summary>
+            Gets the start keep alive time, in seconds
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.KeepAliveInterval">
+            <summary>
+            Gets the keep alive interval, in seconds.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.ListenBacklog">
+            <summary>
+            Gets the backlog size of socket listening.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.StartupOrder">
+            <summary>
+            Gets the startup order of the server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.Listeners">
+            <summary>
+            Gets the listeners' configuration.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.LogFactory">
+            <summary>
+            Gets the log factory name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.SendingQueueSize">
+            <summary>
+            Gets the size of the sending queue.
+            </summary>
+            <value>
+            The size of the sending queue.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.LogBasicSessionActivity">
+            <summary>
+            Gets a value indicating whether [log basic session activity like connected and disconnected].
+            </summary>
+            <value>
+            	<c>true</c> if [log basic session activity]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.LogAllSocketException">
+            <summary>
+            Gets a value indicating whether [log all socket exception].
+            </summary>
+            <value>
+            <c>true</c> if [log all socket exception]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.TextEncoding">
+            <summary>
+            Gets the default text encoding.
+            </summary>
+            <value>
+            The text encoding.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IServerConfig.CommandAssemblies">
+            <summary>
+            Gets the command assemblies configuration.
+            </summary>
+            <value>
+            The command assemblies.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.ITypeProvider">
+            <summary>
+            TypeProvider's interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ITypeProvider.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ITypeProvider.Type">
+            <summary>
+            Gets the type.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.ConfigurationSource">
+            <summary>
+            Poco configuration source
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.RootConfig">
+            <summary>
+            Root configuration model
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.RootConfig.#ctor(SuperSocket.SocketBase.Config.IRootConfig)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.RootConfig"/> class.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.RootConfig.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.RootConfig"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.RootConfig.GetChildConfig``1(System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.DefaultCulture">
+            <summary>
+            Gets or sets the default culture.
+            </summary>
+            <value>
+            The default culture.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.MaxWorkingThreads">
+            <summary>
+            Gets/Sets the max working threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.MinWorkingThreads">
+            <summary>
+            Gets/sets the min working threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.MaxCompletionPortThreads">
+            <summary>
+            Gets/sets the max completion port threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.MinCompletionPortThreads">
+            <summary>
+            Gets/sets the min completion port threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.PerformanceDataCollectInterval">
+            <summary>
+            Gets/sets the performance data collect interval, in seconds.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.DisablePerformanceDataCollector">
+            <summary>
+            Gets/sets a value indicating whether [disable performance data collector].
+            </summary>
+            <value>
+            	<c>true</c> if [disable performance data collector]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.Isolation">
+            <summary>
+            Gets/sets the isolation mode.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.LogFactory">
+            <summary>
+            Gets/sets the log factory name.
+            </summary>
+            <value>
+            The log factory.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.RootConfig.OptionElements">
+            <summary>
+            Gets/sets the option elements.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.ConfigurationSource.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.ConfigurationSource"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.ConfigurationSource.#ctor(SuperSocket.SocketBase.Config.IConfigurationSource)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.ConfigurationSource"/> class.
+            </summary>
+            <param name="source">The source.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ConfigurationSource.Servers">
+            <summary>
+            Gets the servers definitions.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ConfigurationSource.ServerTypes">
+            <summary>
+            Gets/sets the server types definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ConfigurationSource.ConnectionFilters">
+            <summary>
+            Gets/sets the connection filters definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ConfigurationSource.LogFactories">
+            <summary>
+            Gets/sets the log factories definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ConfigurationSource.ReceiveFilterFactories">
+            <summary>
+            Gets/sets the Receive filter factories definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ConfigurationSource.CommandLoaders">
+            <summary>
+            Gets/sets the command loaders definition.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.ServerConfig">
+            <summary>
+            Server configruation model
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultReceiveBufferSize">
+            <summary>
+            Default ReceiveBufferSize
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultMaxConnectionNumber">
+            <summary>
+            Default MaxConnectionNumber
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultSendingQueueSize">
+            <summary>
+            Default sending queue size
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultMaxRequestLength">
+            <summary>
+            Default MaxRequestLength
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultSendTimeout">
+            <summary>
+            Default send timeout value, in milliseconds
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultClearIdleSessionInterval">
+            <summary>
+            Default clear idle session interval
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultIdleSessionTimeOut">
+            <summary>
+            Default idle session timeout
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultSendBufferSize">
+            <summary>
+            The default send buffer size
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultSessionSnapshotInterval">
+            <summary>
+            The default session snapshot interval
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultKeepAliveTime">
+            <summary>
+            The default keep alive time
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultKeepAliveInterval">
+            <summary>
+            The default keep alive interval
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Config.ServerConfig.DefaultListenBacklog">
+            <summary>
+            The default listen backlog
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.ServerConfig.#ctor(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.ServerConfig"/> class.
+            </summary>
+            <param name="serverConfig">The server config.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.ServerConfig.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.ServerConfig"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.ServerConfig.GetChildConfig``1(System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.DefaultCulture">
+            <summary>
+            Gets or sets the default culture.
+            </summary>
+            <value>
+            The default culture.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ServerTypeName">
+            <summary>
+            Gets/sets the name of the server type of this appServer want to use.
+            </summary>
+            <value>
+            The name of the server type.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ServerType">
+            <summary>
+            Gets/sets the type definition of the appserver.
+            </summary>
+            <value>
+            The type of the server.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ReceiveFilterFactory">
+            <summary>
+            Gets/sets the Receive filter factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Ip">
+            <summary>
+            Gets/sets the ip.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Port">
+            <summary>
+            Gets/sets the port.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Options">
+            <summary>
+            Gets/sets the options.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.OptionElements">
+            <summary>
+            Gets the option elements.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Disabled">
+            <summary>
+            Gets/sets a value indicating whether this <see cref="T:SuperSocket.SocketBase.Config.IServerConfig"/> is disabled.
+            </summary>
+            <value>
+              <c>true</c> if disabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Mode">
+            <summary>
+            Gets/sets the mode.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.SendTimeOut">
+            <summary>
+            Gets/sets the send time out.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.MaxConnectionNumber">
+            <summary>
+            Gets the max connection number.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ReceiveBufferSize">
+            <summary>
+            Gets the size of the receive buffer.
+            </summary>
+            <value>
+            The size of the receive buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.SendBufferSize">
+            <summary>
+            Gets the size of the send buffer.
+            </summary>
+            <value>
+            The size of the send buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.SyncSend">
+            <summary>
+            Gets a value indicating whether sending is in synchronous mode.
+            </summary>
+            <value>
+              <c>true</c> if [sync send]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.LogCommand">
+            <summary>
+            Gets/sets a value indicating whether log command in log file.
+            </summary>
+            <value>
+              <c>true</c> if log command; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ClearIdleSession">
+            <summary>
+            Gets/sets a value indicating whether clear idle session.
+            </summary>
+            <value>
+              <c>true</c> if clear idle session; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ClearIdleSessionInterval">
+            <summary>
+            Gets/sets the clear idle session interval, in seconds.
+            </summary>
+            <value>
+            The clear idle session interval.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.IdleSessionTimeOut">
+            <summary>
+            Gets/sets the idle session timeout time length, in seconds.
+            </summary>
+            <value>
+            The idle session time out.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Certificate">
+            <summary>
+            Gets/sets X509Certificate configuration.
+            </summary>
+            <value>
+            X509Certificate configuration.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Security">
+            <summary>
+            Gets/sets the security protocol, X509 certificate.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.MaxRequestLength">
+            <summary>
+            Gets/sets the length of the max request.
+            </summary>
+            <value>
+            The length of the max request.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.DisableSessionSnapshot">
+            <summary>
+            Gets/sets a value indicating whether [disable session snapshot].
+            </summary>
+            <value>
+            	<c>true</c> if [disable session snapshot]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.SessionSnapshotInterval">
+            <summary>
+            Gets/sets the interval to taking snapshot for all live sessions.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ConnectionFilter">
+            <summary>
+            Gets/sets the connection filters used by this server instance.
+            </summary>
+            <value>
+            The connection filter's name list, seperated by comma
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.CommandLoader">
+            <summary>
+            Gets the command loader, multiple values should be separated by comma.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.KeepAliveTime">
+            <summary>
+            Gets/sets the start keep alive time, in seconds
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.KeepAliveInterval">
+            <summary>
+            Gets/sets the keep alive interval, in seconds.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.ListenBacklog">
+            <summary>
+            Gets the backlog size of socket listening.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.StartupOrder">
+            <summary>
+            Gets/sets the startup order of the server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.Listeners">
+            <summary>
+            Gets and sets the listeners' configuration.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.LogFactory">
+            <summary>
+            Gets/sets the log factory name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.SendingQueueSize">
+            <summary>
+            Gets/sets the size of the sending queue.
+            </summary>
+            <value>
+            The size of the sending queue.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.LogBasicSessionActivity">
+            <summary>
+            Gets a value indicating whether [log basic session activity like connected and disconnected].
+            </summary>
+            <value>
+            	<c>true</c> if [log basic session activity]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.LogAllSocketException">
+            <summary>
+            Gets/sets a value indicating whether [log all socket exception].
+            </summary>
+            <value>
+            <c>true</c> if [log all socket exception]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.TextEncoding">
+            <summary>
+            Gets/sets the default text encoding.
+            </summary>
+            <value>
+            The text encoding.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ServerConfig.CommandAssemblies">
+            <summary>
+            Gets the command assemblies configuration.
+            </summary>
+            <value>
+            The command assemblies.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.HotUpdateAttribute">
+            <summary>
+            the attribute to mark which property of ServerConfig support hot update
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.TypeProvider">
+            <summary>
+            Type provider configuration
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.TypeProvider.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.TypeProvider.Type">
+            <summary>
+            Gets the type.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.TypeProviderCollection">
+            <summary>
+            Type provider colletion configuration
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.TypeProviderCollection.CreateNewElement">
+            <summary>
+            When overridden in a derived class, creates a new <see cref="T:System.Configuration.ConfigurationElement"/>.
+            </summary>
+            <returns>
+            A new <see cref="T:System.Configuration.ConfigurationElement"/>.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.TypeProviderCollection.GetElementKey(System.Configuration.ConfigurationElement)">
+            <summary>
+            Gets the element key for a specified configuration element when overridden in a derived class.
+            </summary>
+            <param name="element">The <see cref="T:System.Configuration.ConfigurationElement"/> to return the key for.</param>
+            <returns>
+            An <see cref="T:System.Object"/> that acts as the key for the specified <see cref="T:System.Configuration.ConfigurationElement"/>.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.TypeProviderCollection.GetEnumerator">
+            <summary>
+            Returns an enumerator that iterates through the collection.
+            </summary>
+            <returns>
+            A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
+            </returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.TypeProviderConfig">
+            <summary>
+            TypeProviderConfig
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.TypeProviderConfig.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.TypeProviderConfig.Type">
+            <summary>
+            Gets the type.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Extensions">
+            <summary>
+            Extensions class for SocketBase project
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Extensions.GetServerByName(SuperSocket.SocketBase.IBootstrap,System.String)">
+            <summary>
+            Gets the app server instance in the bootstrap by name, ignore case
+            </summary>
+            <param name="bootstrap">The bootstrap.</param>
+            <param name="name">The name of the appserver instance.</param>
+            <returns></returns>
+            <exception cref="T:System.ArgumentNullException"></exception>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Extensions.GetStatusInfoMetadata(System.Type)">
+            <summary>
+            Gets the status info metadata from the server type.
+            </summary>
+            <param name="serverType">Type of the server.</param>
+            <returns></returns>
+            <exception cref="T:System.ArgumentNullException"></exception>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ActiveConnectResult">
+            <summary>
+            Active connect result model
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ActiveConnectResult.Result">
+            <summary>
+            Gets or sets a value indicating whether the conecting is sucessfull
+            </summary>
+            <value>
+              <c>true</c> if result; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ActiveConnectResult.Session">
+            <summary>
+            Gets or sets the connected session.
+            </summary>
+            <value>
+            The connected session.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.StartResult">
+            <summary>
+            The bootstrap start result
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.StartResult.None">
+            <summary>
+            No appserver has been set in the bootstrap, so nothing was started
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.StartResult.Success">
+            <summary>
+            All appserver instances were started successfully
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.StartResult.PartialSuccess">
+            <summary>
+            Some appserver instances were started successfully, but some of them failed
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.StartResult.Failed">
+            <summary>
+            All appserver instances failed to start
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IBootstrap">
+            <summary>
+            SuperSocket bootstrap
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Initialize">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Initialize(System.Collections.Generic.IDictionary{System.String,System.Net.IPEndPoint})">
+            <summary>
+            Initializes the bootstrap with a listen endpoint replacement dictionary
+            </summary>
+            <param name="listenEndPointReplacement">The listen end point replacement.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Initialize(System.Func{SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Config.IServerConfig})">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <param name="serverConfigResolver">The server config resolver.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Initialize(SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Initialize(System.Func{SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Config.IServerConfig},SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <param name="serverConfigResolver">The server config resolver.</param>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Start">
+            <summary>
+            Starts this bootstrap.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IBootstrap.Stop">
+            <summary>
+            Stops this bootstrap.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IBootstrap.AppServers">
+            <summary>
+            Gets all the app servers running in this bootstrap
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IBootstrap.Config">
+            <summary>
+            Gets the config.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IBootstrap.StartupConfigFile">
+            <summary>
+            Gets the startup config file.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IBootstrap.BaseDirectory">
+            <summary>
+            Gets the base directory.
+            </summary>
+            <value>
+            The base directory.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IDynamicBootstrap">
+            <summary>
+            The bootstrap interface to support add new server instance in runtime
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IDynamicBootstrap.Add(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Adds a new server into the bootstrap.
+            </summary>
+            <param name="config">The new server's config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IDynamicBootstrap.AddAndStart(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Adds a new server into the bootstrap and then start it.
+            </summary>
+            <param name="config">The new server's config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IDynamicBootstrap.Remove(System.String)">
+            <summary>
+            Removes the server instance which is specified by name.
+            </summary>
+            <param name="name">The name of the server instance to be removed.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IsolationMode">
+            <summary>
+            AppServer instance running isolation mode
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.IsolationMode.None">
+            <summary>
+            No isolation
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.IsolationMode.AppDomain">
+            <summary>
+            Isolation by AppDomain
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.IsolationMode.Process">
+            <summary>
+            Isolation by process
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.ConsoleLog">
+            <summary>
+            Console Log
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.ILog">
+            <summary>
+            Log interface
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Debug(System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Debug(System.Object,System.Exception)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.DebugFormat(System.String,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.DebugFormat(System.String,System.Object[])">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.DebugFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.DebugFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.DebugFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Error(System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Error(System.Object,System.Exception)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.ErrorFormat(System.String,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.ErrorFormat(System.String,System.Object[])">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.ErrorFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.ErrorFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.ErrorFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Fatal(System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Fatal(System.Object,System.Exception)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.FatalFormat(System.String,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.FatalFormat(System.String,System.Object[])">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.FatalFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.FatalFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.FatalFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Info(System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Info(System.Object,System.Exception)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.InfoFormat(System.String,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.InfoFormat(System.String,System.Object[])">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.InfoFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.InfoFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.InfoFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Warn(System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.Warn(System.Object,System.Exception)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.WarnFormat(System.String,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.WarnFormat(System.String,System.Object[])">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.WarnFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.WarnFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILog.WarnFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ILog.IsDebugEnabled">
+            <summary>
+            Gets a value indicating whether this instance is debug enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is debug enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ILog.IsErrorEnabled">
+            <summary>
+            Gets a value indicating whether this instance is error enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is error enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ILog.IsFatalEnabled">
+            <summary>
+            Gets a value indicating whether this instance is fatal enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is fatal enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ILog.IsInfoEnabled">
+            <summary>
+            Gets a value indicating whether this instance is info enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is info enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ILog.IsWarnEnabled">
+            <summary>
+            Gets a value indicating whether this instance is warn enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is warn enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Logging.ConsoleLog"/> class.
+            </summary>
+            <param name="name">The name.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Debug(System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Debug(System.Object,System.Exception)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.DebugFormat(System.String,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.DebugFormat(System.String,System.Object[])">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.DebugFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.DebugFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.DebugFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Error(System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Error(System.Object,System.Exception)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.ErrorFormat(System.String,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.ErrorFormat(System.String,System.Object[])">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.ErrorFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.ErrorFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.ErrorFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Fatal(System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Fatal(System.Object,System.Exception)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.FatalFormat(System.String,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.FatalFormat(System.String,System.Object[])">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.FatalFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.FatalFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.FatalFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Info(System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Info(System.Object,System.Exception)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.InfoFormat(System.String,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.InfoFormat(System.String,System.Object[])">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.InfoFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.InfoFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.InfoFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Warn(System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.Warn(System.Object,System.Exception)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.WarnFormat(System.String,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.WarnFormat(System.String,System.Object[])">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.WarnFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.WarnFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLog.WarnFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ConsoleLog.IsDebugEnabled">
+            <summary>
+            Gets a value indicating whether this instance is debug enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is debug enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ConsoleLog.IsErrorEnabled">
+            <summary>
+            Gets a value indicating whether this instance is error enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is error enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ConsoleLog.IsFatalEnabled">
+            <summary>
+            Gets a value indicating whether this instance is fatal enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is fatal enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ConsoleLog.IsInfoEnabled">
+            <summary>
+            Gets a value indicating whether this instance is info enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is info enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.ConsoleLog.IsWarnEnabled">
+            <summary>
+            Gets a value indicating whether this instance is warn enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is warn enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.ConsoleLogFactory">
+            <summary>
+            Console log factory
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.ILogFactory">
+            <summary>
+            LogFactory Interface
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ILogFactory.GetLog(System.String)">
+            <summary>
+            Gets the log by name.
+            </summary>
+            <param name="name">The name.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.ConsoleLogFactory.GetLog(System.String)">
+            <summary>
+            Gets the log by name.
+            </summary>
+            <param name="name">The name.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.Log4NetLog">
+            <summary>
+            Log4NetLog
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.#ctor(log4net.ILog)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Logging.Log4NetLog"/> class.
+            </summary>
+            <param name="log">The log.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Debug(System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Debug(System.Object,System.Exception)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.DebugFormat(System.String,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.DebugFormat(System.String,System.Object[])">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.DebugFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.DebugFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.DebugFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the debug message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Error(System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Error(System.Object,System.Exception)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.ErrorFormat(System.String,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.ErrorFormat(System.String,System.Object[])">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.ErrorFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.ErrorFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.ErrorFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Fatal(System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Fatal(System.Object,System.Exception)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.FatalFormat(System.String,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.FatalFormat(System.String,System.Object[])">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.FatalFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.FatalFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.FatalFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the fatal error message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Info(System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Info(System.Object,System.Exception)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.InfoFormat(System.String,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.InfoFormat(System.String,System.Object[])">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.InfoFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.InfoFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.InfoFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the info message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Warn(System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.Warn(System.Object,System.Exception)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.WarnFormat(System.String,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.WarnFormat(System.String,System.Object[])">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.WarnFormat(System.IFormatProvider,System.String,System.Object[])">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="provider">The provider.</param>
+            <param name="format">The format.</param>
+            <param name="args">The args.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.WarnFormat(System.String,System.Object,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLog.WarnFormat(System.String,System.Object,System.Object,System.Object)">
+            <summary>
+            Logs the warning message.
+            </summary>
+            <param name="format">The format.</param>
+            <param name="arg0">The arg0.</param>
+            <param name="arg1">The arg1.</param>
+            <param name="arg2">The arg2.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.Log4NetLog.IsDebugEnabled">
+            <summary>
+            Gets a value indicating whether this instance is debug enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is debug enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.Log4NetLog.IsErrorEnabled">
+            <summary>
+            Gets a value indicating whether this instance is error enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is error enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.Log4NetLog.IsFatalEnabled">
+            <summary>
+            Gets a value indicating whether this instance is fatal enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is fatal enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.Log4NetLog.IsInfoEnabled">
+            <summary>
+            Gets a value indicating whether this instance is info enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is info enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.Log4NetLog.IsWarnEnabled">
+            <summary>
+            Gets a value indicating whether this instance is warn enabled.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is warn enabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.Log4NetLogFactory">
+            <summary>
+            Log4NetLogFactory
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Logging.LogFactoryBase">
+            <summary>
+            LogFactory Base class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.LogFactoryBase.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Logging.LogFactoryBase"/> class.
+            </summary>
+            <param name="configFile">The config file.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.LogFactoryBase.GetLog(System.String)">
+            <summary>
+            Gets the log by name.
+            </summary>
+            <param name="name">The name.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.LogFactoryBase.ConfigFile">
+            <summary>
+            Gets the config file file path.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Logging.LogFactoryBase.IsSharedConfig">
+            <summary>
+            Gets a value indicating whether the server instance is running in isolation mode and the multiple server instances share the same logging configuration.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLogFactory.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Logging.Log4NetLogFactory"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLogFactory.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Logging.Log4NetLogFactory"/> class.
+            </summary>
+            <param name="log4netConfig">The log4net config.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Logging.Log4NetLogFactory.GetLog(System.String)">
+            <summary>
+            Gets the log by name.
+            </summary>
+            <param name="name">The name.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Metadata.AppServerMetadataTypeAttribute">
+            <summary>
+            StatusInfoMetadata type attribute
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Metadata.AppServerMetadataTypeAttribute.#ctor(System.Type)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Metadata.AppServerMetadataTypeAttribute"/> class.
+            </summary>
+            <param name="metadataType">Type of the metadata.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.AppServerMetadataTypeAttribute.MetadataType">
+            <summary>
+            Gets the type of the metadata.
+            </summary>
+            <value>
+            The type of the metadata.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Metadata.CommandFilterAttribute">
+            <summary>
+            Command filter attribute
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Metadata.CommandFilterAttribute.OnCommandExecuting(SuperSocket.SocketBase.CommandExecutingContext)">
+            <summary>
+            Called when [command executing].
+            </summary>
+            <param name="commandContext">The command context.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Metadata.CommandFilterAttribute.OnCommandExecuted(SuperSocket.SocketBase.CommandExecutingContext)">
+            <summary>
+            Called when [command executed].
+            </summary>
+            <param name="commandContext">The command context.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.CommandFilterAttribute.Order">
+            <summary>
+            Gets or sets the execution order.
+            </summary>
+            <value>
+            The order.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Metadata.DefaultAppServerMetadata">
+            <summary>
+            AppServer's default metadata type
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Metadata.StatusInfoAttribute">
+            <summary>
+            StatusInfo Metadata
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Metadata.StatusInfoAttribute"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Metadata.StatusInfoAttribute"/> class.
+            </summary>
+            <param name="key">The key.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.Key">
+            <summary>
+            Gets or sets the key.
+            </summary>
+            <value>
+            The key.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.Name">
+            <summary>
+            Gets or sets the name.
+            </summary>
+            <value>
+            The name.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.ShortName">
+            <summary>
+            Gets or sets the short name.
+            </summary>
+            <value>
+            The short name.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.Format">
+            <summary>
+            Gets or sets the format.
+            </summary>
+            <value>
+            The format.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.Order">
+            <summary>
+            Gets or sets the order.
+            </summary>
+            <value>
+            The order.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.OutputInPerfLog">
+            <summary>
+            Gets or sets a value indicating whether [output in perf log].
+            </summary>
+            <value>
+              <c>true</c> if [output in perf log]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Metadata.StatusInfoAttribute.DataType">
+            <summary>
+            Gets or sets the type of the data.
+            </summary>
+            <value>
+            The type of the data.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Metadata.StatusInfoKeys">
+            <summary>
+            Server StatusInfo Metadata
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.CpuUsage">
+            <summary>
+            The cpu usage
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.MemoryUsage">
+            <summary>
+            The memory usage
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.TotalThreadCount">
+            <summary>
+            The total thread count
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.AvailableWorkingThreads">
+            <summary>
+            The available working threads count
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.AvailableCompletionPortThreads">
+            <summary>
+            The available completion port threads count
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.MaxWorkingThreads">
+            <summary>
+            The max working threads count
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.MaxCompletionPortThreads">
+            <summary>
+            The max completion port threads count
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.StartedTime">
+            <summary>
+            The started time.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.IsRunning">
+            <summary>
+            	<c>true</c> if this instance is running; otherwise, <c>false</c>.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.TotalConnections">
+            <summary>
+            The total count of the connections.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.MaxConnectionNumber">
+            <summary>
+            The max connection number.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.TotalHandledRequests">
+            <summary>
+            The total handled requests count.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.RequestHandlingSpeed">
+            <summary>
+            Gets or sets the request handling speed, per second.
+            </summary>
+            <value>
+            The request handling speed.
+            </value>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.Listeners">
+            <summary>
+            Gets or sets the listeners.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.AvialableSendingQueueItems">
+            <summary>
+            The avialable sending queue items.
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Metadata.StatusInfoKeys.TotalSendingQueueItems">
+            <summary>
+            The total sending queue items.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.NodeStatus">
+            <summary>
+            The status of one SuperSocket node (one installation or deployment)
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.NodeStatus.Save(System.String)">
+            <summary>
+            Saves the specified file path.
+            </summary>
+            <param name="filePath">The file path.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.NodeStatus.LoadFrom(System.String)">
+            <summary>
+            Loads a NodeStatus instance from a file.
+            </summary>
+            <param name="filePath">The file path.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.NodeStatus.BootstrapStatus">
+            <summary>
+            Gets or sets the bootstrap status.
+            </summary>
+            <value>
+            The bootstrap status.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.NodeStatus.InstancesStatus">
+            <summary>
+            Gets or sets the status of all server instances running in this node.
+            </summary>
+            <value>
+            The instances status.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory">
+            <summary>
+            CommandLine RequestFilter Factory
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory">
+            <summary>
+            Terminator ReceiveFilter Factory
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IReceiveFilterFactory`1">
+            <summary>
+            Receive filter factory interface
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IReceiveFilterFactory">
+            <summary>
+            Receive filter factory interface
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.IReceiveFilterFactory`1.CreateFilter(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession,System.Net.IPEndPoint)">
+            <summary>
+            Creates the Receive filter.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="appSession">The app session.</param>
+            <param name="remoteEndPoint">The remote end point.</param>
+            <returns>
+            the new created request filer assosiated with this socketSession
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory"/> class.
+            </summary>
+            <param name="terminator">The terminator.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory.#ctor(System.String,System.Text.Encoding)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory"/> class.
+            </summary>
+            <param name="terminator">The terminator.</param>
+            <param name="encoding">The encoding.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory.#ctor(System.String,System.Text.Encoding,SuperSocket.SocketBase.Protocol.IRequestInfoParser{SuperSocket.SocketBase.Protocol.StringRequestInfo})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory"/> class.
+            </summary>
+            <param name="terminator">The terminator.</param>
+            <param name="encoding">The encoding.</param>
+            <param name="requestInfoParser">The line parser.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilterFactory.CreateFilter(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession,System.Net.IPEndPoint)">
+            <summary>
+            Creates the Receive filter.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="appSession">The app session.</param>
+            <param name="remoteEndPoint">The remote end point.</param>
+            <returns>
+            the new created request filer assosiated with this socketSession
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory.#ctor(System.Text.Encoding)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory"/> class.
+            </summary>
+            <param name="encoding">The encoding.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory.#ctor(System.Text.Encoding,SuperSocket.SocketBase.Protocol.IRequestInfoParser{SuperSocket.SocketBase.Protocol.StringRequestInfo})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.CommandLineReceiveFilterFactory"/> class.
+            </summary>
+            <param name="encoding">The encoding.</param>
+            <param name="requestInfoParser">The request info parser.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.DefaultReceiveFilterFactory`2">
+            <summary>
+            DefaultreceiveFilterFactory
+            </summary>
+            <typeparam name="TReceiveFilter">The type of the Receive filter.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.DefaultReceiveFilterFactory`2.CreateFilter(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession,System.Net.IPEndPoint)">
+            <summary>
+            Creates the Receive filter.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="appSession">The app session.</param>
+            <param name="remoteEndPoint">The remote end point.</param>
+            <returns>
+            the new created request filer assosiated with this socketSession
+            </returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.FilterState">
+            <summary>
+            Filter state enum
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Protocol.FilterState.Normal">
+            <summary>
+            Normal state
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Protocol.FilterState.Error">
+            <summary>
+            Error state
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IOffsetAdapter">
+            <summary>
+            The interface for a Receive filter to adapt receiving buffer offset
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IOffsetAdapter.OffsetDelta">
+            <summary>
+            Gets the offset delta.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IReceiveFilter`1">
+            <summary>
+            Receive filter interface
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.IReceiveFilter`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters received data of the specific session into request info.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset of the current received data in this read buffer.</param>
+            <param name="length">The length of the current received data.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest, the length of the data which hasn't been parsed.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.IReceiveFilter`1.Reset">
+            <summary>
+            Resets this instance to initial state.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IReceiveFilter`1.LeftBufferSize">
+            <summary>
+            Gets the size of the rest buffer.
+            </summary>
+            <value>
+            The size of the rest buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IReceiveFilter`1.NextReceiveFilter">
+            <summary>
+            Gets the next Receive filter.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IReceiveFilter`1.State">
+            <summary>
+            Gets the filter state.
+            </summary>
+            <value>
+            The filter state.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IReceiveFilterInitializer">
+            <summary>
+            Provide the initializing interface for ReceiveFilter
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.IReceiveFilterInitializer.Initialize(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.IAppSession)">
+            <summary>
+            Initializes the ReceiveFilter with the specified appServer and appSession
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="session">The session.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1">
+            <summary>
+            Receive filter base class
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.#ctor(SuperSocket.SocketBase.Protocol.ReceiveFilterBase{`0})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1"/> class.
+            </summary>
+            <param name="previousRequestFilter">The previous Receive filter.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.Initialize(SuperSocket.SocketBase.Protocol.ReceiveFilterBase{`0})">
+            <summary>
+            Initializes the specified previous Receive filter.
+            </summary>
+            <param name="previousRequestFilter">The previous Receive filter.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters received data of the specific session into request info.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset of the current received data in this read buffer.</param>
+            <param name="length">The length of the current received data.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest, the length of the data which hasn't been parsed.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.AddArraySegment(System.Byte[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Adds the array segment.
+            </summary>
+            <param name="buffer">The buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.ClearBufferSegments">
+            <summary>
+            Clears the buffer segments.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.Reset">
+            <summary>
+            Resets this instance to initial state.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.BufferSegments">
+            <summary>
+            Gets the buffer segments which can help you parse your request info conviniently.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.LeftBufferSize">
+            <summary>
+            Gets the size of the rest buffer.
+            </summary>
+            <value>
+            The size of the rest buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.NextReceiveFilter">
+            <summary>
+            Gets or sets the next Receive filter.
+            </summary>
+            <value>
+            The next Receive filter.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.ReceiveFilterBase`1.State">
+            <summary>
+            Gets the filter state.
+            </summary>
+            <value>
+            The state.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1">
+            <summary>
+            Terminator Receive filter
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1.NullRequestInfo">
+            <summary>
+            Null RequestInfo
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1.#ctor(System.Byte[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1"/> class.
+            </summary>
+            <param name="terminator">The terminator.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1.Filter(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@)">
+            <summary>
+            Filters received data of the specific session into request info.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset of the current received data in this read buffer.</param>
+            <param name="length">The length of the current received data.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest, the length of the data which hasn't been parsed.</param>
+            <returns>return the parsed TRequestInfo</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1.Reset">
+            <summary>
+            Resets this instance.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Resolves the specified data to TRequestInfo.
+            </summary>
+            <param name="data">The data.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter`1.Session">
+            <summary>
+            Gets the session assosiated with the Receive filter.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter">
+            <summary>
+            TerminatorRequestFilter
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter.#ctor(System.Byte[],System.Text.Encoding)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter"/> class.
+            </summary>
+            <param name="terminator">The terminator.</param>
+            <param name="encoding">The encoding.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter.#ctor(System.Byte[],System.Text.Encoding,SuperSocket.SocketBase.Protocol.IRequestInfoParser{SuperSocket.SocketBase.Protocol.StringRequestInfo})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter"/> class.
+            </summary>
+            <param name="terminator">The terminator.</param>
+            <param name="encoding">The encoding.</param>
+            <param name="requestParser">The request parser.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter.ProcessMatchedRequest(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Resolves the specified data to StringRequestInfo.
+            </summary>
+            <param name="data">The data.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Provider.ExportFactory">
+            <summary>
+            Export Factory
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ExportFactory.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ExportFactory"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ExportFactory.#ctor(System.Object)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ExportFactory"/> class.
+            </summary>
+            <param name="instance">The instance.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ExportFactory.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ExportFactory"/> class.
+            </summary>
+            <param name="typeName">Name of the type.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ExportFactory.EnsureInstance">
+            <summary>
+            Ensures the instance's existance.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ExportFactory.CreateExport``1">
+            <summary>
+            Creates the export type instance.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ExportFactory.CreateExport``1(System.Func{System.Type,System.Object})">
+            <summary>
+            Creates the export type instance from the instance creator.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="creator">The creator.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ExportFactory.TypeName">
+            <summary>
+            Gets or sets the type.
+            </summary>
+            <value>
+            The type.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Provider.ProviderFactoryInfo">
+            <summary>
+            Provider factory infomation
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ProviderFactoryInfo"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.#ctor(SuperSocket.SocketBase.Provider.ProviderKey,System.String,System.Object)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ProviderFactoryInfo"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="name">The name.</param>
+            <param name="instance">The instance.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.#ctor(SuperSocket.SocketBase.Provider.ProviderKey,System.String,System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ProviderFactoryInfo"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="name">The name.</param>
+            <param name="typeName">Name of the type.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.#ctor(SuperSocket.SocketBase.Provider.ProviderKey,System.String,System.Type)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Provider.ProviderFactoryInfo"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="name">The name.</param>
+            <param name="type">The type.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.Key">
+            <summary>
+            Gets the key.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.Name">
+            <summary>
+            Gets or sets the name.
+            </summary>
+            <value>
+            The name.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderFactoryInfo.ExportFactory">
+            <summary>
+            Gets or sets the export factory.
+            </summary>
+            <value>
+            The export factory.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Provider.ProviderKey">
+            <summary>
+            ProviderKey
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.Name">
+            <summary>
+            Gets or sets the name.
+            </summary>
+            <value>
+            The name.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.Type">
+            <summary>
+            Gets or sets the type.
+            </summary>
+            <value>
+            The type.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.ServerType">
+            <summary>
+            Gets the service.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.SocketServerFactory">
+            <summary>
+            Gets the socket server factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.ConnectionFilter">
+            <summary>
+            Gets the connection filter.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.LogFactory">
+            <summary>
+            Gets the log factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.ReceiveFilterFactory">
+            <summary>
+            Gets the Receive filter factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Provider.ProviderKey.CommandLoader">
+            <summary>
+            Gets the command loader.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.RequestHandler`2">
+            <summary>
+            Request handler
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.IListenerConfig">
+            <summary>
+            The listener configuration interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IListenerConfig.Ip">
+            <summary>
+            Gets the ip of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IListenerConfig.Port">
+            <summary>
+            Gets the port of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IListenerConfig.Backlog">
+            <summary>
+            Gets the backlog.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.IListenerConfig.Security">
+            <summary>
+            Gets the security option, None/Default/Tls/Ssl/...
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.ListenerConfig">
+            <summary>
+            Listener configuration model
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Config.ListenerConfig.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Config.ListenerConfig"/> class.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ListenerConfig.Ip">
+            <summary>
+            Gets the ip of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ListenerConfig.Port">
+            <summary>
+            Gets the port of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ListenerConfig.Backlog">
+            <summary>
+            Gets the backlog.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ListenerConfig.Security">
+            <summary>
+            Gets/sets the security option, None/Default/Tls/Ssl/...
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ListenerInfo">
+            <summary>
+            Listener inforamtion
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ListenerInfo.EndPoint">
+            <summary>
+            Gets or sets the listen endpoint.
+            </summary>
+            <value>
+            The end point.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ListenerInfo.BackLog">
+            <summary>
+            Gets or sets the listen backlog.
+            </summary>
+            <value>
+            The back log.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ListenerInfo.Security">
+            <summary>
+            Gets or sets the security protocol.
+            </summary>
+            <value>
+            The security.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.BinaryRequestInfo">
+            <summary>
+            Binary type request information
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.RequestInfo`1">
+            <summary>
+            RequestInfo basic class
+            </summary>
+            <typeparam name="TRequestBody">The type of the request body.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IRequestInfo`1">
+            <summary>
+            Request information interface
+            </summary>
+            <typeparam name="TRequestBody">The type of the request body.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IRequestInfo">
+            <summary>
+            Request information interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IRequestInfo.Key">
+            <summary>
+            Gets the key of this request.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IRequestInfo`1.Body">
+            <summary>
+            Gets the body of this request.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.RequestInfo`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.RequestInfo`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.RequestInfo`1.#ctor(System.String,`0)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.RequestInfo`1"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="body">The body.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.RequestInfo`1.Initialize(System.String,`0)">
+            <summary>
+            Initializes the specified key.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="body">The body.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.RequestInfo`1.Key">
+            <summary>
+            Gets the key of this request.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.RequestInfo`1.Body">
+            <summary>
+            Gets the body.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.BinaryRequestInfo.#ctor(System.String,System.Byte[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.BinaryRequestInfo"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="body">The body.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.CommandBase`2">
+            <summary>
+            Command base class
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.ICommand`2">
+            <summary>
+            Command basic interface
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.ICommand">
+            <summary>
+            Command basic interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Command.ICommand.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ICommand`2.ExecuteCommand(`0,`1)">
+            <summary>
+            Executes the command.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandBase`2.ExecuteCommand(`0,`1)">
+            <summary>
+            Executes the command.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.CommandBase`2.ToString">
+            <summary>
+            Returns a <see cref="T:System.String"/> that represents this instance.
+            </summary>
+            <returns>
+            A <see cref="T:System.String"/> that represents this instance.
+            </returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Command.CommandBase`2.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.CommandUpdateAction">
+            <summary>
+            Command update action enum
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Command.CommandUpdateAction.Add">
+            <summary>
+            Add command
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Command.CommandUpdateAction.Remove">
+            <summary>
+            Remove command
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Command.CommandUpdateAction.Update">
+            <summary>
+            Update command
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.CommandUpdateInfo`1">
+            <summary>
+            Command update information
+            </summary>
+            <typeparam name="T"></typeparam>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Command.CommandUpdateInfo`1.UpdateAction">
+            <summary>
+            Gets or sets the update action.
+            </summary>
+            <value>
+            The update action.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Command.CommandUpdateInfo`1.Command">
+            <summary>
+            Gets or sets the target command.
+            </summary>
+            <value>
+            The command.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.MockupCommand`2">
+            <summary>
+            Mockup command
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.MockupCommand`2.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Command.MockupCommand`2"/> class.
+            </summary>
+            <param name="name">The name.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.MockupCommand`2.ExecuteCommand(`0,`1)">
+            <summary>
+            Executes the command.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Command.MockupCommand`2.Name">
+            <summary>
+            Gets the name.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IRequestInfo`2">
+            <summary>
+            Request information interface
+            </summary>
+            <typeparam name="TRequestHeader">The type of the request header.</typeparam>
+            <typeparam name="TRequestBody">The type of the request body.</typeparam>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.IRequestInfo`2.Header">
+            <summary>
+            Gets the header of the request.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.RequestInfo`2">
+            <summary>
+            RequestInfo with header
+            </summary>
+            <typeparam name="TRequestHeader">The type of the request header.</typeparam>
+            <typeparam name="TRequestBody">The type of the request body.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.RequestInfo`2.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.RequestInfo`2"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.RequestInfo`2.#ctor(System.String,`0,`1)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.RequestInfo`2"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="header">The header.</param>
+            <param name="body">The body.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.RequestInfo`2.Initialize(System.String,`0,`1)">
+            <summary>
+            Initializes the specified key.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="header">The header.</param>
+            <param name="body">The body.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.RequestInfo`2.Header">
+            <summary>
+            Gets the header.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.StringRequestInfo">
+            <summary>
+            String type request information
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.StringRequestInfo.#ctor(System.String,System.String,System.String[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.StringRequestInfo"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="body">The body.</param>
+            <param name="parameters">The parameters.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.StringRequestInfo.GetFirstParam">
+            <summary>
+            Gets the first param.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.StringRequestInfo.Parameters">
+            <summary>
+            Gets the parameters.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.StringRequestInfo.Item(System.Int32)">
+            <summary>
+            Gets the <see cref="T:System.String"/> at the specified index.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.ReflectCommandLoader`1">
+            <summary>
+            A command loader which loads commands from assembly by reflection
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ReflectCommandLoader`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Command.ReflectCommandLoader`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ReflectCommandLoader`1.Initialize(SuperSocket.SocketBase.Config.IRootConfig,SuperSocket.SocketBase.IAppServer)">
+            <summary>
+            Initializes the command loader by the root config and the server instance.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="appServer">The app server.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Command.ReflectCommandLoader`1.TryLoadCommands(System.Collections.Generic.IEnumerable{`0}@)">
+            <summary>
+            Tries to load commands.
+            </summary>
+            <param name="commands">The commands.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.UdpRequestInfo">
+            <summary>
+            UdpRequestInfo, it is designed for passing in business session ID to udp request info
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.UdpRequestInfo.#ctor(System.String,System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.UdpRequestInfo"/> class.
+            </summary>
+            <param name="key">The key.</param>
+            <param name="sessionID">The session ID.</param>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.UdpRequestInfo.Key">
+            <summary>
+            Gets the key of this request.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Protocol.UdpRequestInfo.SessionID">
+            <summary>
+            Gets the session ID.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.CertificateConfig">
+            <summary>
+            Certificate config model class
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Config.ICertificateConfig">
+            <summary>
+            Certificate configuration interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.FilePath">
+            <summary>
+            Gets the file path.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.Password">
+            <summary>
+            Gets the password.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.StoreName">
+            <summary>
+            Gets the the store where certificate locates.
+            </summary>
+            <value>
+            The name of the store.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.Thumbprint">
+            <summary>
+            Gets the thumbprint.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.StoreLocation">
+            <summary>
+            Gets the store location of the certificate.
+            </summary>
+            <value>
+            The store location.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.ClientCertificateRequired">
+            <summary>
+            Gets a value indicating whether [client certificate required].
+            </summary>
+            <value>
+            <c>true</c> if [client certificate required]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.ICertificateConfig.KeyStorageFlags">
+            <summary>
+            Gets a value that will be used to instantiate the X509Certificate2 object in the CertificateManager
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.FilePath">
+            <summary>
+            Gets/sets the file path.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.Password">
+            <summary>
+            Gets/sets the password.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.StoreName">
+            <summary>
+            Gets/sets the the store where certificate locates.
+            </summary>
+            <value>
+            The name of the store.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.StoreLocation">
+            <summary>
+            Gets/sets the store location of the certificate.
+            </summary>
+            <value>
+            The store location.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.Thumbprint">
+            <summary>
+            Gets/sets the thumbprint.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.ClientCertificateRequired">
+            <summary>
+            Gets/sets a value indicating whether [client certificate required].
+            </summary>
+            <value>
+            <c>true</c> if [client certificate required]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.Config.CertificateConfig.KeyStorageFlags">
+            <summary>
+            Gets/sets a value that will be used to instantiate the X509Certificate2 object in the CertificateManager
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IAppSession">
+            <summary>
+            The basic interface for appSession
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ISessionBase">
+            <summary>
+            The basic session interface
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISessionBase.SessionID">
+            <summary>
+            Gets the session ID.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISessionBase.RemoteEndPoint">
+            <summary>
+            Gets the remote endpoint.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppSession.Close">
+            <summary>
+            Closes this session.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppSession.Close(SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Closes the session by the specified reason.
+            </summary>
+            <param name="reason">The close reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppSession.ProcessRequest(System.Byte[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Processes the request.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <returns>return offset delta of next receiving buffer</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppSession.StartSession">
+            <summary>
+            Starts the session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.AppServer">
+            <summary>
+            Gets the app server.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.SocketSession">
+            <summary>
+            Gets the socket session of the AppSession.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.Items">
+            <summary>
+            Gets the items.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.Config">
+            <summary>
+            Gets the config of the server.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.LocalEndPoint">
+            <summary>
+            Gets the local listening endpoint.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.LastActiveTime">
+            <summary>
+            Gets or sets the last active time of the session.
+            </summary>
+            <value>
+            The last active time.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.StartTime">
+            <summary>
+            Gets the start time of the session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.Connected">
+            <summary>
+            Gets a value indicating whether this <see cref="T:SuperSocket.SocketBase.IAppSession"/> is connected.
+            </summary>
+            <value>
+              <c>true</c> if connected; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.Charset">
+            <summary>
+            Gets or sets the charset which is used for transfering text message.
+            </summary>
+            <value>The charset.</value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.PrevCommand">
+            <summary>
+            Gets or sets the previous command.
+            </summary>
+            <value>
+            The prev command.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.CurrentCommand">
+            <summary>
+            Gets or sets the current executing command.
+            </summary>
+            <value>
+            The current command.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IAppSession.Logger">
+            <summary>
+            Gets the logger assosiated with this session.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IAppSession`2">
+            <summary>
+            The interface for appSession
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IAppSession`2.Initialize(SuperSocket.SocketBase.IAppServer{`0,`1},SuperSocket.SocketBase.ISocketSession)">
+            <summary>
+            Initializes the specified session.
+            </summary>
+            <param name="server">The server.</param>
+            <param name="socketSession">The socket session.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.IConnectionFilter">
+            <summary>
+            The basic interface of connection filter
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IConnectionFilter.Initialize(System.String,SuperSocket.SocketBase.IAppServer)">
+            <summary>
+            Initializes the connection filter
+            </summary>
+            <param name="name">The name.</param>
+            <param name="appServer">The app server.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.IConnectionFilter.AllowConnect(System.Net.IPEndPoint)">
+            <summary>
+            Whether allows the connect according the remote endpoint
+            </summary>
+            <param name="remoteAddress">The remote address.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.IConnectionFilter.Name">
+            <summary>
+            Gets the name of the filter.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ISocketServer">
+            <summary>
+            It is the basic interface of SocketServer,
+            SocketServer is the abstract server who really listen the comming sockets directly.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketServer.Start">
+            <summary>
+            Starts this instance.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketServer.ResetSessionSecurity(SuperSocket.SocketBase.IAppSession,System.Security.Authentication.SslProtocols)">
+            <summary>
+            Resets the session's security protocol.
+            </summary>
+            <param name="session">The session.</param>
+            <param name="security">The security protocol.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketServer.Stop">
+            <summary>
+            Stops this instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketServer.IsRunning">
+            <summary>
+            Gets a value indicating whether this instance is running.
+            </summary>
+            <value>
+            	<c>true</c> if this instance is running; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketServer.SendingQueuePool">
+            <summary>
+            Gets the information of the sending queue pool.
+            </summary>
+            <value>
+            The sending queue pool.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ISocketServerFactory">
+            <summary>
+            The interface for socket server factory
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketServerFactory.CreateSocketServer``1(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.ListenerInfo[],SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Creates the socket server instance.
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+            <param name="appServer">The app server.</param>
+            <param name="listeners">The listeners.</param>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.CloseReason">
+            <summary>
+            CloseReason enum
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.Unknown">
+            <summary>
+            The socket is closed for unknown reason
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.ServerShutdown">
+            <summary>
+            Close for server shutdown
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.ClientClosing">
+            <summary>
+            The client close the socket
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.ServerClosing">
+            <summary>
+            The server side close the socket
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.ApplicationError">
+            <summary>
+            Application error
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.SocketError">
+            <summary>
+            The socket is closed for a socket error
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.TimeOut">
+            <summary>
+            The socket is closed by server for timeout
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.ProtocolError">
+            <summary>
+            Protocol error 
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.CloseReason.InternalError">
+            <summary>
+            SuperSocket internal error
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ISocketSession">
+            <summary>
+            The interface for socket session
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketSession.Initialize(SuperSocket.SocketBase.IAppSession)">
+            <summary>
+            Initializes the specified app session.
+            </summary>
+            <param name="appSession">The app session.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketSession.Start">
+            <summary>
+            Starts this instance.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketSession.Close(SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Closes the socket session for the specified reason.
+            </summary>
+            <param name="reason">The reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketSession.TrySend(System.Collections.Generic.IList{System.ArraySegment{System.Byte}})">
+            <summary>
+            Tries to send array segment.
+            </summary>
+            <param name="segments">The segments.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketSession.TrySend(System.ArraySegment{System.Byte})">
+            <summary>
+            Tries to send array segment.
+            </summary>
+            <param name="segment">The segment.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.ISocketSession.ApplySecureProtocol">
+            <summary>
+            Applies the secure protocol.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketSession.Client">
+            <summary>
+            Gets the client socket.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketSession.LocalEndPoint">
+            <summary>
+            Gets the local listening endpoint.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketSession.SecureProtocol">
+            <summary>
+            Gets or sets the secure protocol.
+            </summary>
+            <value>
+            The secure protocol.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketSession.Closed">
+            <summary>
+            Occurs when [closed].
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketSession.AppSession">
+            <summary>
+            Gets the app session assosiated with this socket session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.ISocketSession.OrigReceiveOffset">
+            <summary>
+            Gets the original receive buffer offset.
+            </summary>
+            <value>
+            The original receive buffer offset.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketBase.LoggerExtension">
+            <summary>
+            Logger extension class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.LoggerExtension.Error(SuperSocket.SocketBase.Logging.ILog,SuperSocket.SocketBase.ISessionBase,System.String,System.Exception)">
+            <summary>
+            Logs the error
+            </summary>
+            <param name="logger">The logger.</param>
+            <param name="session">The session.</param>
+            <param name="title">The title.</param>
+            <param name="e">The e.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.LoggerExtension.Error(SuperSocket.SocketBase.Logging.ILog,SuperSocket.SocketBase.ISessionBase,System.String)">
+            <summary>
+            Logs the error
+            </summary>
+            <param name="logger">The logger.</param>
+            <param name="session">The session.</param>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.LoggerExtension.Info(SuperSocket.SocketBase.Logging.ILog,SuperSocket.SocketBase.ISessionBase,System.String)">
+            <summary>
+            Logs the information
+            </summary>
+            <param name="logger">The logger.</param>
+            <param name="session">The session.</param>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.LoggerExtension.Debug(SuperSocket.SocketBase.Logging.ILog,SuperSocket.SocketBase.ISessionBase,System.String)">
+            <summary>
+            Logs the debug message
+            </summary>
+            <param name="logger">The logger.</param>
+            <param name="session">The session.</param>
+            <param name="message">The message.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.LoggerExtension.LogPerf(SuperSocket.SocketBase.IAppServer,System.String)">
+            <summary>
+            Logs the performance message
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="message">The message.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser">
+            <summary>
+            Basic request info parser, which parse request info by separating
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Protocol.IRequestInfoParser`1">
+            <summary>
+            The interface for request info parser 
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.IRequestInfoParser`1.ParseRequestInfo(System.String)">
+            <summary>
+            Parses the request info from the source string.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="F:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser.DefaultInstance">
+            <summary>
+            The default singlegton instance
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser.#ctor(System.String,System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser"/> class.
+            </summary>
+            <param name="spliter">The spliter between command name and command parameters.</param>
+            <param name="parameterSpliter">The parameter spliter.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.Protocol.BasicRequestInfoParser.ParseRequestInfo(System.String)">
+            <summary>
+            Parses the request info.
+            </summary>
+            <param name="source">The source.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.ServerState">
+            <summary>
+            Server's state enum class
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.ServerState.NotInitialized">
+            <summary>
+            Not initialized
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.ServerState.Initializing">
+            <summary>
+            In initializing
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.ServerState.NotStarted">
+            <summary>
+            Has been initialized, but not started
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.ServerState.Starting">
+            <summary>
+            In starting
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.ServerState.Running">
+            <summary>
+            In running
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.ServerState.Stopping">
+            <summary>
+            In stopping
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.SessionHandler`1">
+            <summary>
+            Used for session level event handler
+            </summary>
+            <typeparam name="TAppSession">the type of the target session</typeparam>
+            <param name="session">the target session</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.SessionHandler`2">
+            <summary>
+            Used for session level event handler
+            </summary>
+            <typeparam name="TAppSession">the type of the target session</typeparam>
+            <typeparam name="TParam">the target session</typeparam>
+            <param name="session">the target session</param>
+            <param name="value">the event parameter</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.SocketMode">
+            <summary>
+            Socket server running mode
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.SocketMode.Tcp">
+            <summary>
+            Tcp mode
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketBase.SocketMode.Udp">
+            <summary>
+            Udp mode
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.AppServer">
+            <summary>
+            AppServer class
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.AppServer`1">
+            <summary>
+            AppServer class
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.AppServer`2">
+            <summary>
+            AppServer basic class
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServer`2"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.#ctor(SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{`1})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServer`2"/> class.
+            </summary>
+            <param name="protocol">The protocol.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.Start">
+            <summary>
+            Starts this AppServer instance.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.RegisterSession(System.String,`0)">
+            <summary>
+            Registers the session into the session container.
+            </summary>
+            <param name="sessionID">The session ID.</param>
+            <param name="appSession">The app session.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.GetAppSessionByID(System.String)">
+            <summary>
+            Gets the app session by ID.
+            </summary>
+            <param name="sessionID">The session ID.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.GetSessionByID(System.String)">
+            <summary>
+            Gets the app session by ID.
+            </summary>
+            <param name="sessionID">The session ID.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.OnSessionClosed(`0,SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Called when [socket session closed].
+            </summary>
+            <param name="session">The session.</param>
+            <param name="reason">The reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.ClearIdleSession(System.Object)">
+            <summary>
+            Clears the idle session.
+            </summary>
+            <param name="state">The state.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.GetSessions(System.Func{`0,System.Boolean})">
+            <summary>
+            Gets the matched sessions from sessions snapshot.
+            </summary>
+            <param name="critera">The prediction critera.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.GetAllSessions">
+            <summary>
+            Gets all sessions in sessions snapshot.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`2.Stop">
+            <summary>
+            Stops this instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppServer`2.SessionCount">
+            <summary>
+            Gets the total session count.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServer`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer`1.#ctor(SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{SuperSocket.SocketBase.Protocol.StringRequestInfo})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServer`1"/> class.
+            </summary>
+            <param name="receiveFilterFactory">The Receive filter factory.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServer"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppServer.#ctor(SuperSocket.SocketBase.Protocol.IReceiveFilterFactory{SuperSocket.SocketBase.Protocol.StringRequestInfo})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppServer"/> class.
+            </summary>
+            <param name="receiveFilterFactory">The Receive filter factory.</param>
+        </member>
+        <member name="T:SuperSocket.SocketBase.AppSession`2">
+            <summary>
+            AppSession base class
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppSession`2"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Initialize(SuperSocket.SocketBase.IAppServer{`0,`1},SuperSocket.SocketBase.ISocketSession)">
+            <summary>
+            Initializes the specified app session by AppServer and SocketSession.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="socketSession">The socket session.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.SuperSocket#SocketBase#IAppSession#StartSession">
+            <summary>
+            Starts the session.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.OnInit">
+            <summary>
+            Called when [init].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.OnSessionStarted">
+            <summary>
+            Called when [session started].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.OnSessionClosed(SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Called when [session closed].
+            </summary>
+            <param name="reason">The reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.HandleException(System.Exception)">
+            <summary>
+            Handles the exceptional error, it only handles application error.
+            </summary>
+            <param name="e">The exception.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.HandleUnknownRequest(`1)">
+            <summary>
+            Handles the unknown request.
+            </summary>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Close(SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Closes the session by the specified reason.
+            </summary>
+            <param name="reason">The close reason.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Close">
+            <summary>
+            Closes this session.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.TrySend(System.String)">
+            <summary>
+            Try to send the message to client.
+            </summary>
+            <param name="message">The message which will be sent.</param>
+            <returns>Indicate whether the message was pushed into the sending queue</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Send(System.String)">
+            <summary>
+            Sends the message to client.
+            </summary>
+            <param name="message">The message which will be sent.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.TrySend(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Try to send the data to client.
+            </summary>
+            <param name="data">The data which will be sent.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <returns>Indicate whether the message was pushed into the sending queue</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Send(System.Byte[],System.Int32,System.Int32)">
+            <summary>
+            Sends the data to client.
+            </summary>
+            <param name="data">The data which will be sent.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.TrySend(System.ArraySegment{System.Byte})">
+            <summary>
+            Try to send the data segment to client.
+            </summary>
+            <param name="segment">The segment which will be sent.</param>
+            <returns>Indicate whether the message was pushed into the sending queue</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Send(System.ArraySegment{System.Byte})">
+            <summary>
+            Sends the data segment to client.
+            </summary>
+            <param name="segment">The segment which will be sent.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.TrySend(System.Collections.Generic.IList{System.ArraySegment{System.Byte}})">
+            <summary>
+            Try to send the data segments to client.
+            </summary>
+            <param name="segments">The segments.</param>
+            <returns>Indicate whether the message was pushed into the sending queue; if it returns false, the sending queue may be full or the socket is not connected</returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Send(System.Collections.Generic.IList{System.ArraySegment{System.Byte}})">
+            <summary>
+            Sends the data segments to client.
+            </summary>
+            <param name="segments">The segments.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.Send(System.String,System.Object[])">
+            <summary>
+            Sends the response.
+            </summary>
+            <param name="message">The message which will be sent.</param>
+            <param name="paramValues">The parameter values.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.SetNextReceiveFilter(SuperSocket.SocketBase.Protocol.IReceiveFilter{`1})">
+            <summary>
+            Sets the next Receive filter which will be used when next data block received
+            </summary>
+            <param name="nextReceiveFilter">The next receive filter.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.GetMaxRequestLength">
+            <summary>
+            Gets the maximum allowed length of the request.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.FilterRequest(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Int32@,System.Int32@)">
+            <summary>
+            Filters the request.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <param name="rest">The rest, the size of the data which has not been processed</param>
+            <param name="offsetDelta">return offset delta of next receiving buffer.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`2.SuperSocket#SocketBase#IAppSession#ProcessRequest(System.Byte[],System.Int32,System.Int32,System.Boolean)">
+            <summary>
+            Processes the request data.
+            </summary>
+            <param name="readBuffer">The read buffer.</param>
+            <param name="offset">The offset.</param>
+            <param name="length">The length.</param>
+            <param name="toBeCopied">if set to <c>true</c> [to be copied].</param>
+            <returns>
+            return offset delta of next receiving buffer
+            </returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.AppServer">
+            <summary>
+            Gets the app server instance assosiated with the session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.SuperSocket#SocketBase#IAppSession#AppServer">
+            <summary>
+            Gets the app server instance assosiated with the session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.Charset">
+            <summary>
+            Gets or sets the charset which is used for transfering text message.
+            </summary>
+            <value>
+            The charset.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.Items">
+            <summary>
+            Gets the items dictionary, only support 10 items maximum
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.Connected">
+            <summary>
+            Gets a value indicating whether this <see cref="T:SuperSocket.SocketBase.IAppSession"/> is connected.
+            </summary>
+            <value>
+              <c>true</c> if connected; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.PrevCommand">
+            <summary>
+            Gets or sets the previous command.
+            </summary>
+            <value>
+            The prev command.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.CurrentCommand">
+            <summary>
+            Gets or sets the current executing command.
+            </summary>
+            <value>
+            The current command.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.SecureProtocol">
+            <summary>
+            Gets or sets the secure protocol of transportation layer.
+            </summary>
+            <value>
+            The secure protocol.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.LocalEndPoint">
+            <summary>
+            Gets the local listening endpoint.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.RemoteEndPoint">
+            <summary>
+            Gets the remote endpoint of client.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.Logger">
+            <summary>
+            Gets the logger.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.LastActiveTime">
+            <summary>
+            Gets or sets the last active time of the session.
+            </summary>
+            <value>
+            The last active time.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.StartTime">
+            <summary>
+            Gets the start time of the session.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.SessionID">
+            <summary>
+            Gets the session ID.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.SocketSession">
+            <summary>
+            Gets the socket session of the AppSession.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketBase.AppSession`2.Config">
+            <summary>
+            Gets the config of the server.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.AppSession`1">
+            <summary>
+            AppServer basic class for whose request infoe type is StringRequestInfo
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`1.#ctor">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppSession`1"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`1.#ctor(System.Boolean)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketBase.AppSession`1"/> class.
+            </summary>
+            <param name="appendNewLineForResponse">if set to <c>true</c> [append new line for response].</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`1.HandleUnknownRequest(SuperSocket.SocketBase.Protocol.StringRequestInfo)">
+            <summary>
+            Handles the unknown request.
+            </summary>
+            <param name="requestInfo">The request info.</param>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`1.ProcessSendingMessage(System.String)">
+            <summary>
+            Processes the sending message.
+            </summary>
+            <param name="rawMessage">The raw message.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`1.Send(System.String)">
+            <summary>
+            Sends the specified message.
+            </summary>
+            <param name="message">The message.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketBase.AppSession`1.Send(System.String,System.Object[])">
+            <summary>
+            Sends the response.
+            </summary>
+            <param name="message">The message.</param>
+            <param name="paramValues">The param values.</param>
+            <returns>Indicate whether the message was pushed into the sending queue</returns>
+        </member>
+        <member name="T:SuperSocket.SocketBase.AppSession">
+            <summary>
+            AppServer basic class for whose request infoe type is StringRequestInfo
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.StringCommandBase`1">
+            <summary>
+            A command type for whose request info type is StringRequestInfo
+            </summary>
+            <typeparam name="TAppSession">The type of the app session.</typeparam>
+        </member>
+        <member name="T:SuperSocket.SocketBase.Command.StringCommandBase">
+            <summary>
+            A command type for whose request info type is StringRequestInfo
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketBase.StatusInfoCollection">
+            <summary>
+            Status information collection
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketBase.StatusInfoCollection.GetValue``1(System.String,``0)">
+            <summary>
+            Gets the value.
+            </summary>
+            <typeparam name="T"></typeparam>
+            <param name="name">The name.</param>
+            <param name="defaultValue">The default value.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketBase.StatusInfoCollection.Values">
+            <summary>
+            Gets the values.
+            </summary>
+            <value>
+            The values.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.StatusInfoCollection.Name">
+            <summary>
+            Gets or sets the name.
+            </summary>
+            <value>
+            The name.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.StatusInfoCollection.Tag">
+            <summary>
+            Gets or sets the tag.
+            </summary>
+            <value>
+            The tag.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.StatusInfoCollection.CollectedTime">
+            <summary>
+            Gets or sets the collected time.
+            </summary>
+            <value>
+            The collected time.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketBase.StatusInfoCollection.Item(System.String)">
+            <summary>
+            Gets or sets the <see cref="T:System.Object"/> with the specified name.
+            </summary>
+            <value>
+            The <see cref="T:System.Object"/>.
+            </value>
+            <param name="name">The name.</param>
+            <returns></returns>
+        </member>
+    </members>
+</doc>
diff --git a/lib/SuperSocket.SocketBase.dll b/lib/SuperSocket.SocketBase.dll
new file mode 100644
index 0000000..c4827e6
--- /dev/null
+++ b/lib/SuperSocket.SocketBase.dll
Binary files differ
diff --git a/lib/SuperSocket.SocketEngine.XML b/lib/SuperSocket.SocketEngine.XML
new file mode 100644
index 0000000..23362bf
--- /dev/null
+++ b/lib/SuperSocket.SocketEngine.XML
@@ -0,0 +1,1291 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>SuperSocket.SocketEngine</name>
+    </assembly>
+    <members>
+        <member name="T:SuperSocket.SocketEngine.AppDomainAppServer">
+            <summary>
+            AppDomainAppServer
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.IsolationAppServer.InitializeLifetimeService">
+            <summary>
+            Obtains a lifetime service object to control the lifetime policy for this instance.
+            Return null, never expired
+            </summary>
+            <returns>
+            An object of type <see cref="T:System.Runtime.Remoting.Lifetime.ILease" /> used to control the lifetime policy for this instance. This is the current lifetime service object for this instance if one exists; otherwise, a new lifetime service object initialized to the value of the <see cref="P:System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseManagerPollTime" /> property.
+            </returns>
+            <PermissionSet>
+              <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="RemotingConfiguration, Infrastructure" />
+              </PermissionSet>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.IsolationAppServer.StatusMetadataExtended">
+            <summary>
+            Gets a value indicating whether [status metadata extended].
+            </summary>
+            <value>
+            <c>true</c> if [status metadata extended]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainAppServer.#ctor(System.String,SuperSocket.SocketBase.Metadata.StatusInfoAttribute[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.AppDomainAppServer"/> class.
+            </summary>
+            <param name="serverTypeName">Name of the server type.</param>
+            <param name="serverStatusMetadata">The server status metadata.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainAppServer.Start">
+            <summary>
+            Starts this server instance.
+            </summary>
+            <returns>
+            return true if start successfull, else false
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.WorkItemFactoryInfoLoader.ValidateProviderType(System.String)">
+            <summary>
+            Validates the type of the provider, needn't validate in default mode, because it will be validate later when initializing.
+            </summary>
+            <param name="typeName">Name of the type.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.WorkItemFactoryInfoLoader.GetServerTypeMetadata(System.String)">
+            <summary>
+            Gets the app server type's metadata, the return value is not required in this mode.
+            </summary>
+            <param name="typeName">Name of the type.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.WorkItemFactoryInfoLoader.Dispose">
+            <summary>
+            Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.DefaultBootstrap">
+            <summary>
+            SuperSocket default bootstrap
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketEngine.DefaultBootstrap.m_Initialized">
+            <summary>
+            Indicates whether the bootstrap is initialized
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketEngine.DefaultBootstrap.m_Config">
+            <summary>
+            Global configuration
+            </summary>
+        </member>
+        <member name="F:SuperSocket.SocketEngine.DefaultBootstrap.m_GlobalLog">
+            <summary>
+            Global log
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.#ctor(System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.IWorkItem})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.DefaultBootstrap"/> class.
+            </summary>
+            <param name="appServers">The app servers.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.#ctor(SuperSocket.SocketBase.Config.IRootConfig,System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.IWorkItem})">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.DefaultBootstrap"/> class.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="appServers">The app servers.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.#ctor(SuperSocket.SocketBase.Config.IRootConfig,System.Collections.Generic.IEnumerable{SuperSocket.SocketBase.IWorkItem},SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.DefaultBootstrap"/> class.
+            </summary>
+            <param name="rootConfig">The root config.</param>
+            <param name="appServers">The app servers.</param>
+            <param name="logFactory">The log factory.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.#ctor(SuperSocket.SocketBase.Config.IConfigurationSource)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.DefaultBootstrap"/> class.
+            </summary>
+            <param name="config">The config.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.#ctor(SuperSocket.SocketBase.Config.IConfigurationSource,System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.DefaultBootstrap"/> class.
+            </summary>
+            <param name="config">The config.</param>
+            <param name="startupConfigFile">The startup config file.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.CreateWorkItemInstance(System.String,SuperSocket.SocketBase.Metadata.StatusInfoAttribute[])">
+            <summary>
+            Creates the work item instance.
+            </summary>
+            <param name="serviceTypeName">Name of the service type.</param>
+            <param name="serverStatusMetadata">The server status metadata.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.GetWorkItemFactoryInfoLoader(SuperSocket.SocketBase.Config.IConfigurationSource,SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Gets the work item factory info loader.
+            </summary>
+            <param name="config">The config.</param>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Initialize(System.Collections.Generic.IDictionary{System.String,System.Net.IPEndPoint})">
+            <summary>
+            Initializes the bootstrap with a listen endpoint replacement dictionary
+            </summary>
+            <param name="listenEndPointReplacement">The listen end point replacement.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Initialize(System.Func{SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Config.IServerConfig},SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes the bootstrap with the configuration, config resolver and log factory.
+            </summary>
+            <param name="serverConfigResolver">The server config resolver.</param>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Initialize(System.Func{SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Config.IServerConfig})">
+            <summary>
+            Initializes the bootstrap with the configuration and config resolver.
+            </summary>
+            <param name="serverConfigResolver">The server config resolver.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Initialize(SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Initialize">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Start">
+            <summary>
+            Starts this bootstrap.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Stop">
+            <summary>
+            Stops this bootstrap.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.RegisterRemotingService">
+            <summary>
+            Registers the bootstrap remoting access service.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Dispose(System.Boolean)">
+            <summary>
+            Releases unmanaged and - optionally - managed resources.
+            </summary>
+            <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.DefaultBootstrap.Dispose">
+            <summary>
+            Releases unmanaged and - optionally - managed resources.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.SuperSocket#SocketBase#ILoggerProvider#Logger">
+            <summary>
+            Gets the bootstrap logger.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.LogFactory">
+            <summary>
+            Gets the log factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.AppServers">
+            <summary>
+            Gets all the app servers running in this bootstrap
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.Config">
+            <summary>
+            Gets the config.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.StartupConfigFile">
+            <summary>
+            Gets the startup config file.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.PerfMonitor">
+            <summary>
+            Gets the <see cref="T:SuperSocket.SocketEngine.PerformanceMonitor"/> class.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.DefaultBootstrap.BaseDirectory">
+            <summary>
+            Gets the base directory.
+            </summary>
+            <value>
+            The base directory.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.AppDomainBootstrap">
+            <summary>
+            AppDomainBootstrap
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.#ctor(SuperSocket.SocketBase.Config.IConfigurationSource)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.AppDomainBootstrap"/> class.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Initialize">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Initialize(System.Func{SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Config.IServerConfig})">
+            <summary>
+            Initializes the bootstrap with the configuration and config resolver.
+            </summary>
+            <param name="serverConfigResolver">The server config resolver.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Initialize(SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes the bootstrap with the configuration and config resolver.
+            </summary>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Initialize(System.Collections.Generic.IDictionary{System.String,System.Net.IPEndPoint})">
+            <summary>
+            Initializes the bootstrap with a listen endpoint replacement dictionary
+            </summary>
+            <param name="listenEndPointReplacement">The listen end point replacement.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Initialize(System.Func{SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Config.IServerConfig},SuperSocket.SocketBase.Logging.ILogFactory)">
+            <summary>
+            Initializes the bootstrap with the configuration
+            </summary>
+            <param name="serverConfigResolver">The server config resolver.</param>
+            <param name="logFactory">The log factory.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Start">
+            <summary>
+            Starts this bootstrap.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AppDomainBootstrap.Stop">
+            <summary>
+            Stops this bootstrap.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.AppDomainBootstrap.AppServers">
+            <summary>
+            Gets all the app servers running in this bootstrap
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.AppDomainBootstrap.Config">
+            <summary>
+            Gets the config.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.AppDomainBootstrap.SuperSocket#SocketBase#ILoggerProvider#Logger">
+            <summary>
+            Gets the bootstrap logger.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.AppDomainBootstrap.StartupConfigFile">
+            <summary>
+            Gets the startup config file.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.AssemblyImport">
+            <summary>
+            AssemblyImport, used for importing assembly to the current AppDomain
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AssemblyImport.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.AssemblyImport"/> class.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.BootstrapFactory">
+            <summary>
+            Bootstrap Factory
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.BootstrapFactory.CreateBootstrap(SuperSocket.SocketBase.Config.IConfigurationSource)">
+            <summary>
+            Creates the bootstrap.
+            </summary>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.BootstrapFactory.CreateBootstrap">
+            <summary>
+            Creates the bootstrap from app configuration's socketServer section.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.BootstrapFactory.CreateBootstrap(System.String)">
+            <summary>
+            Creates the bootstrap.
+            </summary>
+            <param name="configSectionName">Name of the config section.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.BootstrapFactory.CreateBootstrapFromConfigFile(System.String)">
+            <summary>
+            Creates the bootstrap from configuration file.
+            </summary>
+            <param name="configFile">The configuration file.</param>
+            <returns></returns>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.ConfigurationWatcher">
+            <summary>
+            The configuration file watcher, it is used for hot configuration updating
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.ConfigurationWatcher.Watch(System.Configuration.ConfigurationSection,SuperSocket.SocketBase.IBootstrap)">
+            <summary>
+            Watches the specified configuration section.
+            </summary>
+            <param name="configSection">The configuration section.</param>
+            <param name="bootstrap">The bootstrap.</param>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.CommandAssembly">
+            <summary>
+            Command assembly configuration element
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CommandAssembly.Assembly">
+            <summary>
+            Gets the assembly name.
+            </summary>
+            <value>
+            The assembly.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.CommandAssemblyCollection">
+            <summary>
+            Command assembly configuation collection
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.Server">
+            <summary>
+            Server, the port which is compatible with .Net 4.5 or higher
+            </summary>
+            <summary>
+            Server configuration
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.Server.GetChildConfig``1(System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.Server.OnDeserializeUnrecognizedAttribute(System.String,System.String)">
+            <summary>
+            Gets a value indicating whether an unknown attribute is encountered during deserialization.
+            To keep compatible with old configuration
+            </summary>
+            <param name="name">The name of the unrecognized attribute.</param>
+            <param name="value">The value of the unrecognized attribute.</param>
+            <returns>
+            true when an unknown attribute is encountered while deserializing; otherwise, false.
+            </returns>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.DefaultCulture">
+            <summary>
+            Gets/sets the default culture for this server.
+            </summary>
+            <value>
+            The default culture.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ServerTypeName">
+            <summary>
+            Gets the name of the server type this appServer want to use.
+            </summary>
+            <value>
+            The name of the server type.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ServerType">
+            <summary>
+            Gets the type definition of the appserver.
+            </summary>
+            <value>
+            The type of the server.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ReceiveFilterFactory">
+            <summary>
+            Gets the Receive filter factory.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Ip">
+            <summary>
+            Gets the ip.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Port">
+            <summary>
+            Gets the port.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Mode">
+            <summary>
+            Gets the mode.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Disabled">
+            <summary>
+            Gets a value indicating whether this <see cref="T:SuperSocket.SocketBase.Config.IServerConfig"/> is disabled.
+            </summary>
+            <value>
+              <c>true</c> if disabled; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.SendTimeOut">
+            <summary>
+            Gets the send time out.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.MaxConnectionNumber">
+            <summary>
+            Gets the max connection number.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ReceiveBufferSize">
+            <summary>
+            Gets the size of the receive buffer.
+            </summary>
+            <value>
+            The size of the receive buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.SendBufferSize">
+            <summary>
+            Gets the size of the send buffer.
+            </summary>
+            <value>
+            The size of the send buffer.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.SyncSend">
+            <summary>
+            Gets a value indicating whether sending is in synchronous mode.
+            </summary>
+            <value>
+              <c>true</c> if [sync send]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.LogCommand">
+            <summary>
+            Gets a value indicating whether log command in log file.
+            </summary>
+            <value><c>true</c> if log command; otherwise, <c>false</c>.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.LogBasicSessionActivity">
+            <summary>
+            Gets a value indicating whether [log basic session activity like connected and disconnected].
+            </summary>
+            <value>
+            	<c>true</c> if [log basic session activity]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.LogAllSocketException">
+            <summary>
+            Gets a value indicating whether [log all socket exception].
+            </summary>
+            <value>
+            <c>true</c> if [log all socket exception]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ClearIdleSession">
+            <summary>
+            Gets a value indicating whether clear idle session.
+            </summary>
+            <value><c>true</c> if clear idle session; otherwise, <c>false</c>.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ClearIdleSessionInterval">
+            <summary>
+            Gets the clear idle session interval, in seconds.
+            </summary>
+            <value>The clear idle session interval.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.IdleSessionTimeOut">
+            <summary>
+            Gets the idle session timeout time length, in seconds.
+            </summary>
+            <value>The idle session time out.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.CertificateConfig">
+            <summary>
+            Gets the certificate config.
+            </summary>
+            <value>The certificate config.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Certificate">
+            <summary>
+            Gets X509Certificate configuration.
+            </summary>
+            <value>
+            X509Certificate configuration.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Security">
+            <summary>
+            Gets the security protocol, X509 certificate.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.MaxRequestLength">
+            <summary>
+            Gets the max allowed length of request.
+            </summary>
+            <value>
+            The max allowed length of request.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.DisableSessionSnapshot">
+            <summary>
+            Gets a value indicating whether [disable session snapshot]
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.SessionSnapshotInterval">
+            <summary>
+            Gets the interval to taking snapshot for all live sessions.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ConnectionFilter">
+            <summary>
+            Gets the connection filters used by this server instance.
+            </summary>
+            <value>
+            The connection filters's name list, seperated by comma
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.CommandLoader">
+            <summary>
+            Gets the command loader, multiple values should be separated by comma.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.KeepAliveTime">
+            <summary>
+            Gets the start keep alive time, in seconds
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.KeepAliveInterval">
+            <summary>
+            Gets the keep alive interval, in seconds.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.ListenBacklog">
+            <summary>
+            Gets the backlog size of socket listening.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.StartupOrder">
+            <summary>
+            Gets the startup order of the server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.SendingQueueSize">
+            <summary>
+            Gets/sets the size of the sending queue.
+            </summary>
+            <value>
+            The size of the sending queue.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.LogFactory">
+            <summary>
+            Gets the logfactory name of the server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.TextEncoding">
+            <summary>
+            Gets the default text encoding.
+            </summary>
+            <value>
+            The text encoding.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.Listeners">
+            <summary>
+            Gets the listeners' configuration.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.SuperSocket#SocketBase#Config#IServerConfig#Listeners">
+            <summary>
+            Gets the listeners' configuration.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Server.CommandAssemblies">
+            <summary>
+            Gets the command assemblies configuration.
+            </summary>
+            <value>
+            The command assemblies.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.SocketServiceConfig">
+            <summary>
+            SocketServiceConfig, the part which is compatible with .Net 4.5 or higher
+            </summary>
+            <summary>
+            SuperSocket's root configuration node
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.OnDeserializeUnrecognizedElement(System.String,System.Xml.XmlReader)">
+            <summary>
+            Gets a value indicating whether an unknown element is encountered during deserialization.
+            To keep compatible with old configuration
+            </summary>
+            <param name="elementName">The name of the unknown subelement.</param>
+            <param name="reader">The <see cref="T:System.Xml.XmlReader"/> being used for deserialization.</param>
+            <returns>
+            true when an unknown element is encountered while deserializing; otherwise, false.
+            </returns>
+            <exception cref="T:System.Configuration.ConfigurationErrorsException">The element identified by <paramref name="elementName"/> is locked.- or -One or more of the element's attributes is locked.- or -<paramref name="elementName"/> is unrecognized, or the element has an unrecognized attribute.- or -The element has a Boolean attribute with an invalid value.- or -An attempt was made to deserialize a property more than once.- or -An attempt was made to deserialize a property that is not a valid member of the element.- or -The element cannot contain a CDATA or text element.</exception>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.OnDeserializeUnrecognizedAttribute(System.String,System.String)">
+            <summary>
+            Gets a value indicating whether an unknown attribute is encountered during deserialization.
+            </summary>
+            <param name="name">The name of the unrecognized attribute.</param>
+            <param name="value">The value of the unrecognized attribute.</param>
+            <returns>
+            true when an unknown attribute is encountered while deserializing; otherwise, false.
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.GetChildConfig``1(System.String)">
+            <summary>
+            Gets the child config.
+            </summary>
+            <typeparam name="TConfig">The type of the config.</typeparam>
+            <param name="childConfigName">Name of the child config.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.DefaultCulture">
+            <summary>
+            Gets/sets the default culture for all server instances.
+            </summary>
+            <value>
+            The default culture.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.Servers">
+            <summary>
+            Gets all the server configurations
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.ServerTypes">
+            <summary>
+            Gets the service configurations
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.ConnectionFilters">
+            <summary>
+            Gets all the connection filter configurations.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.LogFactories">
+            <summary>
+            Gets the defined log factory types.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.ReceiveFilterFactories">
+            <summary>
+            Gets the logfactory name of the bootstrap.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.CommandLoaders">
+            <summary>
+            Gets the command loaders definition.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.MaxWorkingThreads">
+            <summary>
+            Gets the max working threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.MinWorkingThreads">
+            <summary>
+            Gets the min working threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.MaxCompletionPortThreads">
+            <summary>
+            Gets the max completion port threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.MinCompletionPortThreads">
+            <summary>
+            Gets the min completion port threads.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.PerformanceDataCollectInterval">
+            <summary>
+            Gets the performance data collect interval, in seconds.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.DisablePerformanceDataCollector">
+            <summary>
+            Gets a value indicating whether [disable performance data collector].
+            </summary>
+            <value>
+            	<c>true</c> if [disable performance data collector]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.Isolation">
+            <summary>
+            Gets the isolation mode.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.LogFactory">
+            <summary>
+            Gets the logfactory name of the bootstrap.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.SocketServiceConfig.OptionElements">
+            <summary>
+            Gets the option elements.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.IPerformanceMonitor">
+            <summary>
+            Interface of IPerformanceMonitor
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.IPerformanceMonitor.Start">
+            <summary>
+            Start PerformanceMonitor.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.IPerformanceMonitor.Stop">
+            <summary>
+            Stop PerformanceMonitor.
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketEngine.IPerformanceMonitor.OnStatusUpdate">
+            <summary>
+            Invokes when status update.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.IPerformanceMonitor.StatusUpdateInterval">
+            <summary>
+            Get or Set status update time in seconds.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.IProcessServer">
+            <summary>
+            the interface for server instance which works as a process
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.IProcessServer.ProcessId">
+            <summary>
+            Gets the process id.
+            </summary>
+            <value>
+            The process id. If the process id is zero, the server instance is not running
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.IRemoteWorkItem">
+            <summary>
+            IRemoteWorkItem
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.IRemoteWorkItem.Setup(System.String,System.String,System.String,SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Provider.ProviderFactoryInfo[],System.String)">
+            <summary>
+            Setups the specified config.
+            </summary>
+            <param name="serverType">Type of the server.</param>
+            <param name="bootstrapUri">The bootstrap URI.</param>
+            <param name="assemblyImportRoot">The assembly import root.</param>
+            <param name="config">The config.</param>
+            <param name="factories">The factories.</param>
+            <param name="startupConfigFile">The startup configuration file path</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.ProcessAppServer.#ctor(System.String,SuperSocket.SocketBase.Metadata.StatusInfoAttribute[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.ProcessAppServer"/> class.
+            </summary>
+            <param name="serverTypeName">Name of the server type.</param>
+            <param name="serverStatusMetadata">The server status metadata.</param>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.ProcessAppServer.ProcessId">
+            <summary>
+            Gets the process id.
+            </summary>
+            <value>
+            The process id. If the process id is zero, the server instance is not running
+            </value>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.ProcessBootstrap.#ctor(SuperSocket.SocketBase.Config.IConfigurationSource)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.ProcessBootstrap"/> class.
+            </summary>
+            <param name="config">The config.</param>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.SocketSession">
+            <summary>
+            Socket Session, all application session should base on this class
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.LogError(System.Exception,System.String,System.String,System.Int32)">
+            <summary>
+            Logs the error, skip the ignored exception
+            </summary>
+            <param name="exception">The exception.</param>
+            <param name="caller">The caller.</param>
+            <param name="callerFilePath">The caller file path.</param>
+            <param name="callerLineNumber">The caller line number.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.LogError(System.String,System.Exception,System.String,System.String,System.Int32)">
+            <summary>
+            Logs the error, skip the ignored exception
+            </summary>
+            <param name="message">The message.</param>
+            <param name="exception">The exception.</param>
+            <param name="caller">The caller.</param>
+            <param name="callerFilePath">The caller file path.</param>
+            <param name="callerLineNumber">The caller line number.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.LogError(System.Int32,System.String,System.String,System.Int32)">
+            <summary>
+            Logs the socket error, skip the ignored error
+            </summary>
+            <param name="socketErrorCode">The socket error code.</param>
+            <param name="caller">The caller.</param>
+            <param name="callerFilePath">The caller file path.</param>
+            <param name="callerLineNumber">The caller line number.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.Start">
+            <summary>
+            Starts this session.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.StartSession">
+            <summary>
+            Says the welcome information when a client connectted.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.OnClosed(SuperSocket.SocketBase.CloseReason)">
+            <summary>
+            Called when [close].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.TrySend(System.Collections.Generic.IList{System.ArraySegment{System.Byte}})">
+            <summary>
+            Tries to send array segment.
+            </summary>
+            <param name="segments">The segments.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.TrySend(System.ArraySegment{System.Byte})">
+            <summary>
+            Tries to send array segment.
+            </summary>
+            <param name="segment">The segment.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.SendAsync(SuperSocket.Common.SendingQueue)">
+            <summary>
+            Sends in async mode.
+            </summary>
+            <param name="queue">The queue.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.SendSync(SuperSocket.Common.SendingQueue)">
+            <summary>
+            Sends in sync mode.
+            </summary>
+            <param name="queue">The queue.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketSession.ValidateNotInSendingReceiving">
+            <summary>
+            Validates the socket is not in the sending or receiving operation.
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.SessionID">
+            <summary>
+            Gets or sets the session ID.
+            </summary>
+            <value>The session ID.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.Config">
+            <summary>
+            Gets or sets the config.
+            </summary>
+            <value>
+            The config.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.Closed">
+            <summary>
+            Occurs when [closed].
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.Client">
+            <summary>
+            Gets or sets the client.
+            </summary>
+            <value>The client.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.LocalEndPoint">
+            <summary>
+            Gets the local end point.
+            </summary>
+            <value>The local end point.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.RemoteEndPoint">
+            <summary>
+            Gets the remote end point.
+            </summary>
+            <value>The remote end point.</value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketSession.SecureProtocol">
+            <summary>
+            Gets or sets the secure protocol.
+            </summary>
+            <value>The secure protocol.</value>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.MarshalAppServer.#ctor(System.String)">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.AppDomainAppServer"/> class.
+            </summary>
+            <param name="serviceTypeName">Name of the service type.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.MarshalAppServer.Setup(SuperSocket.SocketBase.IBootstrap,SuperSocket.SocketBase.Config.IServerConfig,SuperSocket.SocketBase.Provider.ProviderFactoryInfo[])">
+            <summary>
+            Setups the specified root config.
+            </summary>
+            <param name="bootstrap">The bootstrap.</param>
+            <param name="config">The socket server instance config.</param>
+            <param name="factories">The providers.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.MarshalAppServer.ReportPotentialConfigChange(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Reports the potential configuration change.
+            </summary>
+            <param name="config">The server config which may be changed.</param>
+            <exception cref="T:System.NotImplementedException"></exception>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.MarshalAppServer.Start">
+            <summary>
+            Starts this server instance.
+            </summary>
+            <returns>
+            return true if start successfull, else false
+            </returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.MarshalAppServer.Stop">
+            <summary>
+            Stops this server instance.
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.MarshalAppServer.InitializeLifetimeService">
+            <summary>
+            Obtains a lifetime service object to control the lifetime policy for this instance.
+            </summary>
+            <returns>
+            An object of type <see cref="T:System.Runtime.Remoting.Lifetime.ILease" /> used to control the lifetime policy for this instance. This is the current lifetime service object for this instance if one exists; otherwise, a new lifetime service object initialized to the value of the <see cref="P:System.Runtime.Remoting.Lifetime.LifetimeServices.LeaseManagerPollTime" /> property.
+            </returns>
+            <PermissionSet>
+              <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="RemotingConfiguration, Infrastructure" />
+              </PermissionSet>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.MarshalAppServer.Name">
+            <summary>
+            Gets the name of the server instance.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.MarshalAppServer.Config">
+            <summary>
+            Gets the server's config.
+            </summary>
+            <value>
+            The server's config.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.MarshalAppServer.State">
+            <summary>
+            Gets the current state of the work item.
+            </summary>
+            <value>
+            The state.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.MarshalAppServer.SessionCount">
+            <summary>
+            Gets the total session count.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.ISocketListener">
+            <summary>
+            The interface for socket listener
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.ISocketListener.Start(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Starts to listen
+            </summary>
+            <param name="config">The server config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.ISocketListener.Stop">
+            <summary>
+            Stops listening
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.ISocketListener.Info">
+            <summary>
+            Gets the info of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.ISocketListener.EndPoint">
+            <summary>
+            Gets the end point the listener is working on
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketEngine.ISocketListener.NewClientAccepted">
+            <summary>
+            Occurs when new client accepted.
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketEngine.ISocketListener.Error">
+            <summary>
+            Occurs when error got.
+            </summary>
+        </member>
+        <member name="E:SuperSocket.SocketEngine.ISocketListener.Stopped">
+            <summary>
+            Occurs when [stopped].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketListenerBase.Start(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Starts to listen
+            </summary>
+            <param name="config">The server config.</param>
+            <returns></returns>
+        </member>
+        <member name="E:SuperSocket.SocketEngine.SocketListenerBase.Stopped">
+            <summary>
+            Occurs when [stopped].
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.TcpAsyncSocketListener">
+            <summary>
+            Tcp socket listener in async mode
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.TcpAsyncSocketListener.Start(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Starts to listen
+            </summary>
+            <param name="config">The server config.</param>
+            <returns></returns>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.SocketServerBase.SendingQueuePool">
+            <summary>
+            Gets the sending queue manager.
+            </summary>
+            <value>
+            The sending queue manager.
+            </value>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.INegotiateSocketSession">
+            <summary>
+            The interface for socket session which requires negotiation before communication
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.INegotiateSocketSession.Negotiate">
+            <summary>
+            Start negotiates
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.INegotiateSocketSession.Result">
+            <summary>
+            Gets a value indicating whether this <see cref="T:SuperSocket.SocketEngine.INegotiateSocketSession"/> is result.
+            </summary>
+            <value>
+              <c>true</c> if result; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.INegotiateSocketSession.AppSession">
+            <summary>
+            Gets the app session.
+            </summary>
+            <value>
+            The app session.
+            </value>
+        </member>
+        <member name="E:SuperSocket.SocketEngine.INegotiateSocketSession.NegotiateCompleted">
+            <summary>
+            Occurs when [negotiate completed].
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.AsyncStreamSocketSession.Start">
+            <summary>
+            Starts this session communication.
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.CertificateConfig">
+            <summary>
+            Certificate configuration
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.FilePath">
+            <summary>
+            Gets the certificate file path.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.Password">
+            <summary>
+            Gets the password.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.StoreName">
+            <summary>
+            Gets the the store where certificate locates.
+            </summary>
+            <value>
+            The name of the store.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.StoreLocation">
+            <summary>
+            Gets the store location of the certificate.
+            </summary>
+            <value>
+            The store location.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.Thumbprint">
+            <summary>
+            Gets the thumbprint.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.ClientCertificateRequired">
+            <summary>
+            Gets a value indicating whether [client certificate required].
+            </summary>
+            <value>
+            <c>true</c> if [client certificate required]; otherwise, <c>false</c>.
+            </value>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.CertificateConfig.KeyStorageFlags">
+            <summary>
+            Gets a value that will be used to instantiate the X509Certificate2 object in the CertificateManager
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.Listener">
+            <summary>
+            Listener configuration
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Listener.Ip">
+            <summary>
+            Gets the ip of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Listener.Port">
+            <summary>
+            Gets the port of listener
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Listener.Backlog">
+            <summary>
+            Gets the backlog.
+            </summary>
+        </member>
+        <member name="P:SuperSocket.SocketEngine.Configuration.Listener.Security">
+            <summary>
+            Gets the security option, None/Default/Tls/Ssl/...
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.ListenerConfigCollection">
+            <summary>
+            Listener configuration collection
+            </summary>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.Configuration.ServerCollection">
+            <summary>
+            Server configuration collection
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.ServerCollection.AddNew(SuperSocket.SocketEngine.Configuration.Server)">
+            <summary>
+            Adds the new server element.
+            </summary>
+            <param name="newServer">The new server.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.Configuration.ServerCollection.Remove(System.String)">
+            <summary>
+            Removes the specified server from the configuration.
+            </summary>
+            <param name="name">The name.</param>
+        </member>
+        <member name="T:SuperSocket.SocketEngine.SocketServerFactory">
+            <summary>
+            Default socket server factory
+            </summary>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.SocketServerFactory.CreateSocketServer``1(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.ListenerInfo[],SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Creates the socket server.
+            </summary>
+            <typeparam name="TRequestInfo">The type of the request info.</typeparam>
+            <param name="appServer">The app server.</param>
+            <param name="listeners">The listeners.</param>
+            <param name="config">The config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.UdpSocketListener.Start(SuperSocket.SocketBase.Config.IServerConfig)">
+            <summary>
+            Starts to listen
+            </summary>
+            <param name="config">The server config.</param>
+            <returns></returns>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.UdpSocketServer`1.#ctor(SuperSocket.SocketBase.IAppServer,SuperSocket.SocketBase.ListenerInfo[])">
+            <summary>
+            Initializes a new instance of the <see cref="T:SuperSocket.SocketEngine.UdpSocketServer`1"/> class.
+            </summary>
+            <param name="appServer">The app server.</param>
+            <param name="listeners">The listeners.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.UdpSocketServer`1.OnNewClientAccepted(SuperSocket.SocketEngine.ISocketListener,System.Net.Sockets.Socket,System.Object)">
+            <summary>
+            Called when [new client accepted].
+            </summary>
+            <param name="listener">The listener.</param>
+            <param name="client">The client.</param>
+            <param name="state">The state.</param>
+        </member>
+        <member name="M:SuperSocket.SocketEngine.UdpSocketSession.UpdateRemoteEndPoint(System.Net.IPEndPoint)">
+            <summary>
+            Updates the remote end point of the client.
+            </summary>
+            <param name="remoteEndPoint">The remote end point.</param>
+        </member>
+    </members>
+</doc>
diff --git a/lib/SuperSocket.SocketEngine.dll b/lib/SuperSocket.SocketEngine.dll
new file mode 100644
index 0000000..a7ae3dc
--- /dev/null
+++ b/lib/SuperSocket.SocketEngine.dll
Binary files differ
diff --git a/lib/_log4net.dll b/lib/_log4net.dll
new file mode 100644
index 0000000..5752c20
--- /dev/null
+++ b/lib/_log4net.dll
Binary files differ
diff --git a/lib/log4net.xml b/lib/_log4net.xml
similarity index 100%
rename from lib/log4net.xml
rename to lib/_log4net.xml
diff --git a/lib/log4net.dll b/lib/log4net.dll
index 5752c20..47cd9ad 100644
--- a/lib/log4net.dll
+++ b/lib/log4net.dll
Binary files differ

--
Gitblit v1.9.1