Parcourir la source

1.增加了Helper库,可以放置一些通用的库
2.protobuf-net联调通过

tanghai il y a 13 ans
Parent
commit
0d935a4c71

+ 1 - 0
CSharp/App/Modules/Robot/Protos/Messages.cs

@@ -4,6 +4,7 @@ using ProtoBuf;
 namespace Robot.Protos
 {
 	[ProtoContract]
+	[System.Xml.Serialization.XmlType(TypeName = "SMSG_Auth_Challenge")]
 	public class SMSG_Auth_Challenge
 	{
 		[ProtoMember(1, IsRequired = true)]

+ 4 - 3
CSharp/App/Modules/Robot/Robot.csproj

@@ -32,9 +32,6 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="BouncyCastle.Crypto">
-      <HintPath>..\..\..\packages\BouncyCastle.1.7.0\lib\Net20\BouncyCastle.Crypto.dll</HintPath>
-    </Reference>
     <Reference Include="Microsoft.Practices.Prism">
       <HintPath>..\..\..\packages\Prism.4.1.0.0\lib\NET40\Microsoft.Practices.Prism.dll</HintPath>
     </Reference>
@@ -69,6 +66,10 @@
     </Page>
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\..\Platform\Helper\Helper.csproj">
+      <Project>{24233cd5-a5df-484b-a482-b79cb7a0d9cb}</Project>
+      <Name>Helper</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\..\Platform\Log\Log.csproj">
       <Project>{72e16572-fc1f-4a9e-bc96-035417239298}</Project>
       <Name>Log</Name>

+ 8 - 6
CSharp/App/Modules/Robot/RobotViewModel.cs

@@ -4,6 +4,7 @@ using System.IO;
 using System.Text;
 using System.Windows.Threading;
 using ENet;
+using Helper;
 using Log;
 using Microsoft.Practices.Prism.ViewModel;
 using ProtoBuf;
@@ -55,16 +56,17 @@ namespace Modules.Robot
 				{
 					using (Packet packet = await peer.ReceiveAsync())
 					{
-						Logger.Debug(packet.Length + " " + packet.Data);
-						var bytes = Encoding.Default.GetBytes(packet.Data);
 						var builder = new StringBuilder();
-						foreach (var b in bytes)
+						var bytes = packet.Bytes;
+						for (int i = 0; i < bytes.Length; ++i)
 						{
+							var b = bytes[i];
 							builder.Append(b.ToString("X2"));
 						}
-						Logger.Debug(string.Format("HEX string: {0}", builder));
-						var smsg = Serializer.Deserialize<SMSG_Auth_Challenge>(new MemoryStream(bytes));
-						Logger.Debug(string.Format("{0}, {1}", smsg.Num, smsg.Seed));
+						var packetStream = new MemoryStream(bytes, 4, bytes.Length - 4);
+						var smsg = Serializer.Deserialize<SMSG_Auth_Challenge>(packetStream);
+						Logger.Debug(string.Format(
+							"opcode: {0}\n{1}", BitConverter.ToUInt16(bytes, 0), XmlHelper.XmlSerialize(smsg)));
 						await peer.DisconnectLaterAsync();
 					}
 				}

+ 15 - 0
CSharp/CSharp.sln

@@ -41,6 +41,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{FD5F443E
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtobufTool", "Tools\ProtobufTool\ProtobufTool.csproj", "{87537C92-B2C7-4E46-A6FB-02B73215C100}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Helper", "Platform\Helper\Helper.csproj", "{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -177,6 +179,18 @@ Global
 		{87537C92-B2C7-4E46-A6FB-02B73215C100}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{87537C92-B2C7-4E46-A6FB-02B73215C100}.Release|Win32.ActiveCfg = Release|Any CPU
 		{87537C92-B2C7-4E46-A6FB-02B73215C100}.Release|x86.ActiveCfg = Release|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Debug|Win32.ActiveCfg = Debug|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Release|Win32.ActiveCfg = Release|Any CPU
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -187,6 +201,7 @@ Global
 		{48A2E149-0DAC-41B4-BB54-DFBCCD6D42B3} = {6E9D97F0-4243-452E-B832-1A855B8118EB}
 		{3A98B35C-DEA8-489C-9203-263FFB6B065D} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
 		{72E16572-FC1F-4A9E-BC96-035417239298} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
+		{24233CD5-A5DF-484B-A482-B79CB7A0D9CB} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
 		{6CD185D1-08E0-4729-A999-2D5B57BA8193} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}
 		{5D6ECBCD-BE14-4DCB-BAEC-57089748B164} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}
 		{5AA48F9A-455D-4CD8-A605-A3AC38283E60} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}

+ 49 - 0
CSharp/Platform/Helper/Helper.csproj

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{24233CD5-A5DF-484B-A482-B79CB7A0D9CB}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Helper</RootNamespace>
+    <AssemblyName>Helper</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\Bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="XmlHelper.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
CSharp/Platform/Helper/Properties/AssemblyInfo.cs

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

+ 44 - 0
CSharp/Platform/Helper/XmlHelper.cs

@@ -0,0 +1,44 @@
+using System;
+using System.IO;
+using System.Text;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace Helper
+{
+    public class XmlHelper
+    {
+		/// <summary>
+		/// 对象序列化成 XML String
+		/// </summary>
+		public static string XmlSerialize<T>(T obj)
+		{
+			string xmlString = string.Empty;
+			var xmlSerializer = new XmlSerializer(typeof(T));
+			using (var ms = new MemoryStream())
+			{
+				xmlSerializer.Serialize(ms, obj);
+				xmlString = Encoding.UTF8.GetString(ms.ToArray());
+			}
+			return xmlString;
+		}
+
+		/// <summary>
+		/// XML String 反序列化成对象
+		/// </summary>
+		public static T XmlDeserialize<T>(string xmlString)
+		{
+			T t = default(T);
+			var xmlSerializer = new XmlSerializer(typeof(T));
+			using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
+			{
+				using (var xmlReader = XmlReader.Create(xmlStream))
+				{
+					Object obj = xmlSerializer.Deserialize(xmlReader);
+					t = (T)obj;
+				}
+			}
+			return t;
+		}
+    }
+}

+ 6 - 11
CSharp/ThirdParty/ENetCS/Packet.cs

@@ -1,4 +1,5 @@
 using System;
+using System.IO;
 using System.Runtime.InteropServices;
 
 namespace ENet
@@ -85,20 +86,14 @@ namespace ENet
 			}
 		}
 
-		public string Data
+		public byte[] Bytes
 		{
 			get
 			{
-				if (this.packet == IntPtr.Zero)
-				{
-					return "";
-				}
-				ENetPacket pkt = this.Struct;
-				if (pkt.data == IntPtr.Zero)
-				{
-					return "";
-				}
-				return Marshal.PtrToStringAuto(pkt.data, (int) pkt.dataLength);
+				var enetPacket = this.Struct;
+				var bytes = new byte[enetPacket.dataLength];
+				Marshal.Copy(enetPacket.data, bytes, 0, (int) enetPacket.dataLength);
+				return bytes;
 			}
 		}
 	}