Quellcode durchsuchen

Zmq 增加 async await 方法

tanghai vor 12 Jahren
Ursprung
Commit
ec19f7b66f

+ 15 - 0
CSharp/CSharp.sln

@@ -70,6 +70,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZmqTest", "Platform\ZmqTest\ZmqTest.csproj", "{AAEAFEF6-C3CC-4507-A012-04732EAA088A}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Zmq", "Platform\Zmq\Zmq.csproj", "{31A4AF28-0988-4862-9D5A-69D34CDB50E6}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -374,6 +376,18 @@ Global
 		{AAEAFEF6-C3CC-4507-A012-04732EAA088A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
 		{AAEAFEF6-C3CC-4507-A012-04732EAA088A}.Release|Win32.ActiveCfg = Release|Any CPU
 		{AAEAFEF6-C3CC-4507-A012-04732EAA088A}.Release|x86.ActiveCfg = Release|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Debug|Win32.ActiveCfg = Debug|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Release|Win32.ActiveCfg = Release|Any CPU
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -393,6 +407,7 @@ Global
 		{901A8E5C-C4C6-4C3C-8E18-068D75119F5D} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
 		{CBA52DC8-1C80-4A79-9AC5-73514EBBD749} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
 		{AAEAFEF6-C3CC-4507-A012-04732EAA088A} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
+		{31A4AF28-0988-4862-9D5A-69D34CDB50E6} = {ADBF5F67-B480-4A93-9D50-C81856FC61A9}
 		{5D6ECBCD-BE14-4DCB-BAEC-57089748B164} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}
 		{5AA48F9A-455D-4CD8-A605-A3AC38283E60} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}
 		{B07D70E7-F902-4F67-A486-B7AF27D6B813} = {C4C64188-4FAE-4CC3-A9E6-D9D4AF7429B6}

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

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

+ 62 - 0
CSharp/Platform/Zmq/Zmq.csproj

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.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>{31A4AF28-0988-4862-9D5A-69D34CDB50E6}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Zmq</RootNamespace>
+    <AssemblyName>Zmq</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\Bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\Bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="NetMQ">
+      <HintPath>..\..\packages\NetMQ.3.3.0.8\lib\net40\NetMQ.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ZmqSocket.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packages.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.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>

+ 49 - 0
CSharp/Platform/Zmq/ZmqSocket.cs

@@ -0,0 +1,49 @@
+using System;
+using System.Threading.Tasks;
+using NetMQ;
+
+namespace Zmq
+{
+	public class ZmqSocket
+	{
+		private readonly NetMQSocket socket;
+
+		public ZmqSocket(NetMQSocket socket)
+		{
+			this.socket = socket;
+		}
+
+		private EventHandler<NetMQSocketEventArgs> SendHandler { get; set; }
+
+		private EventHandler<NetMQSocketEventArgs> RecvHandler { get; set; }
+
+	    public Task<byte[]> Recv()
+	    {
+			var tcs = new TaskCompletionSource<byte[]>();
+
+			this.RecvHandler = (sender, args) =>
+		    {
+				bool hasMore = false;
+				args.Socket.ReceiveReady -= this.RecvHandler;
+				tcs.TrySetResult(args.Socket.Receive(true, out hasMore));
+		    };
+
+			this.socket.ReceiveReady += this.RecvHandler;
+		    return tcs.Task;
+	    }
+
+		public Task<bool> Send(byte[] bytes)
+		{
+			var tcs = new TaskCompletionSource<bool>();
+
+			this.SendHandler = (sender, args) =>
+			{
+				args.Socket.SendReady -= this.SendHandler;
+				tcs.TrySetResult(true);
+			};
+			this.socket.SendReady += this.SendHandler;
+			this.socket.Send(bytes, bytes.Length, true);
+			return tcs.Task;
+		}
+    }
+}

+ 4 - 0
CSharp/Platform/Zmq/packages.config

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="NetMQ" version="3.3.0.8" targetFramework="net45" />
+</packages>

+ 1 - 0
CSharp/Platform/ZmqTest/ZmqReqRepTest.cs

@@ -33,6 +33,7 @@ namespace ZmqTest
 						Logger.Debug(string.Format("req: {0}", msg));
 						poller.Stop();
 					};
+					req.Send("hello world!");
 					poller.AddSocket(req);
 					poller.Start();
 				}