diff --git a/.vs/HaoYueTunnel/DesignTimeBuild/.dtbcache.v2 b/.vs/HaoYueTunnel/DesignTimeBuild/.dtbcache.v2
new file mode 100644
index 0000000..1c18fe8
Binary files /dev/null and b/.vs/HaoYueTunnel/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/.vs/HaoYueTunnel/FileContentIndex/3fa00544-7afd-4e10-98bf-b82142d3c7b5.vsidx b/.vs/HaoYueTunnel/FileContentIndex/3fa00544-7afd-4e10-98bf-b82142d3c7b5.vsidx
new file mode 100644
index 0000000..fc8406e
Binary files /dev/null and b/.vs/HaoYueTunnel/FileContentIndex/3fa00544-7afd-4e10-98bf-b82142d3c7b5.vsidx differ
diff --git a/.vs/HaoYueTunnel/FileContentIndex/5282eab2-88f3-41ac-9e60-037f1c0bc865.vsidx b/.vs/HaoYueTunnel/FileContentIndex/5282eab2-88f3-41ac-9e60-037f1c0bc865.vsidx
new file mode 100644
index 0000000..937dcbe
Binary files /dev/null and b/.vs/HaoYueTunnel/FileContentIndex/5282eab2-88f3-41ac-9e60-037f1c0bc865.vsidx differ
diff --git a/.vs/HaoYueTunnel/FileContentIndex/5e08bad0-a808-4bc1-94da-9dced9583aac.vsidx b/.vs/HaoYueTunnel/FileContentIndex/5e08bad0-a808-4bc1-94da-9dced9583aac.vsidx
new file mode 100644
index 0000000..d173bef
Binary files /dev/null and b/.vs/HaoYueTunnel/FileContentIndex/5e08bad0-a808-4bc1-94da-9dced9583aac.vsidx differ
diff --git a/.vs/HaoYueTunnel/FileContentIndex/e1a3c06a-cfd4-4b38-a1f0-102354003cbd.vsidx b/.vs/HaoYueTunnel/FileContentIndex/e1a3c06a-cfd4-4b38-a1f0-102354003cbd.vsidx
new file mode 100644
index 0000000..02f0727
Binary files /dev/null and b/.vs/HaoYueTunnel/FileContentIndex/e1a3c06a-cfd4-4b38-a1f0-102354003cbd.vsidx differ
diff --git a/.vs/HaoYueTunnel/FileContentIndex/read.lock b/.vs/HaoYueTunnel/FileContentIndex/read.lock
new file mode 100644
index 0000000..e69de29
diff --git a/.vs/HaoYueTunnel/v17/.suo b/.vs/HaoYueTunnel/v17/.suo
new file mode 100644
index 0000000..8f79ada
Binary files /dev/null and b/.vs/HaoYueTunnel/v17/.suo differ
diff --git a/.vs/ProjectEvaluation/haoyuetunnel.metadata.v5.2 b/.vs/ProjectEvaluation/haoyuetunnel.metadata.v5.2
new file mode 100644
index 0000000..ab2e491
Binary files /dev/null and b/.vs/ProjectEvaluation/haoyuetunnel.metadata.v5.2 differ
diff --git a/.vs/ProjectEvaluation/haoyuetunnel.projects.v5.2 b/.vs/ProjectEvaluation/haoyuetunnel.projects.v5.2
new file mode 100644
index 0000000..c5043ea
Binary files /dev/null and b/.vs/ProjectEvaluation/haoyuetunnel.projects.v5.2 differ
diff --git a/ClientCore/ClientCore.csproj b/ClientCore/ClientCore.csproj
new file mode 100644
index 0000000..e7e6f99
--- /dev/null
+++ b/ClientCore/ClientCore.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+ ..\NetLib\HaoYueNet.ClientNetwork.dll
+
+
+ ..\NetLib\protobuf-net.dll
+
+
+
+
diff --git a/ClientCore/Network/NetBase.cs b/ClientCore/Network/NetBase.cs
new file mode 100644
index 0000000..647ccc2
--- /dev/null
+++ b/ClientCore/Network/NetBase.cs
@@ -0,0 +1,33 @@
+using ProtoBuf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ClientCore
+{
+ public static class NetBase
+ {
+ //序列化
+ public static byte[] Serizlize(T MsgObj)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ Serializer.Serialize(ms, MsgObj);
+ byte[] data1 = ms.ToArray();
+ return data1;
+ }
+ }
+ //反序列化
+ public static T DeSerizlize(byte[] MsgObj)
+ {
+ using (MemoryStream ms = new MemoryStream(MsgObj))
+ {
+ var ds_obj = Serializer.Deserialize(ms);
+ return ds_obj;
+ }
+ }
+ }
+
+}
diff --git a/ClientCore/Network/NetworkHelper.cs b/ClientCore/Network/NetworkHelper.cs
new file mode 100644
index 0000000..6aaf407
--- /dev/null
+++ b/ClientCore/Network/NetworkHelper.cs
@@ -0,0 +1,79 @@
+using AxibugProtobuf;
+using HaoYueNet.ClientNetwork;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ClientCore
+{
+ ///
+ /// 继承网络库,以支持网络功能
+ ///
+ public class NetworkHelper : NetworkHelperCore
+ {
+ public NetworkHelper()
+ {
+ //指定接收服务器数据事件
+ OnDataCallBack += GetDataCallBack;
+ //断开连接
+ OnClose += OnConnectClose;
+ //网络库调试信息输出事件,用于打印连接断开,收发事件
+ OnLogOut += NetworkDeBugLog;
+ OnConnected += NetworkConnected;
+ }
+
+
+ public void NetworkConnected(bool IsConnect)
+ {
+ if (IsConnect)
+ NetworkDeBugLog("服务器连接成功");
+ else
+ {
+ NetworkDeBugLog("服务器连接失败");
+ //to do 重连逻辑
+ }
+ }
+
+ public void NetworkDeBugLog(string str)
+ {
+ //用于Unity内的输出
+ //Debug.Log("NetCoreDebug >> "+str);
+
+ Console.WriteLine("NetCoreDebug >> " + str);
+ }
+
+ ///
+ /// 接受包回调
+ ///
+ /// 协议ID
+ /// 错误编号
+ /// 业务数据
+ public void GetDataCallBack(int CMDID, int ERRCODE, byte[] data)
+ {
+ NetworkDeBugLog("收到消息 CMDID =>" + CMDID + " ERRCODE =>" + ERRCODE + " 数据长度=>" + data.Length);
+ try
+ {
+ //根据协议ID走不同逻辑
+ switch ((CommandID)CMDID)
+ {
+ case CommandID.CmdLogin: break;
+ }
+ }
+ catch (Exception ex)
+ {
+ NetworkDeBugLog("逻辑处理错误:" + ex.ToString());
+ }
+
+ }
+
+ ///
+ /// 关闭连接
+ ///
+ public void OnConnectClose()
+ {
+ NetworkDeBugLog("OnConnectClose");
+ }
+ }
+}
diff --git a/ClientCore/StaticComm.cs b/ClientCore/StaticComm.cs
new file mode 100644
index 0000000..23620ec
--- /dev/null
+++ b/ClientCore/StaticComm.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ClientCore
+{
+ public class StaticComm
+ {
+ public static string TokenStr;
+ public static long RID = -1;
+ public static string IP;
+ public static int Port;
+ public static NetworkHelper networkHelper;
+ }
+}
diff --git a/ClientCore/obj/ClientCore.csproj.nuget.dgspec.json b/ClientCore/obj/ClientCore.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..b9cf8ff
--- /dev/null
+++ b/ClientCore/obj/ClientCore.csproj.nuget.dgspec.json
@@ -0,0 +1,122 @@
+{
+ "format": 1,
+ "restore": {
+ "F:\\Sin365\\HaoYueTunnel\\ClientCore\\ClientCore.csproj": {}
+ },
+ "projects": {
+ "F:\\Sin365\\HaoYueTunnel\\ClientCore\\ClientCore.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\ClientCore\\ClientCore.csproj",
+ "projectName": "ClientCore",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ClientCore\\ClientCore.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\ClientCore\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ },
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "projectName": "Protobuf",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ClientCore/obj/ClientCore.csproj.nuget.g.props b/ClientCore/obj/ClientCore.csproj.nuget.g.props
new file mode 100644
index 0000000..b176dc5
--- /dev/null
+++ b/ClientCore/obj/ClientCore.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\35337\.nuget\packages\
+ PackageReference
+ 6.4.0
+
+
+
+
+
\ No newline at end of file
diff --git a/ClientCore/obj/ClientCore.csproj.nuget.g.targets b/ClientCore/obj/ClientCore.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/ClientCore/obj/ClientCore.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/ClientCore/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/ClientCore/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..4257f4b
--- /dev/null
+++ b/ClientCore/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.AssemblyInfo.cs b/ClientCore/obj/Debug/net7.0/ClientCore.AssemblyInfo.cs
new file mode 100644
index 0000000..a68b29f
--- /dev/null
+++ b/ClientCore/obj/Debug/net7.0/ClientCore.AssemblyInfo.cs
@@ -0,0 +1,23 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("ClientCore")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("ClientCore")]
+[assembly: System.Reflection.AssemblyTitleAttribute("ClientCore")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// 由 MSBuild WriteCodeFragment 类生成。
+
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.AssemblyInfoInputs.cache b/ClientCore/obj/Debug/net7.0/ClientCore.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..9348865
--- /dev/null
+++ b/ClientCore/obj/Debug/net7.0/ClientCore.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+9630890bec62ff48cb69f5f7a5e4a2d043a235d8
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.GeneratedMSBuildEditorConfig.editorconfig b/ClientCore/obj/Debug/net7.0/ClientCore.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..7467bf3
--- /dev/null
+++ b/ClientCore/obj/Debug/net7.0/ClientCore.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,11 @@
+is_global = true
+build_property.TargetFramework = net7.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = ClientCore
+build_property.ProjectDir = F:\Sin365\HaoYueTunnel\ClientCore\
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.GlobalUsings.g.cs b/ClientCore/obj/Debug/net7.0/ClientCore.GlobalUsings.g.cs
new file mode 100644
index 0000000..8578f3d
--- /dev/null
+++ b/ClientCore/obj/Debug/net7.0/ClientCore.GlobalUsings.g.cs
@@ -0,0 +1,8 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.assets.cache b/ClientCore/obj/Debug/net7.0/ClientCore.assets.cache
new file mode 100644
index 0000000..2a597f0
Binary files /dev/null and b/ClientCore/obj/Debug/net7.0/ClientCore.assets.cache differ
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.csproj.AssemblyReference.cache b/ClientCore/obj/Debug/net7.0/ClientCore.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..b85f380
Binary files /dev/null and b/ClientCore/obj/Debug/net7.0/ClientCore.csproj.AssemblyReference.cache differ
diff --git a/ClientCore/obj/Debug/net7.0/ClientCore.csproj.FileListAbsolute.txt b/ClientCore/obj/Debug/net7.0/ClientCore.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..e69de29
diff --git a/ClientCore/obj/project.assets.json b/ClientCore/obj/project.assets.json
new file mode 100644
index 0000000..0cf9efc
--- /dev/null
+++ b/ClientCore/obj/project.assets.json
@@ -0,0 +1,91 @@
+{
+ "version": 3,
+ "targets": {
+ "net7.0": {
+ "Protobuf/1.0.0": {
+ "type": "project",
+ "framework": ".NETCoreApp,Version=v7.0",
+ "compile": {
+ "bin/placeholder/Protobuf.dll": {}
+ },
+ "runtime": {
+ "bin/placeholder/Protobuf.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Protobuf/1.0.0": {
+ "type": "project",
+ "path": "../Protobuf/Protobuf.csproj",
+ "msbuildProject": "../Protobuf/Protobuf.csproj"
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net7.0": [
+ "Protobuf >= 1.0.0"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\35337\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\ClientCore\\ClientCore.csproj",
+ "projectName": "ClientCore",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ClientCore\\ClientCore.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\ClientCore\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/HaoYueTunnel.sln b/HaoYueTunnel.sln
new file mode 100644
index 0000000..c22ad0c
--- /dev/null
+++ b/HaoYueTunnel.sln
@@ -0,0 +1,50 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33403.182
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerCore", "ServerCore\ServerCore.csproj", "{D0235FE1-FE11-408B-8F4A-8D45BC376E35}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NetLib", "NetLib", "{86164379-C3F5-448C-AD1D-841AAC89EFB3}"
+ ProjectSection(SolutionItems) = preProject
+ NetLib\HaoYueNet.ClientNetwork.dll = NetLib\HaoYueNet.ClientNetwork.dll
+ NetLib\HaoYueNet.ServerNetwork.dll = NetLib\HaoYueNet.ServerNetwork.dll
+ NetLib\protobuf-net.dll = NetLib\protobuf-net.dll
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\Server.csproj", "{5C2CE565-BA8D-499D-8D7A-C4B8A9CDE35C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClientCore", "ClientCore\ClientCore.csproj", "{28ADA527-3403-4BAE-B919-633D107EDB3A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Protobuf", "Protobuf\Protobuf.csproj", "{07B4FB42-CA26-4C68-AFE8-47A50BABFB64}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {D0235FE1-FE11-408B-8F4A-8D45BC376E35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0235FE1-FE11-408B-8F4A-8D45BC376E35}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0235FE1-FE11-408B-8F4A-8D45BC376E35}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0235FE1-FE11-408B-8F4A-8D45BC376E35}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5C2CE565-BA8D-499D-8D7A-C4B8A9CDE35C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5C2CE565-BA8D-499D-8D7A-C4B8A9CDE35C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5C2CE565-BA8D-499D-8D7A-C4B8A9CDE35C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5C2CE565-BA8D-499D-8D7A-C4B8A9CDE35C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {28ADA527-3403-4BAE-B919-633D107EDB3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {28ADA527-3403-4BAE-B919-633D107EDB3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {28ADA527-3403-4BAE-B919-633D107EDB3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {28ADA527-3403-4BAE-B919-633D107EDB3A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {07B4FB42-CA26-4C68-AFE8-47A50BABFB64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {07B4FB42-CA26-4C68-AFE8-47A50BABFB64}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {07B4FB42-CA26-4C68-AFE8-47A50BABFB64}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {07B4FB42-CA26-4C68-AFE8-47A50BABFB64}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {DBCC6D00-779B-4CB0-A686-99B7EFC14E9C}
+ EndGlobalSection
+EndGlobal
diff --git a/NetLib/HaoYueNet.ClientNetwork.dll b/NetLib/HaoYueNet.ClientNetwork.dll
new file mode 100644
index 0000000..f4d164b
Binary files /dev/null and b/NetLib/HaoYueNet.ClientNetwork.dll differ
diff --git a/NetLib/HaoYueNet.ServerNetwork.dll b/NetLib/HaoYueNet.ServerNetwork.dll
new file mode 100644
index 0000000..41645de
Binary files /dev/null and b/NetLib/HaoYueNet.ServerNetwork.dll differ
diff --git a/NetLib/protobuf-net.dll b/NetLib/protobuf-net.dll
new file mode 100644
index 0000000..c0c2088
Binary files /dev/null and b/NetLib/protobuf-net.dll differ
diff --git a/Protobuf/Protobuf.csproj b/Protobuf/Protobuf.csproj
new file mode 100644
index 0000000..6392cc4
--- /dev/null
+++ b/Protobuf/Protobuf.csproj
@@ -0,0 +1,15 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+ ..\NetLib\protobuf-net.dll
+
+
+
+
diff --git a/Protobuf/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/Protobuf/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..4257f4b
--- /dev/null
+++ b/Protobuf/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
diff --git a/Protobuf/obj/Debug/net7.0/Protobuf.GlobalUsings.g.cs b/Protobuf/obj/Debug/net7.0/Protobuf.GlobalUsings.g.cs
new file mode 100644
index 0000000..8578f3d
--- /dev/null
+++ b/Protobuf/obj/Debug/net7.0/Protobuf.GlobalUsings.g.cs
@@ -0,0 +1,8 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/Protobuf/obj/Debug/net7.0/Protobuf.assets.cache b/Protobuf/obj/Debug/net7.0/Protobuf.assets.cache
new file mode 100644
index 0000000..25bed02
Binary files /dev/null and b/Protobuf/obj/Debug/net7.0/Protobuf.assets.cache differ
diff --git a/Protobuf/obj/Debug/net7.0/Protobuf.csproj.FileListAbsolute.txt b/Protobuf/obj/Debug/net7.0/Protobuf.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..e69de29
diff --git a/Protobuf/obj/Protobuf.csproj.nuget.dgspec.json b/Protobuf/obj/Protobuf.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..7bcac0a
--- /dev/null
+++ b/Protobuf/obj/Protobuf.csproj.nuget.dgspec.json
@@ -0,0 +1,63 @@
+{
+ "format": 1,
+ "restore": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {}
+ },
+ "projects": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "projectName": "Protobuf",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Protobuf/obj/Protobuf.csproj.nuget.g.props b/Protobuf/obj/Protobuf.csproj.nuget.g.props
new file mode 100644
index 0000000..b176dc5
--- /dev/null
+++ b/Protobuf/obj/Protobuf.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\35337\.nuget\packages\
+ PackageReference
+ 6.4.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Protobuf/obj/Protobuf.csproj.nuget.g.targets b/Protobuf/obj/Protobuf.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/Protobuf/obj/Protobuf.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/Protobuf/obj/project.assets.json b/Protobuf/obj/project.assets.json
new file mode 100644
index 0000000..0ce9b91
--- /dev/null
+++ b/Protobuf/obj/project.assets.json
@@ -0,0 +1,68 @@
+{
+ "version": 3,
+ "targets": {
+ "net7.0": {}
+ },
+ "libraries": {},
+ "projectFileDependencyGroups": {
+ "net7.0": []
+ },
+ "packageFolders": {
+ "C:\\Users\\35337\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "projectName": "Protobuf",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProtobufCore/Protoc-Tools/Enyim.Caching.dll b/ProtobufCore/Protoc-Tools/Enyim.Caching.dll
new file mode 100644
index 0000000..0e44cd7
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/Enyim.Caching.dll differ
diff --git a/ProtobufCore/Protoc-Tools/IKVM-LICENSE b/ProtobufCore/Protoc-Tools/IKVM-LICENSE
new file mode 100644
index 0000000..d3ae2c8
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/IKVM-LICENSE
@@ -0,0 +1,425 @@
+IMPORTANT NOTICE
+
+ Copyright (C) 1998-2008 Free Software Foundation, Inc.
+ Copyright (C) 1996-2012 Oracle and/or its affiliates
+ Copyright (C) 2002-2012 Jeroen Frijters
+
+ Some files in this distribution are part of GNU Classpath or OpenJDK and
+ are licensed under the GNU General Public License (GPL) version 2
+ with "Classpath" exception. This applies in particular to:
+ - IKVM.OpenJDK.*.dll
+ - some of the *.java files (see each file header for license)
+
+ See http://www.gnu.org/software/classpath/ for information on the
+ GNU Classpath license and "Classpath" exception.
+
+ See below for a full copy of the GPL license and the Sun version of the
+ "Classpath" exception.
+
+-----------------------------------------------------------------------------
+
+ Copyright (C) 2002-2012 Jeroen Frijters
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jeroen Frijters
+ jeroen@frijters.net
+
+-----------------------------------------------------------------------------
+
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users. This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it. (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights. These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have. You must
+make sure that they, too, receive or can get the source code. And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License. The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language. (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope. The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+ a) You must cause the modified files to carry prominent notices stating
+ that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in whole or
+ in part contains or is derived from the Program or any part thereof, to be
+ licensed as a whole at no charge to all third parties under the terms of
+ this License.
+
+ c) If the modified program normally reads commands interactively when run,
+ you must cause it, when started running for such interactive use in the
+ most ordinary way, to print or display an announcement including an
+ appropriate copyright notice and a notice that there is no warranty (or
+ else, saying that you provide a warranty) and that users may redistribute
+ the program under these conditions, and telling the user how to view a copy
+ of this License. (Exception: if the Program itself is interactive but does
+ not normally print such an announcement, your work based on the Program is
+ not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works. But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable source
+ code, which must be distributed under the terms of Sections 1 and 2 above
+ on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three years, to
+ give any third party, for a charge no more than your cost of physically
+ performing source distribution, a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of Sections 1
+ and 2 above on a medium customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer to
+ distribute corresponding source code. (This alternative is allowed only
+ for noncommercial distribution and only if you received the program in
+ object code or executable form with such an offer, in accord with
+ Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable. However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License. Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License. However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works. These actions are prohibited by law if you do not
+accept this License. Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein. You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time. Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission. For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+ One line to give the program's name and a brief idea of what it does.
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc., 59
+ Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+ with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free
+ software, and you are welcome to redistribute it under certain conditions;
+ type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary. Here
+is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ 'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ signature of Ty Coon, 1 April 1989
+
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+ Linking this library statically or dynamically with other modules is making
+ a combined work based on this library. Thus, the terms and conditions of
+ the GNU General Public License cover the whole combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent modules,
+ and to copy and distribute the resulting executable under terms of your
+ choice, provided that you also meet, for each linked independent module,
+ the terms and conditions of the license of that module. An independent
+ module is a module which is not derived from or based on this library. If
+ you modify this library, you may extend this exception to your version of
+ the library, but you are not obligated to do so. If you do not wish to do
+ so, delete this exception statement from your version.
+
+-----------------------------------------------------------------------------
+
+ -------------------------------------------------------------------------
+ $Id: LICENSE,v 1.7.4.1 2012/06/12 08:44:39 jfrijters Exp $
+ -------------------------------------------------------------------------
+ Copyright (c) 1999 Visual Numerics Inc. All Rights Reserved.
+
+ Permission to use, copy, modify, and distribute this software is freely
+ granted by Visual Numerics, Inc., provided that the copyright notice
+ above and the following warranty disclaimer are preserved in human
+ readable form.
+
+ Because this software is licenses free of charge, it is provided
+ "AS IS", with NO WARRANTY. TO THE EXTENT PERMITTED BY LAW, VNI
+ DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO ITS PERFORMANCE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ VNI WILL NOT BE LIABLE FOR ANY DAMAGES WHATSOEVER ARISING OUT OF THE USE
+ OF OR INABILITY TO USE THIS SOFTWARE, INCLUDING BUT NOT LIMITED TO DIRECT,
+ INDIRECT, SPECIAL, CONSEQUENTIAL, PUNITIVE, AND EXEMPLARY DAMAGES, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+ This Java code is based on C code in the package fdlibm,
+ which can be obtained from www.netlib.org.
+ The original fdlibm C code contains the following notice.
+
+ Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+ Developed at SunSoft, a Sun Microsystems, Inc. business.
+ Permission to use, copy, modify, and distribute this
+ software is freely granted, provided that this notice
+ is preserved.
+
+-----------------------------------------------------------------------------
diff --git a/ProtobufCore/Protoc-Tools/IKVM.Reflection.dll b/ProtobufCore/Protoc-Tools/IKVM.Reflection.dll
new file mode 100644
index 0000000..c2b777c
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/IKVM.Reflection.dll differ
diff --git a/ProtobufCore/Protoc-Tools/MiscUtil.dll b/ProtobufCore/Protoc-Tools/MiscUtil.dll
new file mode 100644
index 0000000..2c3cbbb
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/MiscUtil.dll differ
diff --git a/ProtobufCore/Protoc-Tools/NHibernate lgpl.txt b/ProtobufCore/Protoc-Tools/NHibernate lgpl.txt
new file mode 100644
index 0000000..866688d
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/NHibernate lgpl.txt
@@ -0,0 +1,460 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
diff --git a/ProtobufCore/Protoc-Tools/NHibernate.dll b/ProtobufCore/Protoc-Tools/NHibernate.dll
new file mode 100644
index 0000000..f8b0bc2
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/NHibernate.dll differ
diff --git a/ProtobufCore/Protoc-Tools/ProtoSharp.Core.dll b/ProtobufCore/Protoc-Tools/ProtoSharp.Core.dll
new file mode 100644
index 0000000..52dc1bd
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/ProtoSharp.Core.dll differ
diff --git a/ProtobufCore/Protoc-Tools/Protocol Buffers.ppt b/ProtobufCore/Protoc-Tools/Protocol Buffers.ppt
new file mode 100644
index 0000000..71dcfc7
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/Protocol Buffers.ppt differ
diff --git a/ProtobufCore/Protoc-Tools/bcl.proto b/ProtobufCore/Protoc-Tools/bcl.proto
new file mode 100644
index 0000000..35de280
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/bcl.proto
@@ -0,0 +1,53 @@
+// this is prototype only!!!
+
+package bcl;
+
+message TimeSpan {
+ optional sint64 value = 1; // the size of the timespan (in units of the selected scale)
+ optional TimeSpanScale scale = 2 [default = DAYS]; // the scale of the timespan
+ enum TimeSpanScale {
+ DAYS = 0;
+ HOURS = 1;
+ MINUTES = 2;
+ SECONDS = 3;
+ MILLISECONDS = 4;
+ TICKS = 5;
+
+ MINMAX = 15; // dubious
+ }
+}
+
+message DateTime {
+ optional sint64 value = 1; // the offset (in units of the selected scale) from 1970/01/01
+ optional TimeSpanScale scale = 2 [default = DAYS]; // the scale of the timespan
+ enum TimeSpanScale {
+ DAYS = 0;
+ HOURS = 1;
+ MINUTES = 2;
+ SECONDS = 3;
+ MILLISECONDS = 4;
+ TICKS = 5;
+
+ MINMAX = 15; // dubious
+ }
+}
+
+message NetObjectProxy {
+ optional int32 existingObjectKey = 1; // for a tracked object, the key of the **first** time this object was seen
+ optional int32 newObjectKey = 2; // for a tracked object, a **new** key, the first time this object is seen
+ optional int32 existingTypeKey = 3; // for dynamic typing, the key of the **first** time this type was seen
+ optional int32 newTypeKey = 4; // for dynamic typing, a **new** key, the first time this type is seen
+ optional string typeName = 8; // for dynamic typing, the name of the type (only present along with newTypeKey)
+ optional bytes payload = 10; // the new string/value (only present along with newObjectKey)
+}
+
+message Guid {
+ optional fixed64 lo = 1; // the first 8 bytes of the guid
+ optional fixed64 hi = 2; // the second 8 bytes of the guid
+}
+
+message Decimal {
+ optional uint64 lo = 1; // the first 64 bits of the underlying value
+ optional uint32 hi = 2; // the last 32 bis of the underlying value
+ optional uint32 signScale = 3; // the number of decimal digits (bits 1-16), and the sign (bit 0)
+}
\ No newline at end of file
diff --git a/ProtobufCore/Protoc-Tools/log4net.dll b/ProtobufCore/Protoc-Tools/log4net.dll
new file mode 100644
index 0000000..ffc57e1
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/log4net.dll differ
diff --git a/ProtobufCore/Protoc-Tools/nunit.framework.dll b/ProtobufCore/Protoc-Tools/nunit.framework.dll
new file mode 100644
index 0000000..d67143f
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/nunit.framework.dll differ
diff --git a/ProtobufCore/Protoc-Tools/nwind.groups.proto b/ProtobufCore/Protoc-Tools/nwind.groups.proto
new file mode 100644
index 0000000..ae89388
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/nwind.groups.proto
@@ -0,0 +1,5 @@
+package DAL;
+
+message Database {
+ repeated group Order Orders = 1;
+}
diff --git a/ProtobufCore/Protoc-Tools/nwind.groups.proto.bin b/ProtobufCore/Protoc-Tools/nwind.groups.proto.bin
new file mode 100644
index 0000000..4e6004e
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/nwind.groups.proto.bin differ
diff --git a/ProtobufCore/Protoc-Tools/nwind.proto b/ProtobufCore/Protoc-Tools/nwind.proto
new file mode 100644
index 0000000..bbc5cc7
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/nwind.proto
@@ -0,0 +1,31 @@
+package DAL;
+
+message Database {
+ repeated Order Orders = 1;
+}
+
+message Order {
+ optional int32 OrderID = 1;
+ optional string CustomerID = 2;
+ optional int32 EmployeeID = 3;
+ optional bcl.DateTime OrderDate = 4;
+ optional bcl.DateTime RequiredDate = 5;
+ optional bcl.DateTime ShippedDate = 6;
+ optional int32 ShipVia = 7;
+ optional bcl.Decimal Freight = 8;
+ optional string ShipName = 9;
+ optional string ShipAddress = 10;
+ optional string ShipCity = 11;
+ optional string ShipRegion = 12;
+ optional string ShipPostalCode = 13;
+ optional string ShipCountry = 14;
+ repeated OrderLine Lines = 15;
+}
+
+message OrderLine {
+ optional int32 OrderID = 1;
+ optional int32 ProductID = 2;
+ optional bcl.Decimal UnitPrice = 3;
+ optional sint32 Quantity = 4;
+ optional float Discount = 5;
+}
diff --git a/ProtobufCore/Protoc-Tools/nwind.proto.bin b/ProtobufCore/Protoc-Tools/nwind.proto.bin
new file mode 100644
index 0000000..b7484d2
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/nwind.proto.bin differ
diff --git a/ProtobufCore/Protoc-Tools/protoc-license.txt b/ProtobufCore/Protoc-Tools/protoc-license.txt
new file mode 100644
index 0000000..b462b56
--- /dev/null
+++ b/ProtobufCore/Protoc-Tools/protoc-license.txt
@@ -0,0 +1,15 @@
+Protocol Buffers - Google's data interchange format
+Copyright 2008 Google Inc.
+http://code.google.com/p/protobuf/
+
+This package contains a precompiled Win32 binary version of the protocol buffer
+compiler (protoc). This binary is intended for Windows users who want to
+use Protocol Buffers in Java or Python but do not want to compile protoc
+themselves. To install, simply place this binary somewhere in your PATH.
+
+This binary was built using MinGW, but the output is the same regardless of
+the C++ compiler used.
+
+You will still need to download the source code package in order to obtain the
+Java or Python runtime libraries. Get it from:
+ http://code.google.com/p/protobuf/downloads/
diff --git a/ProtobufCore/Protoc-Tools/protoc.exe b/ProtobufCore/Protoc-Tools/protoc.exe
new file mode 100644
index 0000000..db74054
Binary files /dev/null and b/ProtobufCore/Protoc-Tools/protoc.exe differ
diff --git a/ProtobufCore/Protocol Buffers - Google's data interchange format.txt b/ProtobufCore/Protocol Buffers - Google's data interchange format.txt
new file mode 100644
index 0000000..e69de29
diff --git a/ProtobufCore/Protogen-Tools/common.xslt b/ProtobufCore/Protogen-Tools/common.xslt
new file mode 100644
index 0000000..85c3721
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/common.xslt
@@ -0,0 +1,109 @@
+
+
+
+
+
+ Node not handled: /
+
+ ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ProtobufCore/Protogen-Tools/csharp.xslt b/ProtobufCore/Protogen-Tools/csharp.xslt
new file mode 100644
index 0000000..6cd9219
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/csharp.xslt
@@ -0,0 +1,628 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ //------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+
+
+
+
+
+using ;
+
+
+
+
+using ;
+
+
+
+
+
+
+ CSharp template for protobuf-net.
+ Options:
+ General:
+ "help" - this page
+ Additional serializer support:
+ "xml" - enable explicit xml support (XmlSerializer)
+ "datacontract" - enable data-contract support (DataContractSerializer; requires .NET 3.0)
+ "binary" - enable binary support (BinaryFormatter; not supported on Silverlight)
+ Other:
+ "protoRpc" - enable proto-rpc client
+ "observable" - change notification (observer pattern) support
+ "preObservable" - pre-change notification (observer pattern) support (requires .NET 3.5)
+ "partialMethods" - provide partial methods for changes (requires C# 3.0)
+ "detectMissing" - provide *Specified properties to indicate whether fields are present
+ "lightFramework" - omit additional attributes not included in CF/Silverlight
+ "asynchronous" - emit asynchronous methods for use with WCF
+ "clientProxy" - emit asynchronous client proxy class
+ "import" - additional namespaces to import (semicolon delimited)
+ "fixCase" - change type/member names (types/properties become PascalCase; fields become camelCase)
+
+
+
+
+
+ Invalid options: xml and data-contract serialization are mutually exclusive.
+
+
+
+// Option: xml serialization ([XmlType]/[XmlElement]) enabled
+
+// Option: data-contract serialization ([DataContract]/[DataMember]) enabled
+
+// Option: binary serialization (ISerializable) enabled
+
+// Option: observable (OnPropertyChanged) enabled
+
+// Option: pre-observable (OnPropertyChanging) enabled
+
+// Option: partial methods (On*Changing/On*Changed) enabled
+
+// Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled
+
+// Option: light framework (CF/Silverlight) enabled
+
+// Option: proto-rpc enabled
+
+
+
+
+
+
+
+
+
+// Generated from:
+
+
+
+
+
+
+
+namespace
+{
+
+
+}
+
+
+// Note: requires additional types generated from:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"")]
+ [global::System.Runtime.Serialization.DataContract(Name=@"")]
+ [global::System.Xml.Serialization.XmlType(TypeName=@"")]
+ public partial class : global::ProtoBuf.IExtensible, global::System.Runtime.Serialization.ISerializable, global::System.ComponentModel.INotifyPropertyChanged, global::System.ComponentModel.INotifyPropertyChanging
+ {
+ public () {}
+
+ protected (global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context)
+ : this() { global::ProtoBuf.Serializer.Merge(info, this); }
+ void global::System.Runtime.Serialization.ISerializable.GetObjectData(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context)
+ { global::ProtoBuf.Serializer.Serialize(info, this); }
+
+ public event global::System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+ protected virtual void OnPropertyChanged(string propertyName)
+ { if(PropertyChanged != null) PropertyChanged(this, new global::System.ComponentModel.PropertyChangedEventArgs(propertyName)); }
+
+ public event global::System.ComponentModel.PropertyChangingEventHandler PropertyChanging;
+ protected virtual void OnPropertyChanging(string propertyName)
+ { if(PropertyChanging != null) PropertyChanging(this, new global::System.ComponentModel.PropertyChangingEventArgs(propertyName)); }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [global::ProtoBuf.ProtoContract(Name=@"")]
+ [global::System.Runtime.Serialization.DataContract(Name=@"")]
+
+ [global::System.Xml.Serialization.XmlType(TypeName=@"")]
+ public enum
+ {
+
+ }
+
+
+
+
+
+ 0
+
+ [global::ProtoBuf.ProtoEnum(Name=@"", Value=)]
+ [global::System.Runtime.Serialization.EnumMember(Value=@"")]
+ [global::System.Xml.Serialization.XmlEnum(@"")]
+ = ,
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @
+
+ |abstract|as|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|
+
+
+
+ FixedSize
+ Group
+ TwosComplement
+ ZigZag
+ Default
+
+
+
+
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ class
+ class
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ none
+
+
+ Field type not implemented: (.)
+
+
+
+
+
+
+ double
+ double
+ float
+ long
+ ulong
+ int
+ ulong
+ uint
+ bool
+ string
+ byte[]
+ uint
+ int
+ long
+ int
+ long
+
+
+
+
+
+ Field type not implemented: (.)
+
+
+
+
+
+
+
+
+ @""
+ .
+
+
+ /*
+
+ */ null
+ ()
+
+
+
+
+
+
+
+
+ .
+ .
+
+
+
+
+
+
+
+
+
+ ""
+ null
+ null
+ .
+ default()
+
+
+
+ global::System.Obsolete,
+
+
+
+
+
+
+
+ ?
+ private = ;
+ [global::ProtoBuf.ProtoMember(, IsRequired = false, Name=@"", DataFormat = global::ProtoBuf.DataFormat.)]
+ [global::System.ComponentModel.DefaultValue()]
+ [global::System.Xml.Serialization.XmlElement(@"", Order = )]
+
+ [global::System.Runtime.Serialization.DataMember(Name=@"", Order = , IsRequired = false)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ private ;
+ [global::ProtoBuf.ProtoMember(, IsRequired = true, Name=@"", DataFormat = global::ProtoBuf.DataFormat.)]
+ [global::System.Xml.Serialization.XmlElement(@"", Order = )]
+
+ [global::System.Runtime.Serialization.DataMember(Name=@"", Order = , IsRequired = true)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ public
+ {
+ get { return ; }
+ set { OnChanging(value); OnPropertyChanging(@""); = value; OnPropertyChanged(@""); OnChanged();}
+ }
+ partial void OnChanging( value);
+ partial void OnChanged();
+ [global::System.Xml.Serialization.XmlIgnore]
+ [global::System.ComponentModel.Browsable(false)]
+ public bool Specified
+ {
+ get { return this. != null; }
+ set { if (value == (this.== null)) this. = value ? this. : ()null; }
+ }
+ private bool ShouldSerialize() { return Specified; }
+ private void Reset() { Specified = false; }
+
+
+
+
+
+
+ private readonly global::System.Collections.Generic.List<> = new global::System.Collections.Generic.List<>();
+ [global::ProtoBuf.ProtoMember(, Name=@"", DataFormat = global::ProtoBuf.DataFormat., Options = global::ProtoBuf.MemberSerializationOptions.Packed)]
+ [global::System.Runtime.Serialization.DataMember(Name=@"", Order = , IsRequired = false)]
+
+ [global::System.Xml.Serialization.XmlElement(@"", Order = )]
+
+ public global::System.Collections.Generic.List<>
+ {
+ get { return ; }
+ set { = value; }
+ }
+
+
+
+
+ [global::System.ServiceModel.ServiceContract(Name = @"")]
+ public interface I
+ {
+
+ }
+
+
+ public class Client : global::ProtoBuf.ServiceModel.RpcClient
+ {
+ public Client() : base(typeof(I)) { }
+
+ }
+
+
+
+
+
+
+
+ [global::System.ServiceModel.OperationContract(Name = @"")]
+ [global::ProtoBuf.ServiceModel.ProtoBehavior]
+
+ ( request);
+
+ [global::System.ServiceModel.OperationContract(AsyncPattern = true, Name = @"")]
+ global::System.IAsyncResult Begin( request, global::System.AsyncCallback callback, object state);
+ End(global::System.IAsyncResult ar);
+
+
+
+
+ ( request)
+ {
+ return () Send(@"", request);
+ }
+
+
+
+
+
+
+
+
+ public partial class CompletedEventArgs : global::System.ComponentModel.AsyncCompletedEventArgs
+ {
+ private object[] results;
+
+ public CompletedEventArgs(object[] results, global::System.Exception exception, bool cancelled, object userState)
+ : base(exception, cancelled, userState)
+ {
+ this.results = results;
+ }
+
+ public Result
+ {
+ get {
+ base.RaiseExceptionIfNecessary();
+ return ()(this.results[0]);
+ }
+ }
+ }
+
+
+
+
+
+
+
+ [global::System.Diagnostics.DebuggerStepThroughAttribute()]
+ public partial class Client : global::System.ServiceModel.ClientBase<I>, I
+ {
+
+ public Client()
+ {}
+ public Client(string endpointConfigurationName)
+ : base(endpointConfigurationName)
+ {}
+ public Client(string endpointConfigurationName, string remoteAddress)
+ : base(endpointConfigurationName, remoteAddress)
+ {}
+ public Client(string endpointConfigurationName, global::System.ServiceModel.EndpointAddress remoteAddress)
+ : base(endpointConfigurationName, remoteAddress)
+ {}
+ public Client(global::System.ServiceModel.Channels.Binding binding, global::System.ServiceModel.EndpointAddress remoteAddress)
+ : base(binding, remoteAddress)
+ {}
+
+
+ }
+
+
+
+
+
+ private BeginOperationDelegate onBeginDelegate;
+ private EndOperationDelegate onEndDelegate;
+ private global::System.Threading.SendOrPostCallback onCompletedDelegate;
+
+ public event global::System.EventHandler<CompletedEventArgs> Completed;
+
+ public ( request)
+ {
+ return base.Channel.(request);
+ }
+
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public global::System.IAsyncResult Begin( request, global::System.AsyncCallback callback, object asyncState)
+ {
+ return base.Channel.Begin(request, callback, asyncState);
+ }
+
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public End(global::System.IAsyncResult result)
+ {
+ return base.Channel.End(result);
+ }
+
+ private global::System.IAsyncResult OnBegin(object[] inValues, global::System.AsyncCallback callback, object asyncState)
+ {
+ request = (()(inValues[0]));
+ return this.Begin(request, callback, asyncState);
+ }
+
+ private object[] OnEnd(global::System.IAsyncResult result)
+ {
+ retVal = this.End(result);
+ return new object[] {
+ retVal};
+ }
+
+ private void OnCompleted(object state)
+ {
+ if ((this.Completed != null))
+ {
+ InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+ this.Completed(this, new CompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+ }
+ }
+
+ public void Async( request)
+ {
+ this.Async(request, null);
+ }
+
+ public void Async( request, object userState)
+ {
+ if ((this.onBeginDelegate == null))
+ {
+ this.onBeginDelegate = new BeginOperationDelegate(this.OnBegin);
+ }
+ if ((this.onEndDelegate == null))
+ {
+ this.onEndDelegate = new EndOperationDelegate(this.OnEnd);
+ }
+ if ((this.onCompletedDelegate == null))
+ {
+ this.onCompletedDelegate = new global::System.Threading.SendOrPostCallback(this.OnCompleted);
+ }
+ base.InvokeAsync(this.onBeginDelegate, new object[] {
+ request}, this.onEndDelegate, this.onCompletedDelegate, userState);
+ }
+
+
+
diff --git a/ProtobufCore/Protogen-Tools/protobuf-net.dll b/ProtobufCore/Protogen-Tools/protobuf-net.dll
new file mode 100644
index 0000000..ade23fd
Binary files /dev/null and b/ProtobufCore/Protogen-Tools/protobuf-net.dll differ
diff --git a/ProtobufCore/Protogen-Tools/protobuf-net.xml b/ProtobufCore/Protogen-Tools/protobuf-net.xml
new file mode 100644
index 0000000..a6e609d
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/protobuf-net.xml
@@ -0,0 +1,2845 @@
+
+
+
+ protobuf-net
+
+
+
+
+ Provides support for common .NET types that do not have a direct representation
+ in protobuf, using the definitions from bcl.proto
+
+
+
+
+ Creates a new instance of the specified type, bypassing the constructor.
+
+ The type to create
+ The new instance
+ If the platform does not support constructor-skipping
+
+
+
+ Writes a TimeSpan to a protobuf stream
+
+
+
+
+ Parses a TimeSpan from a protobuf stream
+
+
+
+
+ Parses a DateTime from a protobuf stream
+
+
+
+
+ Writes a DateTime to a protobuf stream
+
+
+
+
+ Parses a decimal from a protobuf stream
+
+
+
+
+ Writes a decimal to a protobuf stream
+
+
+
+
+ Writes a Guid to a protobuf stream
+
+
+
+
+ Parses a Guid from a protobuf stream
+
+
+
+
+ Reads an *implementation specific* bundled .NET object, including (as options) type-metadata, identity/re-use, etc.
+
+
+
+
+ Writes an *implementation specific* bundled .NET object, including (as options) type-metadata, identity/re-use, etc.
+
+
+
+
+ Optional behaviours that introduce .NET-specific functionality
+
+
+
+
+ No special behaviour
+
+
+
+
+ Enables full object-tracking/full-graph support.
+
+
+
+
+ Embeds the type information into the stream, allowing usage with types not known in advance.
+
+
+
+
+ If false, the constructor for the type is bypassed during deserialization, meaning any field initializers
+ or other initialization code is skipped.
+
+
+
+
+ Provides a simple buffer-based implementation of an extension object.
+
+
+
+
+ Provides addition capability for supporting unexpected fields during
+ protocol-buffer serialization/deserialization. This allows for loss-less
+ round-trip/merge, even when the data is not fully understood.
+
+
+
+
+ Requests a stream into which any unexpected fields can be persisted.
+
+ A new stream suitable for storing data.
+
+
+
+ Indicates that all unexpected fields have now been stored. The
+ implementing class is responsible for closing the stream. If
+ "commit" is not true the data may be discarded.
+
+ The stream originally obtained by BeginAppend.
+ True if the append operation completed successfully.
+
+
+
+ Requests a stream of the unexpected fields previously stored.
+
+ A prepared stream of the unexpected fields.
+
+
+
+ Indicates that all unexpected fields have now been read. The
+ implementing class is responsible for closing the stream.
+
+ The stream originally obtained by BeginQuery.
+
+
+
+ Requests the length of the raw binary stream; this is used
+ when serializing sub-entities to indicate the expected size.
+
+ The length of the binary stream representing unexpected data.
+
+
+ Specifies a method on the root-contract in an hierarchy to be invoked before serialization.
+
+
+ Specifies a method on the root-contract in an hierarchy to be invoked after serialization.
+
+
+ Specifies a method on the root-contract in an hierarchy to be invoked before deserialization.
+
+
+ Specifies a method on the root-contract in an hierarchy to be invoked after deserialization.
+
+
+
+ Pushes a null reference onto the stack. Note that this should only
+ be used to return a null (or set a variable to null); for null-tests
+ use BranchIfTrue / BranchIfFalse.
+
+
+
+
+ Creates a new "using" block (equivalent) around a variable;
+ the variable must exist, and note that (unlike in C#) it is
+ the variables *final* value that gets disposed. If you need
+ *original* disposal, copy your variable first.
+
+ It is the callers responsibility to ensure that the variable's
+ scope fully-encapsulates the "using"; if not, the variable
+ may be re-used (and thus re-assigned) unexpectedly.
+
+
+
+
+ Sub-format to use when serializing/deserializing data
+
+
+
+
+ Uses the default encoding for the data-type.
+
+
+
+
+ When applied to signed integer-based data (including Decimal), this
+ indicates that zigzag variant encoding will be used. This means that values
+ with small magnitude (regardless of sign) take a small amount
+ of space to encode.
+
+
+
+
+ When applied to signed integer-based data (including Decimal), this
+ indicates that two's-complement variant encoding will be used.
+ This means that any -ve number will take 10 bytes (even for 32-bit),
+ so should only be used for compatibility.
+
+
+
+
+ When applied to signed integer-based data (including Decimal), this
+ indicates that a fixed amount of space will be used.
+
+
+
+
+ When applied to a sub-message, indicates that the value should be treated
+ as group-delimited.
+
+
+
+
+ Simple base class for supporting unexpected fields allowing
+ for loss-less round-tips/merge, even if the data is not understod.
+ The additional fields are (by default) stored in-memory in a buffer.
+
+ As an example of an alternative implementation, you might
+ choose to use the file system (temporary files) as the back-end, tracking
+ only the paths [such an object would ideally be IDisposable and use
+ a finalizer to ensure that the files are removed].
+
+
+
+
+ Indicates that the implementing type has support for protocol-buffer
+ extensions.
+
+ Can be implemented by deriving from Extensible.
+
+
+
+ Retrieves the extension object for the current
+ instance, optionally creating it if it does not already exist.
+
+ Should a new extension object be
+ created if it does not already exist?
+ The extension object if it exists (or was created), or null
+ if the extension object does not exist or is not available.
+ The createIfMissing argument is false during serialization,
+ and true during deserialization upon encountering unexpected fields.
+
+
+
+ Retrieves the extension object for the current
+ instance, optionally creating it if it does not already exist.
+
+ Should a new extension object be
+ created if it does not already exist?
+ The extension object if it exists (or was created), or null
+ if the extension object does not exist or is not available.
+ The createIfMissing argument is false during serialization,
+ and true during deserialization upon encountering unexpected fields.
+
+
+
+ Provides a simple, default implementation for extension support,
+ optionally creating it if it does not already exist. Designed to be called by
+ classes implementing .
+
+ Should a new extension object be
+ created if it does not already exist?
+ The extension field to check (and possibly update).
+ The extension object if it exists (or was created), or null
+ if the extension object does not exist or is not available.
+ The createIfMissing argument is false during serialization,
+ and true during deserialization upon encountering unexpected fields.
+
+
+
+ Appends the value as an additional (unexpected) data-field for the instance.
+ Note that for non-repeated sub-objects, this equates to a merge operation;
+ for repeated sub-objects this adds a new instance to the set; for simple
+ values the new value supercedes the old value.
+
+ Note that appending a value does not remove the old value from
+ the stream; avoid repeatedly appending values for the same field.
+ The type of the value to append.
+ The extensible object to append the value to.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The value to append.
+
+
+
+ Appends the value as an additional (unexpected) data-field for the instance.
+ Note that for non-repeated sub-objects, this equates to a merge operation;
+ for repeated sub-objects this adds a new instance to the set; for simple
+ values the new value supercedes the old value.
+
+ Note that appending a value does not remove the old value from
+ the stream; avoid repeatedly appending values for the same field.
+ The data-type of the field.
+ The data-format to use when encoding the value.
+ The extensible object to append the value to.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The value to append.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ The value returned is the composed value after merging any duplicated content; if the
+ value is "repeated" (a list), then use GetValues instead.
+
+ The data-type of the field.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The effective value of the field, or the default value if not found.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ The value returned is the composed value after merging any duplicated content; if the
+ value is "repeated" (a list), then use GetValues instead.
+
+ The data-type of the field.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The data-format to use when decoding the value.
+ The effective value of the field, or the default value if not found.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ The value returned (in "value") is the composed value after merging any duplicated content;
+ if the value is "repeated" (a list), then use GetValues instead.
+
+ The data-type of the field.
+ The effective value of the field, or the default value if not found.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ True if data for the field was present, false otherwise.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ The value returned (in "value") is the composed value after merging any duplicated content;
+ if the value is "repeated" (a list), then use GetValues instead.
+
+ The data-type of the field.
+ The effective value of the field, or the default value if not found.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The data-format to use when decoding the value.
+ True if data for the field was present, false otherwise.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ The value returned (in "value") is the composed value after merging any duplicated content;
+ if the value is "repeated" (a list), then use GetValues instead.
+
+ The data-type of the field.
+ The effective value of the field, or the default value if not found.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The data-format to use when decoding the value.
+ Allow tags that are present as part of the definition; for example, to query unknown enum values.
+ True if data for the field was present, false otherwise.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ Each occurrence of the field is yielded separately, making this usage suitable for "repeated"
+ (list) fields.
+
+ The extended data is processed lazily as the enumerator is iterated.
+ The data-type of the field.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ An enumerator that yields each occurrence of the field.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ Each occurrence of the field is yielded separately, making this usage suitable for "repeated"
+ (list) fields.
+
+ The extended data is processed lazily as the enumerator is iterated.
+ The data-type of the field.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The data-format to use when decoding the value.
+ An enumerator that yields each occurrence of the field.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ The value returned (in "value") is the composed value after merging any duplicated content;
+ if the value is "repeated" (a list), then use GetValues instead.
+
+ The data-type of the field.
+ The model to use for configuration.
+ The effective value of the field, or the default value if not found.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The data-format to use when decoding the value.
+ Allow tags that are present as part of the definition; for example, to query unknown enum values.
+ True if data for the field was present, false otherwise.
+
+
+
+ Queries an extensible object for an additional (unexpected) data-field for the instance.
+ Each occurrence of the field is yielded separately, making this usage suitable for "repeated"
+ (list) fields.
+
+ The extended data is processed lazily as the enumerator is iterated.
+ The model to use for configuration.
+ The data-type of the field.
+ The extensible object to obtain the value from.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The data-format to use when decoding the value.
+ An enumerator that yields each occurrence of the field.
+
+
+
+ Appends the value as an additional (unexpected) data-field for the instance.
+ Note that for non-repeated sub-objects, this equates to a merge operation;
+ for repeated sub-objects this adds a new instance to the set; for simple
+ values the new value supercedes the old value.
+
+ Note that appending a value does not remove the old value from
+ the stream; avoid repeatedly appending values for the same field.
+ The model to use for configuration.
+ The data-format to use when encoding the value.
+ The extensible object to append the value to.
+ The field identifier; the tag should not be defined as a known data-field for the instance.
+ The value to append.
+
+
+
+ This class acts as an internal wrapper allowing us to do a dynamic
+ methodinfo invoke; an't put into Serializer as don't want on public
+ API; can't put into Serializer<T> since we need to invoke
+ accross classes, which isn't allowed in Silverlight)
+
+
+
+
+ All this does is call GetExtendedValuesTyped with the correct type for "instance";
+ this ensures that we don't get issues with subclasses declaring conflicting types -
+ the caller must respect the fields defined for the type they pass in.
+
+
+
+
+ All this does is call GetExtendedValuesTyped with the correct type for "instance";
+ this ensures that we don't get issues with subclasses declaring conflicting types -
+ the caller must respect the fields defined for the type they pass in.
+
+
+
+
+ Stores the given value into the instance's stream; the serializer
+ is inferred from TValue and format.
+
+ Needs to be public to be callable thru reflection in Silverlight
+
+
+
+ Not all frameworks are created equal (fx1.1 vs fx2.0,
+ micro-framework, compact-framework,
+ silverlight, etc). This class simply wraps up a few things that would
+ otherwise make the real code unnecessarily messy, providing fallback
+ implementations if necessary.
+
+
+
+
+ Intended to be a direct map to regular TypeCode, but:
+ - with missing types
+ - existing on WinRT
+
+
+
+
+ Specifies the method used to infer field tags for members of the type
+ under consideration. Tags are deduced using the invariant alphabetic
+ sequence of the members' names; this makes implicit field tags very brittle,
+ and susceptible to changes such as field names (normally an isolated
+ change).
+
+
+
+
+ No members are serialized implicitly; all members require a suitable
+ attribute such as [ProtoMember]. This is the recmomended mode for
+ most scenarios.
+
+
+
+
+ Public properties and fields are eligible for implicit serialization;
+ this treats the public API as a contract. Ordering beings from ImplicitFirstTag.
+
+
+
+
+ Public and non-public fields are eligible for implicit serialization;
+ this acts as a state/implementation serializer. Ordering beings from ImplicitFirstTag.
+
+
+
+
+ Represents the set of serialization callbacks to be used when serializing/deserializing a type.
+
+
+
+ Called before serializing an instance
+
+
+ Called before deserializing an instance
+
+
+ Called after serializing an instance
+
+
+ Called after deserializing an instance
+
+
+
+ True if any callback is set, else False
+
+
+
+
+ Represents a type at runtime for use with protobuf, allowing the field mappings (etc) to be defined
+
+
+
+
+ Get the name of the type being represented
+
+
+
+
+ Adds a known sub-type to the inheritance model
+
+
+
+
+ Adds a known sub-type to the inheritance model
+
+
+
+
+ Assigns the callbacks to use during serialiation/deserialization.
+
+ The method (or null) called before serialization begins.
+ The method (or null) called when serialization is complete.
+ The method (or null) called before deserialization begins (or when a new instance is created during deserialization).
+ The method (or null) called when deserialization is complete.
+ The set of callbacks.
+
+
+
+ Assigns the callbacks to use during serialiation/deserialization.
+
+ The name of the method (or null) called before serialization begins.
+ The name of the method (or null) called when serialization is complete.
+ The name of the method (or null) called before deserialization begins (or when a new instance is created during deserialization).
+ The name of the method (or null) called when deserialization is complete.
+ The set of callbacks.
+
+
+
+ Designate a factory-method to use to create instances of this type
+
+
+
+
+ Designate a factory-method to use to create instances of this type
+
+
+
+
+ Throws an exception if the type has been made immutable
+
+
+
+
+ Adds a member (by name) to the MetaType
+
+
+
+
+ Adds a member (by name) to the MetaType, returning the ValueMember rather than the fluent API.
+ This is otherwise identical to Add.
+
+
+
+
+ Adds a member (by name) to the MetaType
+
+
+
+
+ Performs serialization of this type via a surrogate; all
+ other serialization options are ignored and handled
+ by the surrogate's configuration.
+
+
+
+
+ Adds a set of members (by name) to the MetaType
+
+
+
+
+ Adds a member (by name) to the MetaType
+
+
+
+
+ Adds a member (by name) to the MetaType, including an itemType and defaultType for representing lists
+
+
+
+
+ Adds a member (by name) to the MetaType, including an itemType and defaultType for representing lists, returning the ValueMember rather than the fluent API.
+ This is otherwise identical to Add.
+
+
+
+
+ Returns the ValueMember instances associated with this type
+
+
+
+
+ Returns the SubType instances associated with this type
+
+
+
+
+ Compiles the serializer for this type; this is *not* a full
+ standalone compile, but can significantly boost performance
+ while allowing additional types to be added.
+
+ An in-place compile can access non-public types / members
+
+
+
+ Gets the base-type for this type
+
+
+
+
+ When used to compile a model, should public serialization/deserialzation methods
+ be included for this type?
+
+
+
+
+ Should this type be treated as a reference by default?
+
+
+
+
+ Indicates whether the current type has defined callbacks
+
+
+
+
+ Indicates whether the current type has defined subtypes
+
+
+
+
+ Returns the set of callbacks defined for this type
+
+
+
+
+ Gets or sets the name of this contract.
+
+
+
+
+ The runtime type that the meta-type represents
+
+
+
+
+ Gets or sets whether the type should use a parameterless constructor (the default),
+ or whether the type should skip the constructor completely. This option is not supported
+ on compact-framework.
+
+
+
+
+ The concrete type to create when a new instance of this type is needed; this may be useful when dealing
+ with dynamic proxies, or with interface-based APIs
+
+
+
+
+ Returns the ValueMember that matchs a given field number, or null if not found
+
+
+
+
+ Returns the ValueMember that matchs a given member (property/field), or null if not found
+
+
+
+
+ Gets or sets a value indicating that an enum should be treated directly as an int/short/etc, rather
+ than enforcing .proto enum rules. This is useful *in particul* for [Flags] enums.
+
+
+
+
+ Gets or sets a value indicating that this type should NOT be treated as a list, even if it has
+ familiar list-like characteristics (enumerable, add, etc)
+
+
+
+
+ Provides protobuf serialization support for a number of types that can be defined at runtime
+
+
+
+
+ Provides protobuf serialization support for a number of types
+
+
+
+
+ Resolve a System.Type to the compiler-specific type
+
+
+
+
+ Resolve a System.Type to the compiler-specific type
+
+
+
+
+ This is the more "complete" version of Serialize, which handles single instances of mapped types.
+ The value is written as a complete field, including field-header and (for sub-objects) a
+ length-prefix
+ In addition to that, this provides support for:
+ - basic values; individual int / string / Guid / etc
+ - IEnumerable sequences of any type handled by TrySerializeAuxiliaryType
+
+
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream.
+
+ The existing instance to be serialized (cannot be null).
+ The destination stream to write to.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream.
+
+ The existing instance to be serialized (cannot be null).
+ The destination stream to write to.
+ Additional information about this serialization operation.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied writer.
+
+ The existing instance to be serialized (cannot be null).
+ The destination writer to write to.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+ data - useful with network IO.
+
+ The type being merged.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ How to encode the length prefix.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+ data - useful with network IO.
+
+ The type being merged.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ How to encode the length prefix.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+ Used to resolve types on a per-field basis.
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+ data - useful with network IO.
+
+ The type being merged.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ How to encode the length prefix.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+ Used to resolve types on a per-field basis.
+ Returns the number of bytes consumed by this operation (includes length-prefix overheads and any skipped data).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Reads a sequence of consecutive length-prefixed items from a stream, using
+ either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+ are directly comparable to serializing multiple items in succession
+ (use the tag to emulate the implicit behavior
+ when serializing a list/array). When a tag is
+ specified, any records with different tags are silently omitted. The
+ tag is ignored. The tag is ignores for fixed-length prefixes.
+
+ The binary stream containing the serialized records.
+ The prefix style used in the data.
+ The tag of records to return (if non-positive, then no tag is
+ expected and all records are returned).
+ On a field-by-field basis, the type of object to deserialize (can be null if "type" is specified).
+ The type of object to deserialize (can be null if "resolver" is specified).
+ The sequence of deserialized objects.
+
+
+
+ Reads a sequence of consecutive length-prefixed items from a stream, using
+ either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+ are directly comparable to serializing multiple items in succession
+ (use the tag to emulate the implicit behavior
+ when serializing a list/array). When a tag is
+ specified, any records with different tags are silently omitted. The
+ tag is ignored. The tag is ignores for fixed-length prefixes.
+
+ The binary stream containing the serialized records.
+ The prefix style used in the data.
+ The tag of records to return (if non-positive, then no tag is
+ expected and all records are returned).
+ On a field-by-field basis, the type of object to deserialize (can be null if "type" is specified).
+ The type of object to deserialize (can be null if "resolver" is specified).
+ The sequence of deserialized objects.
+ Additional information about this serialization operation.
+
+
+
+ Reads a sequence of consecutive length-prefixed items from a stream, using
+ either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+ are directly comparable to serializing multiple items in succession
+ (use the tag to emulate the implicit behavior
+ when serializing a list/array). When a tag is
+ specified, any records with different tags are silently omitted. The
+ tag is ignored. The tag is ignores for fixed-length prefixes.
+
+ The type of object to deserialize.
+ The binary stream containing the serialized records.
+ The prefix style used in the data.
+ The tag of records to return (if non-positive, then no tag is
+ expected and all records are returned).
+ The sequence of deserialized objects.
+
+
+
+ Reads a sequence of consecutive length-prefixed items from a stream, using
+ either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+ are directly comparable to serializing multiple items in succession
+ (use the tag to emulate the implicit behavior
+ when serializing a list/array). When a tag is
+ specified, any records with different tags are silently omitted. The
+ tag is ignored. The tag is ignores for fixed-length prefixes.
+
+ The type of object to deserialize.
+ The binary stream containing the serialized records.
+ The prefix style used in the data.
+ The tag of records to return (if non-positive, then no tag is
+ expected and all records are returned).
+ The sequence of deserialized objects.
+ Additional information about this serialization operation.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream,
+ with a length-prefix. This is useful for socket programming,
+ as DeserializeWithLengthPrefix can be used to read the single object back
+ from an ongoing stream.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ How to encode the length prefix.
+ The destination stream to write to.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream,
+ with a length-prefix. This is useful for socket programming,
+ as DeserializeWithLengthPrefix can be used to read the single object back
+ from an ongoing stream.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ How to encode the length prefix.
+ The destination stream to write to.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+ Additional information about this serialization operation.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (which may be null).
+
+ The type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (which may be null).
+
+ The type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+ Additional information about this serialization operation.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (which may be null).
+
+ The type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The number of bytes to consume.
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (which may be null).
+
+ The type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The number of bytes to consume (or -1 to read to the end of the stream).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+ Additional information about this serialization operation.
+
+
+
+ Applies a protocol-buffer reader to an existing instance (which may be null).
+
+ The type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The reader to apply to the instance (cannot be null).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ This is the more "complete" version of Deserialize, which handles single instances of mapped types.
+ The value is read as a complete field, including field-header and (for sub-objects) a
+ length-prefix..kmc
+
+ In addition to that, this provides support for:
+ - basic values; individual int / string / Guid / etc
+ - IList sets of any type handled by TryDeserializeAuxiliaryType
+
+
+
+
+ Creates a new runtime model, to which the caller
+ can add support for a range of types. A model
+ can be used "as is", or can be compiled for
+ optimal performance.
+
+
+
+
+ Applies common proxy scenarios, resolving the actual type to consider
+
+
+
+
+ Indicates whether the supplied type is explicitly modelled by the model
+
+
+
+
+ Provides the key that represents a given type in the current model.
+ The type is also normalized for proxies at the same time.
+
+
+
+
+ Provides the key that represents a given type in the current model.
+
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream.
+
+ Represents the type (including inheritance) to consider.
+ The existing instance to be serialized (cannot be null).
+ The destination stream to write to.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (which may be null).
+
+ Represents the type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Create a deep clone of the supplied instance; any sub-items are also cloned.
+
+
+
+
+ Indicates that while an inheritance tree exists, the exact type encountered was not
+ specified in that hierarchy and cannot be processed.
+
+
+
+
+ Indicates that the given type was not expected, and cannot be processed.
+
+
+
+
+ Indicates that the given type cannot be constructed; it may still be possible to
+ deserialize into existing instances.
+
+
+
+
+ Returns true if the type supplied is either a recognised contract type,
+ or a *list* of a recognised contract type.
+
+ Note that primitives always return false, even though the engine
+ will, if forced, try to serialize such
+ True if this type is recognised as a serializable entity, else false
+
+
+
+ Returns true if the type supplied is a basic type with inbuilt handling,
+ a recognised contract type, or a *list* of a basic / contract type.
+
+
+
+
+ Returns true if the type supplied is a basic type with inbuilt handling,
+ or a *list* of a basic type with inbuilt handling
+
+
+
+
+ Suggest a .proto definition for the given type
+
+ The type to generate a .proto definition for, or null to generate a .proto that represents the entire model
+ The .proto definition as a string
+
+
+
+ Creates a new IFormatter that uses protocol-buffer [de]serialization.
+
+ A new IFormatter to be used during [de]serialization.
+ The type of object to be [de]deserialized by the formatter.
+
+
+
+ Used to provide custom services for writing and parsing type names when using dynamic types. Both parsing and formatting
+ are provided on a single API as it is essential that both are mapped identically at all times.
+
+
+
+
+ Indicates the type of callback to be used
+
+
+
+
+ Invoked before an object is serialized
+
+
+
+
+ Invoked after an object is serialized
+
+
+
+
+ Invoked before an object is deserialized (or when a new instance is created)
+
+
+
+
+ Invoked after an object is deserialized
+
+
+
+
+ Returns a sequence of the Type instances that can be
+ processed by this model.
+
+
+
+
+ Suggest a .proto definition for the given type
+
+ The type to generate a .proto definition for, or null to generate a .proto that represents the entire model
+ The .proto definition as a string
+
+
+
+ Adds support for an additional type in this model, optionally
+ appplying inbuilt patterns. If the type is already known to the
+ model, the existing type is returned **without** applying
+ any additional behaviour.
+
+ Inbuilt patterns include:
+ [ProtoContract]/[ProtoMember(n)]
+ [DataContract]/[DataMember(Order=n)]
+ [XmlType]/[XmlElement(Order=n)]
+ [On{Des|S}erializ{ing|ed}]
+ ShouldSerialize*/*Specified
+
+ The type to be supported
+ Whether to apply the inbuilt configuration patterns (via attributes etc), or
+ just add the type with no additional configuration (the type must then be manually configured).
+ The MetaType representing this type, allowing
+ further configuration.
+
+
+
+ Verifies that the model is still open to changes; if not, an exception is thrown
+
+
+
+
+ Prevents further changes to this model
+
+
+
+
+ Provides the key that represents a given type in the current model.
+
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream.
+
+ Represents the type (including inheritance) to consider.
+ The existing instance to be serialized (cannot be null).
+ The destination stream to write to.
+
+
+
+ Applies a protocol-buffer stream to an existing instance (which may be null).
+
+ Represents the type (including inheritance) to consider.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Compiles the serializers individually; this is *not* a full
+ standalone compile, but can significantly boost performance
+ while allowing additional types to be added.
+
+ An in-place compile can access non-public types / members
+
+
+
+ Fully compiles the current model into a static-compiled model instance
+
+ A full compilation is restricted to accessing public types / members
+ An instance of the newly created compiled type-model
+
+
+
+ Fully compiles the current model into a static-compiled serialization dll
+ (the serialization dll still requires protobuf-net for support services).
+
+ A full compilation is restricted to accessing public types / members
+ The name of the TypeModel class to create
+ The path for the new dll
+ An instance of the newly created compiled type-model
+
+
+
+ Fully compiles the current model into a static-compiled serialization dll
+ (the serialization dll still requires protobuf-net for support services).
+
+ A full compilation is restricted to accessing public types / members
+ An instance of the newly created compiled type-model
+
+
+
+ Global default that
+ enables/disables automatic tag generation based on the existing name / order
+ of the defined members. See
+ for usage and important warning / explanation.
+ You must set the global default before attempting to serialize/deserialize any
+ impacted type.
+
+
+
+
+ Global default that determines whether types are considered serializable
+ if they have [DataContract] / [XmlType]. With this enabled, ONLY
+ types marked as [ProtoContract] are added automatically.
+
+
+
+
+ Global switch that enables or disables the implicit
+ handling of "zero defaults"; meanning: if no other default is specified,
+ it assumes bools always default to false, integers to zero, etc.
+
+ If this is disabled, no such assumptions are made and only *explicit*
+ default values are processed. This is enabled by default to
+ preserve similar logic to v1.
+
+
+
+
+ Global switch that determines whether types with a .ToString() and a Parse(string)
+ should be serialized as strings.
+
+
+
+
+ The default model, used to support ProtoBuf.Serializer
+
+
+
+
+ Obtains the MetaType associated with a given Type for the current model,
+ allowing additional configuration.
+
+
+
+
+ Should serializers be compiled on demand? It may be useful
+ to disable this for debugging purposes.
+
+
+
+
+ Should support for unexpected types be added automatically?
+ If false, an exception is thrown when unexpected types
+ are encountered.
+
+
+
+
+ The amount of time to wait if there are concurrent metadata access operations
+
+
+
+
+ If a lock-contention is detected, this event signals the *owner* of the lock responsible for the blockage, indicating
+ what caused the problem; this is only raised if the lock-owning code successfully completes.
+
+
+
+
+ Represents configuration options for compiling a model to
+ a standalone assembly.
+
+
+
+
+ Import framework options from an existing type
+
+
+
+
+ The TargetFrameworkAttribute FrameworkName value to burn into the generated assembly
+
+
+
+
+ The TargetFrameworkAttribute FrameworkDisplayName value to burn into the generated assembly
+
+
+
+
+ The name of the TypeModel class to create
+
+
+
+
+ The path for the new dll
+
+
+
+
+ The runtime version for the generated assembly
+
+
+
+
+ The runtime version for the generated assembly
+
+
+
+
+ The acecssibility of the generated serializer
+
+
+
+
+ Type accessibility
+
+
+
+
+ Available to all callers
+
+
+
+
+ Available to all callers in the same assembly, or assemblies specified via [InternalsVisibleTo(...)]
+
+
+
+
+ Contains the stack-trace of the owning code when a lock-contention scenario is detected
+
+
+
+
+ The stack-trace of the code that owned the lock when a lock-contention scenario occurred
+
+
+
+
+ Event-type that is raised when a lock-contention scenario is detected
+
+
+
+
+ Represents an inherited type in a type hierarchy.
+
+
+
+
+ Creates a new SubType instance.
+
+ The field-number that is used to encapsulate the data (as a nested
+ message) for the derived dype.
+ The sub-type to be considered.
+ Specific encoding style to use; in particular, Grouped can be used to avoid buffering, but is not the default.
+
+
+
+ The field-number that is used to encapsulate the data (as a nested
+ message) for the derived dype.
+
+
+
+
+ The sub-type to be considered.
+
+
+
+
+ Event arguments needed to perform type-formatting functions; this could be resolving a Type to a string suitable for serialization, or could
+ be requesting a Type from a string. If no changes are made, a default implementation will be used (from the assembly-qualified names).
+
+
+
+
+ The type involved in this map; if this is initially null, a Type is expected to be provided for the string in FormattedName.
+
+
+
+
+ The formatted-name involved in this map; if this is initially null, a formatted-name is expected from the type in Type.
+
+
+
+
+ Delegate type used to perform type-formatting functions; the sender originates as the type-model.
+
+
+
+
+ Represents a member (property/field) that is mapped to a protobuf field
+
+
+
+
+ Creates a new ValueMember instance
+
+
+
+
+ Creates a new ValueMember instance
+
+
+
+
+ Specifies methods for working with optional data members.
+
+ Provides a method (null for none) to query whether this member should
+ be serialized; it must be of the form "bool {Method}()". The member is only serialized if the
+ method returns true.
+ Provides a method (null for none) to indicate that a member was
+ deserialized; it must be of the form "void {Method}(bool)", and will be called with "true"
+ when data is found.
+
+
+
+ The number that identifies this member in a protobuf stream
+
+
+
+
+ Gets the member (field/property) which this member relates to.
+
+
+
+
+ Within a list / array / etc, the type of object for each item in the list (especially useful with ArrayList)
+
+
+
+
+ The underlying type of the member
+
+
+
+
+ For abstract types (IList etc), the type of concrete object to create (if required)
+
+
+
+
+ The type the defines the member
+
+
+
+
+ The default value of the item (members with this value will not be serialized)
+
+
+
+
+ Specifies the rules used to process the field; this is used to determine the most appropriate
+ wite-type, but also to describe subtypes within that wire-type (such as SignedVariant)
+
+
+
+
+ Indicates whether this field should follow strict encoding rules; this means (for example) that if a "fixed32"
+ is encountered when "variant" is defined, then it will fail (throw an exception) when parsing. Note that
+ when serializing the defined type is always used.
+
+
+
+
+ Indicates whether this field should use packed encoding (which can save lots of space for repeated primitive values).
+ This option only applies to list/array data of primitive types (int, double, etc).
+
+
+
+
+ Indicates whether this field should *repace* existing values (the default is false, meaning *append*).
+ This option only applies to list/array data.
+
+
+
+
+ Indicates whether this field is mandatory.
+
+
+
+
+ Enables full object-tracking/full-graph support.
+
+
+
+
+ Embeds the type information into the stream, allowing usage with types not known in advance.
+
+
+
+
+ Gets the logical name for this member in the schema (this is not critical for binary serialization, but may be used
+ when inferring a schema).
+
+
+
+
+ Should lists have extended support for null values? Note this makes the serialization less efficient.
+
+
+
+
+ Specifies the type of prefix that should be applied to messages.
+
+
+
+
+ No length prefix is applied to the data; the data is terminated only be the end of the stream.
+
+
+
+
+ A base-128 length prefix is applied to the data (efficient for short messages).
+
+
+
+
+ A fixed-length (little-endian) length prefix is applied to the data (useful for compatibility).
+
+
+
+
+ A fixed-length (big-endian) length prefix is applied to the data (useful for compatibility).
+
+
+
+
+ Indicates that a type is defined for protocol-buffer serialization.
+
+
+
+
+ Gets or sets the defined name of the type.
+
+
+
+
+ Gets or sets the fist offset to use with implicit field tags;
+ only uesd if ImplicitFields is set.
+
+
+
+
+ If specified, alternative contract markers (such as markers for XmlSerailizer or DataContractSerializer) are ignored.
+
+
+
+
+ If specified, do NOT treat this type as a list, even if it looks like one.
+
+
+
+
+ Gets or sets the mechanism used to automatically infer field tags
+ for members. This option should be used in advanced scenarios only.
+ Please review the important notes against the ImplicitFields enumeration.
+
+
+
+
+ Enables/disables automatic tag generation based on the existing name / order
+ of the defined members. This option is not used for members marked
+ with ProtoMemberAttribute, as intended to provide compatibility with
+ WCF serialization. WARNING: when adding new fields you must take
+ care to increase the Order for new elements, otherwise data corruption
+ may occur.
+
+ If not explicitly specified, the default is assumed from Serializer.GlobalOptions.InferTagFromName.
+
+
+
+ Has a InferTagFromName value been explicitly set? if not, the default from the type-model is assumed.
+
+
+
+
+ Specifies an offset to apply to [DataMember(Order=...)] markers;
+ this is useful when working with mex-generated classes that have
+ a different origin (usually 1 vs 0) than the original data-contract.
+
+ This value is added to the Order of each member.
+
+
+
+
+ If true, the constructor for the type is bypassed during deserialization, meaning any field initializers
+ or other initialization code is skipped.
+
+
+
+
+ Used to define protocol-buffer specific behavior for
+ enumerated values.
+
+
+
+
+ Indicates whether this instance has a customised value mapping
+
+ true if a specific value is set
+
+
+
+ Gets or sets the specific value to use for this enum during serialization.
+
+
+
+
+ Gets or sets the defined name of the enum, as used in .proto
+ (this name is not used during serialization).
+
+
+
+
+ Indicates an error during serialization/deserialization of a proto stream.
+
+
+
+ Creates a new ProtoException instance.
+
+
+ Creates a new ProtoException instance.
+
+
+ Creates a new ProtoException instance.
+
+
+
+ Indicates that a member should be excluded from serialization; this
+ is only normally used when using implict fields.
+
+
+
+
+ Indicates that a member should be excluded from serialization; this
+ is only normally used when using implict fields. This allows
+ ProtoIgnoreAttribute usage
+ even for partial classes where the individual members are not
+ under direct control.
+
+
+
+
+ Creates a new ProtoPartialIgnoreAttribute instance.
+
+ Specifies the member to be ignored.
+
+
+
+ The name of the member to be ignored.
+
+
+
+
+ Indicates the known-types to support for an individual
+ message. This serializes each level in the hierarchy as
+ a nested message to retain wire-compatibility with
+ other protocol-buffer implementations.
+
+
+
+
+ Creates a new instance of the ProtoIncludeAttribute.
+
+ The unique index (within the type) that will identify this data.
+ The additional type to serialize/deserialize.
+
+
+
+ Creates a new instance of the ProtoIncludeAttribute.
+
+ The unique index (within the type) that will identify this data.
+ The additional type to serialize/deserialize.
+
+
+
+ Gets the unique index (within the type) that will identify this data.
+
+
+
+
+ Gets the additional type to serialize/deserialize.
+
+
+
+
+ Gets the additional type to serialize/deserialize.
+
+
+
+
+ Specifies whether the inherited sype's sub-message should be
+ written with a length-prefix (default), or with group markers.
+
+
+
+
+ Declares a member to be used in protocol-buffer serialization, using
+ the given Tag. A DataFormat may be used to optimise the serialization
+ format (for instance, using zigzag encoding for negative numbers, or
+ fixed-length encoding for large values.
+
+
+
+
+ Compare with another ProtoMemberAttribute for sorting purposes
+
+
+
+
+ Compare with another ProtoMemberAttribute for sorting purposes
+
+
+
+
+ Creates a new ProtoMemberAttribute instance.
+
+ Specifies the unique tag used to identify this member within the type.
+
+
+
+ Gets or sets the original name defined in the .proto; not used
+ during serialization.
+
+
+
+
+ Gets or sets the data-format to be used when encoding this value.
+
+
+
+
+ Gets the unique tag used to identify this member within the type.
+
+
+
+
+ Gets or sets a value indicating whether this member is mandatory.
+
+
+
+
+ Gets a value indicating whether this member is packed.
+ This option only applies to list/array data of primitive types (int, double, etc).
+
+
+
+
+ Indicates whether this field should *repace* existing values (the default is false, meaning *append*).
+ This option only applies to list/array data.
+
+
+
+
+ Enables full object-tracking/full-graph support.
+
+
+
+
+ Embeds the type information into the stream, allowing usage with types not known in advance.
+
+
+
+
+ Gets or sets a value indicating whether this member is packed (lists/arrays).
+
+
+
+
+ Additional (optional) settings that control serialization of members
+
+
+
+
+ Default; no additional options
+
+
+
+
+ Indicates that repeated elements should use packed (length-prefixed) encoding
+
+
+
+
+ Indicates that the given item is required
+
+
+
+
+ Enables full object-tracking/full-graph support
+
+
+
+
+ Embeds the type information into the stream, allowing usage with types not known in advance
+
+
+
+
+ Indicates whether this field should *repace* existing values (the default is false, meaning *append*).
+ This option only applies to list/array data.
+
+
+
+
+ Declares a member to be used in protocol-buffer serialization, using
+ the given Tag and MemberName. This allows ProtoMemberAttribute usage
+ even for partial classes where the individual members are not
+ under direct control.
+ A DataFormat may be used to optimise the serialization
+ format (for instance, using zigzag encoding for negative numbers, or
+ fixed-length encoding for large values.
+
+
+
+
+ Creates a new ProtoMemberAttribute instance.
+
+ Specifies the unique tag used to identify this member within the type.
+ Specifies the member to be serialized.
+
+
+
+ The name of the member to be serialized.
+
+
+
+
+ A stateful reader, used to read a protobuf stream. Typical usage would be (sequentially) to call
+ ReadFieldHeader and (after matching the field) an appropriate Read* method.
+
+
+
+
+ Creates a new reader against a stream
+
+ The source stream
+ The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects
+ Additional context about this serialization operation
+
+
+
+ Creates a new reader against a stream
+
+ The source stream
+ The model to use for serialization; this can be null, but this will impair the ability to deserialize sub-objects
+ Additional context about this serialization operation
+ The number of bytes to read, or -1 to read until the end of the stream
+
+
+
+ Releases resources used by the reader, but importantly does not Dispose the
+ underlying stream; in many typical use-cases the stream is used for different
+ processes, so it is assumed that the consumer will Dispose their stream separately.
+
+
+
+
+ Reads an unsigned 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Reads a signed 16-bit integer from the stream: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Reads an unsigned 16-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Reads an unsigned 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Reads a signed 8-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Reads a signed 32-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Reads a signed 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Reads a string from the stream (using UTF8); supported wire-types: String
+
+
+
+
+ Throws an exception indication that the given value cannot be mapped to an enum.
+
+
+
+
+ Reads a double-precision number from the stream; supported wire-types: Fixed32, Fixed64
+
+
+
+
+ Reads (merges) a sub-message from the stream, internally calling StartSubItem and EndSubItem, and (in between)
+ parsing the message in accordance with the model associated with the reader
+
+
+
+
+ Makes the end of consuming a nested message in the stream; the stream must be either at the correct EndGroup
+ marker, or all fields of the sub-message must have been consumed (in either case, this means ReadFieldHeader
+ should return zero)
+
+
+
+
+ Begins consuming a nested message in the stream; supported wire-types: StartGroup, String
+
+ The token returned must be help and used when callining EndSubItem
+
+
+
+ Reads a field header from the stream, setting the wire-type and retuning the field number. If no
+ more fields are available, then 0 is returned. This methods respects sub-messages.
+
+
+
+
+ Looks ahead to see whether the next field in the stream is what we expect
+ (typically; what we've just finished reading - for example ot read successive list items)
+
+
+
+
+ Compares the streams current wire-type to the hinted wire-type, updating the reader if necessary; for example,
+ a Variant may be updated to SignedVariant. If the hinted wire-type is unrelated then no change is made.
+
+
+
+
+ Verifies that the stream's current wire-type is as expected, or a specialized sub-type (for example,
+ SignedVariant) - in which case the current wire-type is updated. Otherwise an exception is thrown.
+
+
+
+
+ Discards the data for the current field.
+
+
+
+
+ Reads an unsigned 64-bit integer from the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Reads a single-precision number from the stream; supported wire-types: Fixed32, Fixed64
+
+
+
+
+ Reads a boolean value from the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+
+ Reads a byte-sequence from the stream, appending them to an existing byte-sequence (which can be null); supported wire-types: String
+
+
+
+
+ Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length
+ reader to be created.
+
+
+
+
+ Reads a little-endian encoded integer. An exception is thrown if the data is not all available.
+
+
+
+
+ Reads a big-endian encoded integer. An exception is thrown if the data is not all available.
+
+
+
+
+ Reads a varint encoded integer. An exception is thrown if the data is not all available.
+
+
+
+
+ Reads a string (of a given lenth, in bytes) directly from the source into a pre-existing buffer. An exception is thrown if the data is not all available.
+
+
+
+
+ Reads a given number of bytes directly from the source. An exception is thrown if the data is not all available.
+
+
+
+
+ Reads a string (of a given lenth, in bytes) directly from the source. An exception is thrown if the data is not all available.
+
+
+
+
+ Reads the length-prefix of a message from a stream without buffering additional data, allowing a fixed-length
+ reader to be created.
+
+
+
+ The number of bytes consumed; 0 if no data available
+
+
+
+ Copies the current field into the instance as extension data
+
+
+
+
+ Indicates whether the reader still has data remaining in the current sub-item,
+ additionally setting the wire-type for the next field if there is more data.
+ This is used when decoding packed data.
+
+
+
+
+ Utility method, not intended for public use; this helps maintain the root object is complex scenarios
+
+
+
+
+ Reads a Type from the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String
+
+
+
+
+ Gets the number of the field being processed.
+
+
+
+
+ Indicates the underlying proto serialization format on the wire.
+
+
+
+
+ Gets / sets a flag indicating whether strings should be checked for repetition; if
+ true, any repeated UTF-8 byte sequence will result in the same String instance, rather
+ than a second instance of the same string. Enabled by default. Note that this uses
+ a custom interner - the system-wide string interner is not used.
+
+
+
+
+ Addition information about this deserialization operation.
+
+
+
+
+ Returns the position of the current reader (note that this is not necessarily the same as the position
+ in the underlying stream, if multiple readers are used on the same stream)
+
+
+
+
+ Get the TypeModel associated with this reader
+
+
+
+
+ Represents an output stream for writing protobuf data.
+
+ Why is the API backwards (static methods with writer arguments)?
+ See: http://marcgravell.blogspot.com/2010/03/last-will-be-first-and-first-will-be.html
+
+
+
+
+ Write an encapsulated sub-object, using the supplied unique key (reprasenting a type).
+
+ The object to write.
+ The key that uniquely identifies the type within the model.
+ The destination.
+
+
+
+ Write an encapsulated sub-object, using the supplied unique key (reprasenting a type) - but the
+ caller is asserting that this relationship is non-recursive; no recursion check will be
+ performed.
+
+ The object to write.
+ The key that uniquely identifies the type within the model.
+ The destination.
+
+
+
+ Writes a field-header, indicating the format of the next data we plan to write.
+
+
+
+
+ Writes a byte-array to the stream; supported wire-types: String
+
+
+
+
+ Writes a byte-array to the stream; supported wire-types: String
+
+
+
+
+ Indicates the start of a nested record.
+
+ The instance to write.
+ The destination.
+ A token representing the state of the stream; this token is given to EndSubItem.
+
+
+
+ Indicates the end of a nested record.
+
+ The token obtained from StartubItem.
+ The destination.
+
+
+
+ Creates a new writer against a stream
+
+ The destination stream
+ The model to use for serialization; this can be null, but this will impair the ability to serialize sub-objects
+ Additional context about this serialization operation
+
+
+
+ Flushes data to the underlying stream, and releases any resources. The underlying stream is *not* disposed
+ by this operation.
+
+
+
+
+ Writes any buffered data (if possible) to the underlying stream.
+
+ The writer to flush
+ It is not always possible to fully flush, since some sequences
+ may require values to be back-filled into the byte-stream.
+
+
+
+ Writes an unsigned 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Writes a string to the stream; supported wire-types: String
+
+
+
+
+ Writes an unsigned 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Writes a signed 64-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Writes a signed 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Writes an unsigned 16-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Writes an unsigned 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Writes a signed 8-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Writes a signed 32-bit integer to the stream; supported wire-types: Variant, Fixed32, Fixed64, SignedVariant
+
+
+
+
+ Writes a double-precision number to the stream; supported wire-types: Fixed32, Fixed64
+
+
+
+
+ Writes a single-precision number to the stream; supported wire-types: Fixed32, Fixed64
+
+
+
+
+ Throws an exception indicating that the given enum cannot be mapped to a serialized value.
+
+
+
+
+ Writes a boolean to the stream; supported wire-types: Variant, Fixed32, Fixed64
+
+
+
+
+ Copies any extension data stored for the instance to the underlying stream
+
+
+
+
+ Used for packed encoding; indicates that the next field should be skipped rather than
+ a field header written. Note that the field number must match, else an exception is thrown
+ when the attempt is made to write the (incorrect) field. The wire-type is taken from the
+ subsequent call to WriteFieldHeader. Only primitive types can be packed.
+
+
+
+
+ Specifies a known root object to use during reference-tracked serialization
+
+
+
+
+ Writes a Type to the stream, using the model's DynamicTypeFormatting if appropriate; supported wire-types: String
+
+
+
+
+ Addition information about this serialization operation.
+
+
+
+
+ Get the TypeModel associated with this writer
+
+
+
+
+ Additional information about a serialization operation
+
+
+
+
+ Convert a SerializationContext to a StreamingContext
+
+
+
+
+ Convert a StreamingContext to a SerializationContext
+
+
+
+
+ Gets or sets a user-defined object containing additional information about this serialization/deserialization operation.
+
+
+
+
+ A default SerializationContext, with minimal information.
+
+
+
+
+ Gets or sets the source or destination of the transmitted data.
+
+
+
+
+ Provides protocol-buffer serialization capability for concrete, attributed types. This
+ is a *default* model, but custom serializer models are also supported.
+
+
+ Protocol-buffer serialization is a compact binary format, designed to take
+ advantage of sparse data and knowledge of specific data types; it is also
+ extensible, allowing a type to be deserialized / merged even if some data is
+ not recognised.
+
+
+
+
+ The field number that is used as a default when serializing/deserializing a list of objects.
+ The data is treated as repeated message with field number 1.
+
+
+
+
+ Suggest a .proto definition for the given type
+
+ The type to generate a .proto definition for
+ The .proto definition as a string
+
+
+
+ Create a deep clone of the supplied instance; any sub-items are also cloned.
+
+
+
+
+ Applies a protocol-buffer stream to an existing instance.
+
+ The type being merged.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Creates a new instance from a protocol-buffer stream
+
+ The type to be created.
+ The binary stream to apply to the new instance (cannot be null).
+ A new, initialized instance.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream.
+
+ The existing instance to be serialized (cannot be null).
+ The destination stream to write to.
+
+
+
+ Serializes a given instance and deserializes it as a different type;
+ this can be used to translate between wire-compatible objects (where
+ two .NET types represent the same data), or to promote/demote a type
+ through an inheritance hierarchy.
+
+ No assumption of compatibility is made between the types.
+ The type of the object being copied.
+ The type of the new object to be created.
+ The existing instance to use as a template.
+ A new instane of type TNewType, with the data from TOldType.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied SerializationInfo.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ The destination SerializationInfo to write to.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied SerializationInfo.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ The destination SerializationInfo to write to.
+ Additional information about this serialization operation.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied XmlWriter.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ The destination XmlWriter to write to.
+
+
+
+ Applies a protocol-buffer from an XmlReader to an existing instance.
+
+ The type being merged.
+ The existing instance to be modified (cannot be null).
+ The XmlReader containing the data to apply to the instance (cannot be null).
+
+
+
+ Applies a protocol-buffer from a SerializationInfo to an existing instance.
+
+ The type being merged.
+ The existing instance to be modified (cannot be null).
+ The SerializationInfo containing the data to apply to the instance (cannot be null).
+
+
+
+ Applies a protocol-buffer from a SerializationInfo to an existing instance.
+
+ The type being merged.
+ The existing instance to be modified (cannot be null).
+ The SerializationInfo containing the data to apply to the instance (cannot be null).
+ Additional information about this serialization operation.
+
+
+
+ Precompiles the serializer for a given type.
+
+
+
+
+ Creates a new IFormatter that uses protocol-buffer [de]serialization.
+
+ The type of object to be [de]deserialized by the formatter.
+ A new IFormatter to be used during [de]serialization.
+
+
+
+ Reads a sequence of consecutive length-prefixed items from a stream, using
+ either base-128 or fixed-length prefixes. Base-128 prefixes with a tag
+ are directly comparable to serializing multiple items in succession
+ (use the tag to emulate the implicit behavior
+ when serializing a list/array). When a tag is
+ specified, any records with different tags are silently omitted. The
+ tag is ignored. The tag is ignores for fixed-length prefixes.
+
+ The type of object to deserialize.
+ The binary stream containing the serialized records.
+ The prefix style used in the data.
+ The tag of records to return (if non-positive, then no tag is
+ expected and all records are returned).
+ The sequence of deserialized objects.
+
+
+
+ Creates a new instance from a protocol-buffer stream that has a length-prefix
+ on data (to assist with network IO).
+
+ The type to be created.
+ The binary stream to apply to the new instance (cannot be null).
+ How to encode the length prefix.
+ A new, initialized instance.
+
+
+
+ Creates a new instance from a protocol-buffer stream that has a length-prefix
+ on data (to assist with network IO).
+
+ The type to be created.
+ The binary stream to apply to the new instance (cannot be null).
+ How to encode the length prefix.
+ The expected tag of the item (only used with base-128 prefix style).
+ A new, initialized instance.
+
+
+
+ Applies a protocol-buffer stream to an existing instance, using length-prefixed
+ data - useful with network IO.
+
+ The type being merged.
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ How to encode the length prefix.
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream,
+ with a length-prefix. This is useful for socket programming,
+ as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back
+ from an ongoing stream.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ How to encode the length prefix.
+ The destination stream to write to.
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream,
+ with a length-prefix. This is useful for socket programming,
+ as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back
+ from an ongoing stream.
+
+ The type being serialized.
+ The existing instance to be serialized (cannot be null).
+ How to encode the length prefix.
+ The destination stream to write to.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+
+
+ Indicates the number of bytes expected for the next message.
+ The stream containing the data to investigate for a length.
+ The algorithm used to encode the length.
+ The length of the message, if it could be identified.
+ True if a length could be obtained, false otherwise.
+
+
+ Indicates the number of bytes expected for the next message.
+ The buffer containing the data to investigate for a length.
+ The offset of the first byte to read from the buffer.
+ The number of bytes to read from the buffer.
+ The algorithm used to encode the length.
+ The length of the message, if it could be identified.
+ True if a length could be obtained, false otherwise.
+
+
+
+ Releases any internal buffers that have been reserved for efficiency; this does not affect any serialization
+ operations; simply: it can be used (optionally) to release the buffers for garbage collection (at the expense
+ of having to re-allocate a new buffer for the next operation, rather than re-use prior buffers).
+
+
+
+
+ Provides non-generic access to the default serializer.
+
+
+
+
+ Create a deep clone of the supplied instance; any sub-items are also cloned.
+
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream.
+
+ The existing instance to be serialized (cannot be null).
+ The destination stream to write to.
+
+
+
+ Creates a new instance from a protocol-buffer stream
+
+ The type to be created.
+ The binary stream to apply to the new instance (cannot be null).
+ A new, initialized instance.
+
+
+ Applies a protocol-buffer stream to an existing instance.
+ The existing instance to be modified (cannot be null).
+ The binary stream to apply to the instance (cannot be null).
+ The updated instance
+
+
+
+ Writes a protocol-buffer representation of the given instance to the supplied stream,
+ with a length-prefix. This is useful for socket programming,
+ as DeserializeWithLengthPrefix/MergeWithLengthPrefix can be used to read the single object back
+ from an ongoing stream.
+
+ The existing instance to be serialized (cannot be null).
+ How to encode the length prefix.
+ The destination stream to write to.
+ The tag used as a prefix to each record (only used with base-128 style prefixes).
+
+
+
+ Applies a protocol-buffer stream to an existing instance (or null), using length-prefixed
+ data - useful with network IO.
+
+ The existing instance to be modified (can be null).
+ The binary stream to apply to the instance (cannot be null).
+ How to encode the length prefix.
+ Used to resolve types on a per-field basis.
+ The updated instance; this may be different to the instance argument if
+ either the original instance was null, or the stream defines a known sub-type of the
+ original instance.
+
+
+
+ Indicates whether the supplied type is explicitly modelled by the model
+
+
+
+
+ Global switches that change the behavior of protobuf-net
+
+
+
+
+
+
+
+
+
+ Maps a field-number to a type
+
+
+
+
+ Perform the steps necessary to serialize this data.
+
+ The value to be serialized.
+ The writer entity that is accumulating the output data.
+
+
+
+ Perform the steps necessary to deserialize this data.
+
+ The current value, if appropriate.
+ The reader providing the input data.
+ The updated / replacement value.
+
+
+ Emit the IL necessary to perform the given actions
+ to serialize this data.
+
+ Details and utilities for the method being generated.
+ The source of the data to work against;
+ If the value is only needed once, then LoadValue is sufficient. If
+ the value is needed multiple times, then note that a "null"
+ means "the top of the stack", in which case you should create your
+ own copy - GetLocalWithValue.
+
+
+
+ Emit the IL necessary to perform the given actions to deserialize this data.
+
+ Details and utilities for the method being generated.
+ For nested values, the instance holding the values; note
+ that this is not always provided - a null means not supplied. Since this is always
+ a variable or argument, it is not necessary to consume this value.
+
+
+
+ The type that this serializer is intended to work for.
+
+
+
+
+ Indicates whether a Read operation replaces the existing value, or
+ extends the value. If false, the "value" parameter to Read is
+ discarded, and should be passed in as null.
+
+
+
+
+ Now all Read operations return a value (although most do); if false no
+ value should be expected.
+
+
+
+
+ Uses protocol buffer serialization on the specified operation; note that this
+ must be enabled on both the client and server.
+
+
+
+
+ Configuration element to swap out DatatContractSerilaizer with the XmlProtoSerializer for a given endpoint.
+
+
+
+
+
+ Creates a new ProtoBehaviorExtension instance.
+
+
+
+
+ Creates a behavior extension based on the current configuration settings.
+
+ The behavior extension.
+
+
+
+ Gets the type of behavior.
+
+
+
+
+ Behavior to swap out DatatContractSerilaizer with the XmlProtoSerializer for a given endpoint.
+
+ Add the following to the server and client app.config in the system.serviceModel section:
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Configure your endpoints to have a behaviorConfiguration as follows:
+
+
+
+
+
+
+
+
+
+
+
+
+ Describes a WCF operation behaviour that can perform protobuf serialization
+
+
+
+
+ Create a new ProtoOperationBehavior instance
+
+
+
+
+ Creates a protobuf serializer if possible (falling back to the default WCF serializer)
+
+
+
+
+ The type-model that should be used with this behaviour
+
+
+
+
+ An xml object serializer that can embed protobuf data in a base-64 hunk (looking like a byte[])
+
+
+
+
+ Attempt to create a new serializer for the given model and type
+
+ A new serializer instance if the type is recognised by the model; null otherwise
+
+
+
+ Creates a new serializer for the given model and type
+
+
+
+
+ Ends an object in the output
+
+
+
+
+ Begins an object in the output
+
+
+
+
+ Writes the body of an object in the output
+
+
+
+
+ Indicates whether this is the start of an object we are prepared to handle
+
+
+
+
+ Reads the body of an object
+
+
+
+
+ Used to hold particulars relating to nested objects. This is opaque to the caller - simply
+ give back the token you are given at the end of an object.
+
+
+
+
+ Indicates the encoding used to represent an individual value in a protobuf stream
+
+
+
+
+ Represents an error condition
+
+
+
+
+ Base-128 variant-length encoding
+
+
+
+
+ Fixed-length 8-byte encoding
+
+
+
+
+ Length-variant-prefixed encoding
+
+
+
+
+ Indicates the start of a group
+
+
+
+
+ Indicates the end of a group
+
+
+
+
+ Fixed-length 4-byte encoding
+ 10
+
+
+
+ This is not a formal wire-type in the "protocol buffers" spec, but
+ denotes a variant integer that should be interpreted using
+ zig-zag semantics (so -ve numbers aren't a significant overhead)
+
+
+
+
diff --git a/ProtobufCore/Protogen-Tools/protogen.exe b/ProtobufCore/Protogen-Tools/protogen.exe
new file mode 100644
index 0000000..715751b
Binary files /dev/null and b/ProtobufCore/Protogen-Tools/protogen.exe differ
diff --git a/ProtobufCore/Protogen-Tools/protogen.exe.config b/ProtobufCore/Protogen-Tools/protogen.exe.config
new file mode 100644
index 0000000..e59af44
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/protogen.exe.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/ProtobufCore/Protogen-Tools/vb.xslt b/ProtobufCore/Protogen-Tools/vb.xslt
new file mode 100644
index 0000000..b1d9162
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/vb.xslt
@@ -0,0 +1,745 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ VisualBasic template for protobuf-net.
+ Options:
+ General:
+ "help" - this page
+ Additional serializer support:
+ "xml" - enable explicit xml support (XmlSerializer)
+ "datacontract" - enable data-contract support (DataContractSerializer; requires .NET 3.0)
+ "binary" - enable binary support (BinaryFormatter; not supported on Silverlight)
+ Other:
+ "protoRpc" - enable proto-rpc client
+ "observable" - change notification (observer pattern) support
+ "preObservable" - pre-change notification (observer pattern) support (requires .NET 3.5)
+ "partialMethods" - provide partial methods for changes (requires C# 3.0)
+ "detectMissing" - provide *Specified properties to indicate whether fields are present
+ "lightFramework" - omit additional attributes not included in CF/Silverlight
+ "asynchronous" - emit asynchronous methods for use with WCF
+ "clientProxy" - emit asynchronous client proxy class
+
+
+
+
+
+ Invalid options: xml and data-contract serialization are mutually exclusive.
+
+
+ ' Generated from
+
+ ' Option: xml serialization ([XmlType]/[XmlElement]) enabled
+
+ ' Option: data-contract serialization ([DataContract]/[DataMember]) enabled
+
+ ' Option: binary serialization (ISerializable) enabled
+
+ ' Option: observable (OnPropertyChanged) enabled
+
+ ' Option: pre-observable (OnPropertyChanging) enabled
+
+ ' Option: partial methods (On*Changing/On*Changed) enabled
+
+ ' Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled
+
+ ' Option: light framework (CF/Silverlight) enabled
+
+ ' Option: proto-rpc enabled
+
+
+
+
+
+' Generated from:
+
+
+
+
+
+
+Namespace
+
+
+
+End Namespace
+
+
+' Note: requires additional types generated from:
+
+
+
+
+<Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="")> _
+<Global.System.Runtime.Serialization.DataContract(Name:="")> _
+
+
+<Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="")> _
+<Global.System.Xml.Serialization.XmlType(TypeName:="")> _
+
+
+<Global.System.Serializable, Global.ProtoBuf.ProtoContract(Name:="")> _
+
+Public Partial Class
+ implements Global.ProtoBuf.IExtensible, Global.System.Runtime.Serialization.ISerializable, Global.System.ComponentModel.INotifyPropertyChanged, Global.System.ComponentModel.INotifyPropertyChanging
+
+ Public Sub New
+ End Sub
+
+ Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext)
+ MyBase.New()
+ Global.ProtoBuf.Serializer.Merge(info, Me)
+ End Sub
+
+ Sub GetObjectData(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) implements Global.System.Runtime.Serialization.ISerializable.GetObjectData
+ Global.ProtoBuf.Serializer.Serialize(info, Me)
+ End Sub
+
+
+ Public Event PropertyChanged As Global.System.ComponentModel.PropertyChangedEventHandler Implements Global.System.ComponentModel.INotifyPropertyChanged.PropertyChanged
+ Protected Overridable Sub OnPropertyChanged(ByVal propertyName As String)
+ RaiseEvent PropertyChanged(Me, New Global.System.ComponentModel.PropertyChangedEventArgs(propertyName))
+ End Sub
+
+ Public Event PropertyChanging As Global.System.ComponentModel.PropertyChangingEventHandler Implements Global.System.ComponentModel.INotifyPropertyChanging.PropertyChanging
+ Protected Overridable Sub OnPropertyChanging(ByVal propertyName As String)
+ RaiseEvent PropertyChanging(Me, New Global.System.ComponentModel.PropertyChangingEventArgs(propertyName))
+ End Sub
+
+ Private extensionObject As Global.ProtoBuf.IExtension
+ Function GetExtensionObject(createIfMissing As Boolean) As Global.ProtoBuf.IExtension Implements Global.ProtoBuf.IExtensible.GetExtensionObject
+ Return Global.ProtoBuf.Extensible.GetExtensionObject(extensionObject, createIfMissing)
+ End Function
+End Class
+
+
+
+
+
+
+
+
+
+
+
+ Public Enum
+
+ End Enum
+
+
+
+
+
+
+ =
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FixedSize
+ Group
+ TwosComplement
+ ZigZag
+ Default
+
+
+
+
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ class
+ class
+ struct
+ struct
+ struct
+ struct
+ struct
+ struct
+ none
+
+
+ Field type not implemented: (.)
+
+
+
+
+
+
+ double
+ Double
+ Single
+ Long
+ ULong
+ Integer
+ ULong
+ UInteger
+ Boolean
+ String
+ Byte()
+ UInteger
+ Integer
+ Long
+ Integer
+ Long
+
+
+
+
+
+ Field type not implemented: (.)
+
+
+
+
+
+
+
+
+ ""
+ .
+ '
+ CType(, )
+
+
+
+
+
+
+
+
+ .
+ .
+
+
+
+
+
+
+
+
+ 0.0
+ 0.0F
+ 0L
+ 0L
+ 0
+ 0L
+ 0
+ False
+ ""
+ Nothing
+ 0
+ 0
+ 0L
+ 0
+ 0L
+ Nothing
+ .
+ Nothing
+
+
+
+
+
+
+
+
+
+
+ Nullable(Of )
+
+
+
+ Private =
+
+
+ Private =
+
+
+
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=False, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+
+
+ <Global.System.ComponentModel.DefaultValue(CType(, ))> _
+
+
+ <Global.System.ComponentModel.DefaultValue(CType(, ))> _
+
+
+ <Global.System.Xml.Serialization.XmlElement("", Order:=)> _
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=False, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+
+
+ <Global.System.ComponentModel.DefaultValue(CType(, ))> _
+
+
+ <Global.System.ComponentModel.DefaultValue(CType(, ))> _
+
+
+ <Global.System.Runtime.Serialization.DataMember(Name:="", Order:=, IsRequired:=False)> _
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=False, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+
+ <Global.System.ComponentModel.DefaultValue(CType(, ))> _
+
+ <Global.System.ComponentModel.DefaultValue(CType(, ))> _
+
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=False, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+ <Global.System.Runtime.Serialization.DataMember(Name:="", Order:=, IsRequired:=False)> _
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=False, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+ <Global.System.Xml.Serialization.XmlElement("", Order:=)> _
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=False, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Private
+
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=True, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+ <Global.System.Runtime.Serialization.DataMember(Name:="", Order:=, IsRequired:=True)> _
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=True, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+ <Global.System.Xml.Serialization.XmlElement("", Order:=)> _
+
+ <Global.ProtoBuf.ProtoMember(, IsRequired:=True, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Public Property
+
+
+ Public Property
+
+
+ Get
+
+ Return
+
+ If Not Is Nothing Then
+ Return
+ Else
+ Return
+ End If
+ Return
+
+ End Get
+
+
+ Set()
+
+
+ Set()
+
+
+ OnChanging(value)
+ OnPropertyChanging("")
+ = value
+ OnPropertyChanged("") OnChanged()
+ End Set
+ End Property
+
+ partial void OnChanging( value);
+ partial void OnChanged();
+ <Global.System.Xml.Serialization.XmlIgnore> _
+ <Global.System.ComponentModel.Browsable(false)> _
+
+
+ Public Property Specified As Boolean
+ Get
+ Return .HasValue
+ End Get
+ Set (ByVal value As Boolean)
+ If Not .HasValue Then
+ If value = True then =
+ Else
+ If value = False then = Nothing
+ End If
+ End Set
+ End Property
+
+
+ Public Property Specified As Boolean
+ Get
+ Return IsNot Nothing
+ End Get
+ Set (ByVal value As Boolean)
+ If Is Nothing Then
+ If value = True then =
+ Else
+ If value = False then = Nothing
+ End If
+ End Set
+ End Property
+
+
+ Private Function ShouldSerialize() As Boolean
+ Return Specified
+ End Function
+ Private Sub Reset()
+ Specified = false
+ End Sub
+
+
+
+
+
+
+
+
+ Private ReadOnly as Global.System.Collections.Generic.List(Of ) = New Global.System.Collections.Generic.List(Of )()
+
+
+ Private ReadOnly as Global.System.Collections.Generic.List(Of ) = New Global.System.Collections.Generic.List(Of )()
+
+
+
+
+ <Global.ProtoBuf.ProtoMember(, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+ <Global.System.Runtime.Serialization.DataMember(Name:="", Order:=, IsRequired:=False)> _
+
+
+ <Global.ProtoBuf.ProtoMember(, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+ <Global.System.Xml.Serialization.XmlElement("", Order:=)> _
+
+
+ <Global.ProtoBuf.ProtoMember(, Name:="", DataFormat:=Global.ProtoBuf.DataFormat.)> _
+
+
+ Public ReadOnly Property As Global.System.Collections.Generic.List(Of )
+
+ Public ReadOnly Property As Global.System.Collections.Generic.List(Of )
+
+
+ Get
+ Return
+ End Get
+
+
+
+ Set (value As Global.System.Collections.Generic.List(Of ))
+
+
+ Set (value As Global.System.Collections.Generic.List(Of ))
+
+
+ = value
+ End Set
+
+ End Property
+
+
+
+
+ <Global.System.ServiceModel.ServiceContract(Name:="")> _
+
+ Public Interface I
+
+ End Interface
+
+
+ Public Class Client : Global.ProtoBuf.ServiceModel.RpcClient
+ public Client() : base(typeof(I)) { }
+
+
+ End Class
+
+
+
+
+
+
+
+ <Global.System.ServiceModel.OperationContract(Name:="")> _
+ <Global.ProtoBuf.ServiceModel.ProtoBehavior()> _
+
+ ( request);
+
+ <Global.System.ServiceModel.OperationContract(AsyncPattern:=True, Name:="")> _
+ Global.System.IAsyncResult Begin( request, Global.System.AsyncCallback callback, object state);
+ End(Global.System.IAsyncResult ar);
+
+
+
+
+ ( request)
+ {
+ return () Send("", request);
+ }
+
+
+
+
+
+
+
+
+ Public Class CompletedEventArgs : Global.System.ComponentModel.AsyncCompletedEventArgs
+ private object[] results;
+
+ public CompletedEventArgs(object[] results, Global.System.Exception exception, bool cancelled, object userState)
+ : base(exception, cancelled, userState)
+ {
+ this.results = results;
+ }
+
+ public Result
+ {
+ get {
+ base.RaiseExceptionIfNecessary();
+ return ()(this.results[0]);
+ }
+ }
+ End Class
+
+
+
+
+
+
+
+ <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
+ public partial class Client : Global.System.ServiceModel.ClientBase<I>, I
+ {
+
+ public Client()
+ {}
+ public Client(string endpointConfigurationName)
+ : base(endpointConfigurationName)
+ {}
+ public Client(string endpointConfigurationName, string remoteAddress)
+ : base(endpointConfigurationName, remoteAddress)
+ {}
+ public Client(string endpointConfigurationName, Global.System.ServiceModel.EndpointAddress remoteAddress)
+ : base(endpointConfigurationName, remoteAddress)
+ {}
+ public Client(Global.System.ServiceModel.Channels.Binding binding, Global.System.ServiceModel.EndpointAddress remoteAddress)
+ : base(binding, remoteAddress)
+ {}
+
+
+ }
+
+
+
+
+
+ private BeginOperationDelegate onBeginDelegate;
+ private EndOperationDelegate onEndDelegate;
+ private Global.System.Threading.SendOrPostCallback onCompletedDelegate;
+
+ public event Global.System.EventHandler<CompletedEventArgs> Completed;
+
+ public ( request)
+ {
+ return base.Channel.(request);
+ }
+
+ <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+ public Global.System.IAsyncResult Begin( request, Global.System.AsyncCallback callback, object asyncState)
+ {
+ return base.Channel.Begin(request, callback, asyncState);
+ }
+
+ <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+ public End(Global.System.IAsyncResult result)
+ {
+ return base.Channel.End(result);
+ }
+
+ private Global.System.IAsyncResult OnBegin(object[] inValues, Global.System.AsyncCallback callback, object asyncState)
+ {
+ request = (()(inValues[0]));
+ return this.Begin(request, callback, asyncState);
+ }
+
+ private object[] OnEnd(Global.System.IAsyncResult result)
+ {
+ retVal = this.End(result);
+ return new object[] {
+ retVal};
+ }
+
+ private void OnCompleted(object state)
+ {
+ if ((this.Completed != null))
+ {
+ InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+ this.Completed(this, new CompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+ }
+ }
+
+ public void Async( request)
+ {
+ this.Async(request, null);
+ }
+
+ public void Async( request, object userState)
+ {
+ if ((this.onBeginDelegate == null))
+ {
+ this.onBeginDelegate = new BeginOperationDelegate(this.OnBegin);
+ }
+ if ((this.onEndDelegate == null))
+ {
+ this.onEndDelegate = new EndOperationDelegate(this.OnEnd);
+ }
+ if ((this.onCompletedDelegate == null))
+ {
+ this.onCompletedDelegate = new Global.System.Threading.SendOrPostCallback(this.OnCompleted);
+ }
+ base.InvokeAsync(this.onBeginDelegate, new object[] {
+ request}, this.onEndDelegate, this.onCompletedDelegate, userState);
+ }
+
+
+
+
+ []
+
+
+ |AddHandler|AddressOf|Alias|And|AndAlso|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDec|CDbl|Char|CInt|Class|CLng|CObj|Const|Continue|CSByte|CShort|CSng|CStr|CType|CUInt|CULng|CUShort|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|False|Finally|For|Friend|Function|Get|GetType|GetXMLNamespace|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|Narrowing|New|Next|Not|Nothing|NotInheritable|NotOverridable|Object|Of|On|Operator|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|REM|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|True|Try|TryCast|TypeOf|Variant|Wend|UInteger|ULong|UShort|Using|When|While|Widening|With|WithEvents|WriteOnly|Xor|
+
+
+
diff --git a/ProtobufCore/Protogen-Tools/xml.xslt b/ProtobufCore/Protogen-Tools/xml.xslt
new file mode 100644
index 0000000..a8b1828
--- /dev/null
+++ b/ProtobufCore/Protogen-Tools/xml.xslt
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+ Xml template for protobuf-net.
+
+ This template writes the proto descriptor as xml.
+ No options available.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ProtobufCore/Target/protobuf_HunterNetCore.cs b/ProtobufCore/Target/protobuf_HunterNetCore.cs
new file mode 100644
index 0000000..740871f
--- /dev/null
+++ b/ProtobufCore/Target/protobuf_HunterNetCore.cs
@@ -0,0 +1,120 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+// Option: missing-value detection (*Specified/ShouldSerialize*/Reset*) enabled
+
+// Generated from: proto/protobuf_HunterNetCore.proto
+namespace HunterProtobufCore
+{
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"HunterNet_C2S")]
+ public partial class HunterNet_C2S : global::ProtoBuf.IExtensible
+ {
+ public HunterNet_C2S() {}
+
+ private int? _HunterNetCore_CmdID;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"HunterNetCore_CmdID", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ public int? HunterNetCore_CmdID
+ {
+ get { return _HunterNetCore_CmdID; }
+ set { _HunterNetCore_CmdID = value; }
+ }
+ [global::System.Xml.Serialization.XmlIgnore]
+ [global::System.ComponentModel.Browsable(false)]
+ public bool HunterNetCore_CmdIDSpecified
+ {
+ get { return this._HunterNetCore_CmdID != null; }
+ set { if (value == (this._HunterNetCore_CmdID== null)) this._HunterNetCore_CmdID = value ? this.HunterNetCore_CmdID : (int?)null; }
+ }
+ private bool ShouldSerializeHunterNetCore_CmdID() { return HunterNetCore_CmdIDSpecified; }
+ private void ResetHunterNetCore_CmdID() { HunterNetCore_CmdIDSpecified = false; }
+
+ private byte[] _HunterNetCore_Data;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"HunterNetCore_Data", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public byte[] HunterNetCore_Data
+ {
+ get { return _HunterNetCore_Data; }
+ set { _HunterNetCore_Data = value; }
+ }
+ [global::System.Xml.Serialization.XmlIgnore]
+ [global::System.ComponentModel.Browsable(false)]
+ public bool HunterNetCore_DataSpecified
+ {
+ get { return this._HunterNetCore_Data != null; }
+ set { if (value == (this._HunterNetCore_Data== null)) this._HunterNetCore_Data = value ? this.HunterNetCore_Data : (byte[])null; }
+ }
+ private bool ShouldSerializeHunterNetCore_Data() { return HunterNetCore_DataSpecified; }
+ private void ResetHunterNetCore_Data() { HunterNetCore_DataSpecified = false; }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"HunterNet_S2C")]
+ public partial class HunterNet_S2C : global::ProtoBuf.IExtensible
+ {
+ public HunterNet_S2C() {}
+
+ private int? _HunterNetCore_CmdID;
+ [global::ProtoBuf.ProtoMember(1, IsRequired = false, Name=@"HunterNetCore_CmdID", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ public int? HunterNetCore_CmdID
+ {
+ get { return _HunterNetCore_CmdID; }
+ set { _HunterNetCore_CmdID = value; }
+ }
+ [global::System.Xml.Serialization.XmlIgnore]
+ [global::System.ComponentModel.Browsable(false)]
+ public bool HunterNetCore_CmdIDSpecified
+ {
+ get { return this._HunterNetCore_CmdID != null; }
+ set { if (value == (this._HunterNetCore_CmdID== null)) this._HunterNetCore_CmdID = value ? this.HunterNetCore_CmdID : (int?)null; }
+ }
+ private bool ShouldSerializeHunterNetCore_CmdID() { return HunterNetCore_CmdIDSpecified; }
+ private void ResetHunterNetCore_CmdID() { HunterNetCore_CmdIDSpecified = false; }
+
+ private int? _HunterNetCore_ERRORCode;
+ [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"HunterNetCore_ERRORCode", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)]
+ public int? HunterNetCore_ERRORCode
+ {
+ get { return _HunterNetCore_ERRORCode; }
+ set { _HunterNetCore_ERRORCode = value; }
+ }
+ [global::System.Xml.Serialization.XmlIgnore]
+ [global::System.ComponentModel.Browsable(false)]
+ public bool HunterNetCore_ERRORCodeSpecified
+ {
+ get { return this._HunterNetCore_ERRORCode != null; }
+ set { if (value == (this._HunterNetCore_ERRORCode== null)) this._HunterNetCore_ERRORCode = value ? this.HunterNetCore_ERRORCode : (int?)null; }
+ }
+ private bool ShouldSerializeHunterNetCore_ERRORCode() { return HunterNetCore_ERRORCodeSpecified; }
+ private void ResetHunterNetCore_ERRORCode() { HunterNetCore_ERRORCodeSpecified = false; }
+
+ private byte[] _HunterNetCore_Data;
+ [global::ProtoBuf.ProtoMember(3, IsRequired = false, Name=@"HunterNetCore_Data", DataFormat = global::ProtoBuf.DataFormat.Default)]
+ public byte[] HunterNetCore_Data
+ {
+ get { return _HunterNetCore_Data; }
+ set { _HunterNetCore_Data = value; }
+ }
+ [global::System.Xml.Serialization.XmlIgnore]
+ [global::System.ComponentModel.Browsable(false)]
+ public bool HunterNetCore_DataSpecified
+ {
+ get { return this._HunterNetCore_Data != null; }
+ set { if (value == (this._HunterNetCore_Data== null)) this._HunterNetCore_Data = value ? this.HunterNetCore_Data : (byte[])null; }
+ }
+ private bool ShouldSerializeHunterNetCore_Data() { return HunterNetCore_DataSpecified; }
+ private void ResetHunterNetCore_Data() { HunterNetCore_DataSpecified = false; }
+
+ private global::ProtoBuf.IExtension extensionObject;
+ global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing)
+ { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); }
+ }
+
+}
\ No newline at end of file
diff --git a/ProtobufCore/build.bat b/ProtobufCore/build.bat
new file mode 100644
index 0000000..5df9e2d
--- /dev/null
+++ b/ProtobufCore/build.bat
@@ -0,0 +1,7 @@
+@echo off
+cd..
+set "protopath=%cd%"
+cd protocol
+protoc --proto_path=./proto --cpp_out=out "./proto/KyCmdProtocol.proto"
+protoc --proto_path=./proto --cpp_out=out "./proto/KyMsgProtocol.proto"
+pause
\ No newline at end of file
diff --git a/ProtobufCore/build_cs.bat b/ProtobufCore/build_cs.bat
new file mode 100644
index 0000000..7008494
--- /dev/null
+++ b/ProtobufCore/build_cs.bat
@@ -0,0 +1,18 @@
+@echo off
+
+set "PROTOC_EXE=%cd%\protoc.exe"
+set "WORK_DIR=%cd%\proto"
+set "CS_OUT_PATH=%cd%\Target"
+::if not exist %CS_OUT_PATH% md %CS_OUT_PATH%
+
+echo "==>>buildStart"
+for /f "delims=" %%i in ('dir /b proto "proto/*.proto"') do (
+ echo build file:%%%i
+ %PROTOC_EXE% --proto_path="%WORK_DIR%" --csharp_out="%CS_OUT_PATH%" "%WORK_DIR%\%%i"
+)
+echo "==>>build finish"
+echo "==>>copy cs"
+
+copy %cd%\Target\ ..\Protobuf\
+
+pause
\ No newline at end of file
diff --git a/ProtobufCore/proto/protobuf_Auth.proto b/ProtobufCore/proto/protobuf_Auth.proto
new file mode 100644
index 0000000..c982feb
--- /dev/null
+++ b/ProtobufCore/proto/protobuf_Auth.proto
@@ -0,0 +1,55 @@
+syntax = "proto3";
+package AxibugProtobuf;
+option optimize_for = SPEED;
+
+enum CommandID
+{
+ CMD_DEFAUL = 0;//缺省不使用
+ CMD_LOGIN = 2001; //登录 对应上行|下行 Protobuf_Login | Protobuf_Login_RESP
+}
+
+enum ErrorCode
+{
+ ERROR_DEFAUL = 0;//缺省
+ ERROR_OK = 1; //成功
+}
+
+enum LoginType
+{
+ BaseDefault = 0;//缺省
+ HaoYueAuth = 1;
+}
+
+enum DeviceType
+{
+ Default = 0;//缺省
+ PC = 1;
+ Android = 2;
+ IOS = 3;
+ PSV = 4;
+}
+
+enum LoginResultStatus
+{
+ LoginResultStatus_BaseDefault = 0;//缺省不使用
+ OK = 1;
+ AccountErr = 2;
+}
+
+//登录数据上行
+message Protobuf_Login
+{
+ LoginType loginType = 1;//登录操作类型
+ DeviceType deviceType = 2;//设备类型
+ string Account = 3;//用户名
+ string Password = 4;//密码
+}
+
+//登录数据下行
+message Protobuf_Login_RESP
+{
+ string Token = 1;//登录凭据 (本次登录之后,所有业务请求凭据,需要存储在内存中)
+ string LastLoginDate = 2;//上次登录时间(只用于呈现的字符串,若界面需求需要)
+ string RegDate = 3;//注册时间(只用于呈现的字符串,若界面需求需要)
+ LoginResultStatus Status = 4;//账号状态 (预留) [1]正常[0]被禁封
+}
\ No newline at end of file
diff --git a/ProtobufCore/proto/protobuf_HunterNetCore.proto b/ProtobufCore/proto/protobuf_HunterNetCore.proto
new file mode 100644
index 0000000..06c335b
--- /dev/null
+++ b/ProtobufCore/proto/protobuf_HunterNetCore.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+package HunterProtobufCore;
+option optimize_for = SPEED;
+
+//上行
+message HunterNet_C2S {
+ int32 HunterNetCore_CmdID = 1;
+ bytes HunterNetCore_Data = 2;
+}
+
+//下行
+message HunterNet_S2C {
+ int32 HunterNetCore_CmdID = 1;
+ int32 HunterNetCore_ERRORCode = 2;
+ bytes HunterNetCore_Data = 3;
+}
\ No newline at end of file
diff --git a/ProtobufCore/protobuf-net.dll b/ProtobufCore/protobuf-net.dll
new file mode 100644
index 0000000..942e33b
Binary files /dev/null and b/ProtobufCore/protobuf-net.dll differ
diff --git a/ProtobufCore/protoc.exe b/ProtobufCore/protoc.exe
new file mode 100644
index 0000000..db74054
Binary files /dev/null and b/ProtobufCore/protoc.exe differ
diff --git a/ProtobufCore/protoc_net.bat b/ProtobufCore/protoc_net.bat
new file mode 100644
index 0000000..0c9f56e
--- /dev/null
+++ b/ProtobufCore/protoc_net.bat
@@ -0,0 +1,2 @@
+call protoc proto\protobuf_HunterNetCore.proto --descriptor_set_out=Desc\protobuf_HunterNetCore.protodesc
+pause
\ No newline at end of file
diff --git a/ProtobufCore/protogen.exe.config b/ProtobufCore/protogen.exe.config
new file mode 100644
index 0000000..e59af44
--- /dev/null
+++ b/ProtobufCore/protogen.exe.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/ProtobufCore/protogen_net.bat b/ProtobufCore/protogen_net.bat
new file mode 100644
index 0000000..1a3510d
--- /dev/null
+++ b/ProtobufCore/protogen_net.bat
@@ -0,0 +1,2 @@
+call Protogen-Tools\protogen -i:Desc\protobuf_HunterNetCore.protodesc -o:Target\protobuf_HunterNetCore.cs -p:detectMissing
+
diff --git a/Server/Program.cs b/Server/Program.cs
new file mode 100644
index 0000000..c344a57
--- /dev/null
+++ b/Server/Program.cs
@@ -0,0 +1,19 @@
+using ServerCore;
+
+ServerManager.InitServer(23846);
+
+while (true)
+{
+ string CommandStr = Console.ReadLine();
+ string Command = "";
+ Command = ((CommandStr.IndexOf(" ") <= 0) ? CommandStr : CommandStr.Substring(0, CommandStr.IndexOf(" ")));
+ switch (Command)
+ {
+ case "list":
+ Console.WriteLine("当前在线:" + ServerManager.g_ClientMgr.ClientList.Count());
+ break;
+ default:
+ Console.WriteLine("未知命令" + CommandStr);
+ break;
+ }
+}
\ No newline at end of file
diff --git a/Server/Server.csproj b/Server/Server.csproj
new file mode 100644
index 0000000..57b0271
--- /dev/null
+++ b/Server/Server.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/Server/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/Server/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..4257f4b
--- /dev/null
+++ b/Server/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
diff --git a/Server/obj/Debug/net7.0/Server.AssemblyInfo.cs b/Server/obj/Debug/net7.0/Server.AssemblyInfo.cs
new file mode 100644
index 0000000..84f6634
--- /dev/null
+++ b/Server/obj/Debug/net7.0/Server.AssemblyInfo.cs
@@ -0,0 +1,23 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("Server")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("Server")]
+[assembly: System.Reflection.AssemblyTitleAttribute("Server")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// 由 MSBuild WriteCodeFragment 类生成。
+
diff --git a/Server/obj/Debug/net7.0/Server.AssemblyInfoInputs.cache b/Server/obj/Debug/net7.0/Server.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..3d2b19f
--- /dev/null
+++ b/Server/obj/Debug/net7.0/Server.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+24a19a338571d06fa5670dc4c5fa352c3d517153
diff --git a/Server/obj/Debug/net7.0/Server.GeneratedMSBuildEditorConfig.editorconfig b/Server/obj/Debug/net7.0/Server.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..e8ff93e
--- /dev/null
+++ b/Server/obj/Debug/net7.0/Server.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,11 @@
+is_global = true
+build_property.TargetFramework = net7.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = Server
+build_property.ProjectDir = F:\Sin365\HaoYueTunnel\Server\
diff --git a/Server/obj/Debug/net7.0/Server.GlobalUsings.g.cs b/Server/obj/Debug/net7.0/Server.GlobalUsings.g.cs
new file mode 100644
index 0000000..8578f3d
--- /dev/null
+++ b/Server/obj/Debug/net7.0/Server.GlobalUsings.g.cs
@@ -0,0 +1,8 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/Server/obj/Debug/net7.0/Server.assets.cache b/Server/obj/Debug/net7.0/Server.assets.cache
new file mode 100644
index 0000000..a09d4ed
Binary files /dev/null and b/Server/obj/Debug/net7.0/Server.assets.cache differ
diff --git a/Server/obj/Debug/net7.0/Server.csproj.AssemblyReference.cache b/Server/obj/Debug/net7.0/Server.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..313eac1
Binary files /dev/null and b/Server/obj/Debug/net7.0/Server.csproj.AssemblyReference.cache differ
diff --git a/Server/obj/Debug/net7.0/Server.csproj.FileListAbsolute.txt b/Server/obj/Debug/net7.0/Server.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..e69de29
diff --git a/Server/obj/Server.csproj.nuget.dgspec.json b/Server/obj/Server.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..f8dfdbd
--- /dev/null
+++ b/Server/obj/Server.csproj.nuget.dgspec.json
@@ -0,0 +1,181 @@
+{
+ "format": 1,
+ "restore": {
+ "F:\\Sin365\\HaoYueTunnel\\Server\\Server.csproj": {}
+ },
+ "projects": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "projectName": "Protobuf",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ },
+ "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj",
+ "projectName": "ServerCore",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ },
+ "F:\\Sin365\\HaoYueTunnel\\Server\\Server.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Server\\Server.csproj",
+ "projectName": "Server",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Server\\Server.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Server\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Server/obj/Server.csproj.nuget.g.props b/Server/obj/Server.csproj.nuget.g.props
new file mode 100644
index 0000000..b176dc5
--- /dev/null
+++ b/Server/obj/Server.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\35337\.nuget\packages\
+ PackageReference
+ 6.4.0
+
+
+
+
+
\ No newline at end of file
diff --git a/Server/obj/Server.csproj.nuget.g.targets b/Server/obj/Server.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/Server/obj/Server.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/Server/obj/project.assets.json b/Server/obj/project.assets.json
new file mode 100644
index 0000000..c5c28bc
--- /dev/null
+++ b/Server/obj/project.assets.json
@@ -0,0 +1,109 @@
+{
+ "version": 3,
+ "targets": {
+ "net7.0": {
+ "Protobuf/1.0.0": {
+ "type": "project",
+ "framework": ".NETCoreApp,Version=v7.0",
+ "compile": {
+ "bin/placeholder/Protobuf.dll": {}
+ },
+ "runtime": {
+ "bin/placeholder/Protobuf.dll": {}
+ }
+ },
+ "ServerCore/1.0.0": {
+ "type": "project",
+ "framework": ".NETCoreApp,Version=v7.0",
+ "dependencies": {
+ "Protobuf": "1.0.0"
+ },
+ "compile": {
+ "bin/placeholder/ServerCore.dll": {}
+ },
+ "runtime": {
+ "bin/placeholder/ServerCore.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Protobuf/1.0.0": {
+ "type": "project",
+ "path": "../Protobuf/Protobuf.csproj",
+ "msbuildProject": "../Protobuf/Protobuf.csproj"
+ },
+ "ServerCore/1.0.0": {
+ "type": "project",
+ "path": "../ServerCore/ServerCore.csproj",
+ "msbuildProject": "../ServerCore/ServerCore.csproj"
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net7.0": [
+ "ServerCore >= 1.0.0"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\35337\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Server\\Server.csproj",
+ "projectName": "Server",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Server\\Server.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Server\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ServerCore/Manager/ClientManager.cs b/ServerCore/Manager/ClientManager.cs
new file mode 100644
index 0000000..1ccb9d3
--- /dev/null
+++ b/ServerCore/Manager/ClientManager.cs
@@ -0,0 +1,198 @@
+using System.Net.Sockets;
+using System.Timers;
+
+namespace ServerCore
+{
+ public class ClientInfo
+ {
+ public long UID { get; set; }
+ public Socket _socket { get; set; }
+ public bool IsOffline { get; set; } = false;
+ public DateTime LogOutDT { get; set; }
+ }
+
+ public class ClientManager
+ {
+ public List ClientList = new List();
+ public Dictionary _DictSocketClient = new Dictionary();
+ public Dictionary _DictUIDClient = new Dictionary();
+ public long TestUIDSeed = 0;
+
+ private System.Timers.Timer _ClientCheckTimer;
+ private long _RemoveOfflineCacheMin;
+ public void Init(long ticktime,long RemoveOfflineCacheMin)
+ {
+ //换算成毫秒
+ _RemoveOfflineCacheMin = RemoveOfflineCacheMin * 1000;
+ _ClientCheckTimer = new System.Timers.Timer();
+ _ClientCheckTimer.Interval = ticktime;
+ _ClientCheckTimer.AutoReset = true;
+ _ClientCheckTimer.Elapsed += new ElapsedEventHandler(ClientCheckClearOffline_Elapsed);
+ _ClientCheckTimer.Enabled = true;
+ }
+
+ public long GetNextUID()
+ {
+ return ++TestUIDSeed;
+ }
+
+ private void ClientCheckClearOffline_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
+ {
+ DateTime CheckDT = DateTime.Now.AddMinutes(-1 * _RemoveOfflineCacheMin);
+ ClientInfo[] OfflineClientlist = ClientList.Where(w => w.IsOffline == true && w.LogOutDT < CheckDT).ToArray();
+
+ Console.WriteLine("开始清理离线过久的玩家的缓存");
+ for (int i = 0; i < OfflineClientlist.Length; i++)
+ {
+ //to do 掉线处理
+ RemoveClient(OfflineClientlist[i]);
+ }
+ GC.Collect();
+ }
+
+
+ //通用处理
+ #region clientlist 处理
+
+ public ClientInfo JoinNewClient(Socket _socket)
+ {
+ //也许这个函数需加lock
+
+ ClientInfo cinfo = GetClientForSocket(_socket);
+ //如果连接还在
+ if (cinfo != null)
+ {
+ cinfo.IsOffline = true;
+ }
+ else
+ {
+ cinfo = new ClientInfo()
+ {
+ UID = GetNextUID(),
+ _socket = _socket,
+ IsOffline = true,
+ };
+ AddClient(cinfo);
+ }
+ return cinfo;
+ }
+
+ ///
+ /// 增加用户
+ ///
+ ///
+ void AddClient(ClientInfo clientInfo)
+ {
+ try
+ {
+ Console.WriteLine("追加连接玩家 UID=>" + clientInfo.UID);
+ lock (ClientList)
+ {
+ _DictUIDClient.Add(clientInfo.UID, clientInfo);
+ _DictSocketClient.Add(clientInfo._socket, clientInfo);
+ ClientList.Add(clientInfo);
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.ToString();
+ }
+ }
+
+ ///
+ /// 清理连接
+ ///
+ ///
+ public void RemoveClient(ClientInfo client)
+ {
+ lock (ClientList)
+ {
+ if(_DictUIDClient.ContainsKey(client.UID))
+ _DictUIDClient.Remove(client.UID);
+
+ if (_DictSocketClient.ContainsKey(client._socket))
+ _DictSocketClient.Remove(client._socket);
+
+ ClientList.Remove(client);
+ }
+ }
+
+
+ public ClientInfo GetClientForSocket(Socket sk)
+ {
+ return _DictSocketClient.ContainsKey(sk) ? _DictSocketClient[sk] : null;
+ }
+
+ ///
+ /// 获取在线玩家
+ ///
+ ///
+ public List GetOnlineClientList()
+ {
+ return ClientList.Where(w => w.IsOffline == false).ToList();
+ }
+
+
+ ///
+ /// 设置玩家离线
+ ///
+ ///
+ public void SetClientOfflineForSocket(Socket sk)
+ {
+ if (!_DictSocketClient.ContainsKey(sk))
+ return;
+
+ Console.WriteLine("标记玩家UID"+ _DictSocketClient[sk].UID+ "为离线");
+ _DictSocketClient[sk].IsOffline = true;
+ _DictSocketClient[sk].LogOutDT = DateTime.Now;
+ }
+
+ public void RemoveClientForSocket(Socket sk)
+ {
+ if (!_DictSocketClient.ContainsKey(sk))
+ return;
+
+ RemoveClient(_DictSocketClient[sk]);
+ }
+
+ #endregion
+
+
+ ///
+ /// 给一组用户发送数据
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void ClientSend(List _toclientlist, int CMDID, int ERRCODE, byte[] data)
+ {
+ for (int i = 0; i < _toclientlist.Count();i++)
+ {
+ if (_toclientlist[i] == null || _toclientlist[i].IsOffline)
+ continue;
+ ServerManager.g_SocketMgr.SendToSocket(_toclientlist[i]._socket, CMDID,ERRCODE,data);
+ }
+ }
+
+ public void ClientSend(Socket _socket, int CMDID, int ERRCODE, byte[] data)
+ {
+ //Console.WriteLine("发送数据 CMDID->"+ CMDID);
+ ServerManager.g_SocketMgr.SendToSocket(_socket, CMDID, ERRCODE, data);
+ }
+
+ ///
+ /// 给一个连接发送数据
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void ClientSend(ClientInfo _c, int CMDID, int ERRCODE, byte[] data)
+ {
+ if (_c == null || _c.IsOffline)
+ return;
+ ServerManager.g_SocketMgr.SendToSocket(_c._socket, CMDID, ERRCODE, data);
+ }
+ }
+}
diff --git a/ServerCore/Manager/LogManager.cs b/ServerCore/Manager/LogManager.cs
new file mode 100644
index 0000000..a431a49
--- /dev/null
+++ b/ServerCore/Manager/LogManager.cs
@@ -0,0 +1,20 @@
+namespace ServerCore
+{
+ public class LogManager
+ {
+ public void Debug(string str)
+ {
+ Console.WriteLine(str);
+ }
+
+ public void Warning(string str)
+ {
+ Console.WriteLine(str);
+ }
+
+ public void Error(string str)
+ {
+ Console.WriteLine(str);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ServerCore/Manager/LoginManager.cs b/ServerCore/Manager/LoginManager.cs
new file mode 100644
index 0000000..da00262
--- /dev/null
+++ b/ServerCore/Manager/LoginManager.cs
@@ -0,0 +1,25 @@
+using AxibugProtobuf;
+using System.Net.Sockets;
+
+namespace ServerCore
+{
+ public class LoginManager
+ {
+ public void UserLogin(Socket _socket,byte[] reqData)
+ {
+ ServerManager.g_Log.Debug("收到新的登录请求");
+ Protobuf_Login msg = NetBase.DeSerizlize(reqData);
+ ClientInfo cinfo = ServerManager.g_ClientMgr.JoinNewClient(_socket);
+
+ byte[] respData = NetBase.Serizlize(new Protobuf_Login_RESP()
+ {
+ Status = LoginResultStatus.Ok,
+ RegDate = "",
+ LastLoginDate = "",
+ Token = ""
+ });
+
+ ServerManager.g_ClientMgr.ClientSend(cinfo,(int)CommandID.CmdLogin,(int)ErrorCode.ErrorOk,respData);
+ }
+ }
+}
\ No newline at end of file
diff --git a/ServerCore/Manager/ServerManager.cs b/ServerCore/Manager/ServerManager.cs
new file mode 100644
index 0000000..e2d2466
--- /dev/null
+++ b/ServerCore/Manager/ServerManager.cs
@@ -0,0 +1,24 @@
+using System.Net;
+
+namespace ServerCore
+{
+ public static class ServerManager
+ {
+ public static ClientManager g_ClientMgr;
+ public static LogManager g_Log;
+ public static LoginManager g_Login;
+ public static IOCPNetWork g_SocketMgr;
+
+ public static void InitServer(int port)
+ {
+ g_ClientMgr = new ClientManager();
+ g_Log = new LogManager();
+ g_Login = new LoginManager();
+ g_SocketMgr = new IOCPNetWork(1024, 1024);
+ g_SocketMgr.Init();
+ g_SocketMgr.Start(new IPEndPoint(IPAddress.Any.Address, port));
+ Console.WriteLine("监听:" + port);
+ Console.WriteLine("Succeed!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/ServerCore/NetWork/IOCPNetWork.cs b/ServerCore/NetWork/IOCPNetWork.cs
new file mode 100644
index 0000000..2fedb6d
--- /dev/null
+++ b/ServerCore/NetWork/IOCPNetWork.cs
@@ -0,0 +1,79 @@
+using AxibugProtobuf;
+using HaoYueNet.ServerNetwork;
+using System.Net.Sockets;
+
+namespace ServerCore
+{
+ public class IOCPNetWork : SocketManager
+ {
+ public IOCPNetWork(int numConnections, int receiveBufferSize)
+ : base(numConnections, receiveBufferSize)
+ {
+ m_clientCount = 0;
+ m_maxConnectNum = numConnections;
+ m_revBufferSize = receiveBufferSize;
+ // allocate buffers such that the maximum number of sockets can have one outstanding read and
+ //write posted to the socket simultaneously
+ m_bufferManager = new BufferManager(receiveBufferSize * numConnections * opsToAlloc, receiveBufferSize);
+
+ m_pool = new SocketEventPool(numConnections);
+ m_maxNumberAcceptedClients = new Semaphore(numConnections, numConnections);
+
+
+ ClientNumberChange += IOCPNetWork_ClientNumberChange;
+
+ }
+
+ private void IOCPNetWork_ClientNumberChange(int num, AsyncUserToken token)
+ {
+ Console.WriteLine("Client数发生变化");
+ }
+
+ ///
+ /// 接受包回调
+ ///
+ /// 协议ID
+ /// 错误编号
+ /// 业务数据
+ public override void DataCallBack(AsyncUserToken token, int CMDID, byte[] data)
+ {
+ DataCallBackToOld(token.Socket, CMDID, data);
+ }
+
+ public void DataCallBackToOld(Socket sk, int CMDID, byte[] data)
+ {
+ ServerManager.g_Log.Debug("收到消息 CMDID =>" + CMDID + " 数据长度=>" + data.Length);
+ try
+ {
+ switch ((CommandID)CMDID)
+ {
+ case CommandID.CmdLogin:ServerManager.g_Login.UserLogin(sk, data); break;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("逻辑处理错误:" + ex.ToString());
+ }
+ }
+
+ ///
+ /// 断开连接
+ ///
+ ///
+ public override void OnClose(AsyncUserToken token)
+ {
+ OnCloseToOld(token.Socket);
+ }
+
+ ///
+ /// 断开连接
+ ///
+ ///
+ public void OnCloseToOld(Socket sk)
+ {
+ Console.WriteLine("断开连接");
+ ServerManager.g_ClientMgr.SetClientOfflineForSocket(sk);
+ }
+
+ }
+}
diff --git a/ServerCore/NetWork/NetBase.cs b/ServerCore/NetWork/NetBase.cs
new file mode 100644
index 0000000..1b944b7
--- /dev/null
+++ b/ServerCore/NetWork/NetBase.cs
@@ -0,0 +1,33 @@
+using ProtoBuf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ServerCore
+{
+ public static class NetBase
+ {
+ //序列化
+ public static byte[] Serizlize(T MsgObj)
+ {
+ using (MemoryStream ms = new MemoryStream())
+ {
+ Serializer.Serialize(ms, MsgObj);
+ byte[] data1 = ms.ToArray();
+ return data1;
+ }
+ }
+ //反序列化
+ public static T DeSerizlize(byte[] MsgObj)
+ {
+ using (MemoryStream ms = new MemoryStream(MsgObj))
+ {
+ var ds_obj = Serializer.Deserialize(ms);
+ return ds_obj;
+ }
+ }
+ }
+
+}
diff --git a/ServerCore/ServerCore.csproj b/ServerCore/ServerCore.csproj
new file mode 100644
index 0000000..6f8b336
--- /dev/null
+++ b/ServerCore/ServerCore.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+ ..\NetLib\HaoYueNet.ServerNetwork.dll
+
+
+ ..\NetLib\protobuf-net.dll
+
+
+
+
diff --git a/ServerCore/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/ServerCore/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..4257f4b
--- /dev/null
+++ b/ServerCore/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.AssemblyInfo.cs b/ServerCore/obj/Debug/net7.0/ServerCore.AssemblyInfo.cs
new file mode 100644
index 0000000..d509940
--- /dev/null
+++ b/ServerCore/obj/Debug/net7.0/ServerCore.AssemblyInfo.cs
@@ -0,0 +1,23 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("ServerCore")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("ServerCore")]
+[assembly: System.Reflection.AssemblyTitleAttribute("ServerCore")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// 由 MSBuild WriteCodeFragment 类生成。
+
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.AssemblyInfoInputs.cache b/ServerCore/obj/Debug/net7.0/ServerCore.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..d2b2e6b
--- /dev/null
+++ b/ServerCore/obj/Debug/net7.0/ServerCore.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+8595c8bfdc306793f65340af2478834a8a61dc33
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.GeneratedMSBuildEditorConfig.editorconfig b/ServerCore/obj/Debug/net7.0/ServerCore.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..19a77b7
--- /dev/null
+++ b/ServerCore/obj/Debug/net7.0/ServerCore.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,11 @@
+is_global = true
+build_property.TargetFramework = net7.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = ServerCore
+build_property.ProjectDir = F:\Sin365\HaoYueTunnel\ServerCore\
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.GlobalUsings.g.cs b/ServerCore/obj/Debug/net7.0/ServerCore.GlobalUsings.g.cs
new file mode 100644
index 0000000..8578f3d
--- /dev/null
+++ b/ServerCore/obj/Debug/net7.0/ServerCore.GlobalUsings.g.cs
@@ -0,0 +1,8 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.assets.cache b/ServerCore/obj/Debug/net7.0/ServerCore.assets.cache
new file mode 100644
index 0000000..5694e5d
Binary files /dev/null and b/ServerCore/obj/Debug/net7.0/ServerCore.assets.cache differ
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.csproj.AssemblyReference.cache b/ServerCore/obj/Debug/net7.0/ServerCore.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..b391732
Binary files /dev/null and b/ServerCore/obj/Debug/net7.0/ServerCore.csproj.AssemblyReference.cache differ
diff --git a/ServerCore/obj/Debug/net7.0/ServerCore.csproj.FileListAbsolute.txt b/ServerCore/obj/Debug/net7.0/ServerCore.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..e69de29
diff --git a/ServerCore/obj/ServerCore.csproj.nuget.dgspec.json b/ServerCore/obj/ServerCore.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..e598bad
--- /dev/null
+++ b/ServerCore/obj/ServerCore.csproj.nuget.dgspec.json
@@ -0,0 +1,122 @@
+{
+ "format": 1,
+ "restore": {
+ "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj": {}
+ },
+ "projects": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "projectName": "Protobuf",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ },
+ "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj",
+ "projectName": "ServerCore",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ServerCore/obj/ServerCore.csproj.nuget.g.props b/ServerCore/obj/ServerCore.csproj.nuget.g.props
new file mode 100644
index 0000000..b176dc5
--- /dev/null
+++ b/ServerCore/obj/ServerCore.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\35337\.nuget\packages\
+ PackageReference
+ 6.4.0
+
+
+
+
+
\ No newline at end of file
diff --git a/ServerCore/obj/ServerCore.csproj.nuget.g.targets b/ServerCore/obj/ServerCore.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/ServerCore/obj/ServerCore.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/ServerCore/obj/project.assets.json b/ServerCore/obj/project.assets.json
new file mode 100644
index 0000000..ef36e15
--- /dev/null
+++ b/ServerCore/obj/project.assets.json
@@ -0,0 +1,91 @@
+{
+ "version": 3,
+ "targets": {
+ "net7.0": {
+ "Protobuf/1.0.0": {
+ "type": "project",
+ "framework": ".NETCoreApp,Version=v7.0",
+ "compile": {
+ "bin/placeholder/Protobuf.dll": {}
+ },
+ "runtime": {
+ "bin/placeholder/Protobuf.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Protobuf/1.0.0": {
+ "type": "project",
+ "path": "../Protobuf/Protobuf.csproj",
+ "msbuildProject": "../Protobuf/Protobuf.csproj"
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net7.0": [
+ "Protobuf >= 1.0.0"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\35337\\.nuget\\packages\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj",
+ "projectName": "ServerCore",
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\ServerCore.csproj",
+ "packagesPath": "C:\\Users\\35337\\.nuget\\packages\\",
+ "outputPath": "F:\\Sin365\\HaoYueTunnel\\ServerCore\\obj\\",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "C:\\Users\\35337\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net7.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "projectReferences": {
+ "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj": {
+ "projectPath": "F:\\Sin365\\HaoYueTunnel\\Protobuf\\Protobuf.csproj"
+ }
+ }
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net7.0": {
+ "targetAlias": "net7.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.200\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file