Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

new file: hwclient.ahk

  • Loading branch information...
commit af890be4c0f8cdf93b34ff7b87ecbc6c2fdd894f 0 parents
@tinku99 authored
33 ahk/ReadMe.txt
@@ -0,0 +1,33 @@
+========================================================================
+ CONSOLE APPLICATION : ahk Project Overview
+========================================================================
+
+AppWizard has created this ahk application for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your ahk application.
+
+
+ahk.vcproj
+ This is the main project file for VC++ projects generated using an Application Wizard.
+ It contains information about the version of Visual C++ that generated the file, and
+ information about the platforms, configurations, and project features selected with the
+ Application Wizard.
+
+ahk.cpp
+ This is the main application source file.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named ahk.pch and a precompiled types file named StdAfx.obj.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" comments to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
39 ahk/ahk.cpp
@@ -0,0 +1,39 @@
+// ahk.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "../include/zmq.h"
+#include "../include/zmq_utils.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define EXPORT extern "C" __declspec(dllexport)
+EXPORT int client ()
+{
+ void *context = zmq_init (1);
+
+ // Socket to talk to server
+ printf ("Connecting to hello world server n");
+ void *requester = zmq_socket (context, ZMQ_REQ);
+ zmq_connect (requester, "tcp://localhost:5555");
+
+ int request_nbr;
+ for (request_nbr = 0; request_nbr != 10; request_nbr++) {
+ zmq_msg_t request;
+ zmq_msg_init_size (&request, 5);
+ memcpy (zmq_msg_data (&request), "Hello", 5);
+ printf ("Sending Hello %d n", request_nbr);
+ zmq_send (requester, &request, 0);
+ zmq_msg_close (&request);
+
+ zmq_msg_t reply;
+ zmq_msg_init (&reply);
+ zmq_recv (requester, &reply, 0);
+ printf ("Received World %d\n", request_nbr);
+ zmq_msg_close (&reply);
+ }
+ zmq_close (requester);
+ zmq_term (context);
+ return 0;
+}
+
232 ahk/ahk.vcproj
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="ahk"
+ ProjectGUID="{E35FF5F5-F89F-470F-943A-0F8EE5C14279}"
+ RootNamespace="ahk"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="2"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libzmq.lib"
+ OutputFile="$(OutDir)\$(ProjectName).dll"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="D:\naveen\source\ahkzmq\lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="2"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\ahk.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\wrap.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\stdafx.h"
+ >
+ </File>
+ <File
+ RelativePath=".\targetver.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ <File
+ RelativePath=".\ReadMe.txt"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
8 ahk/stdafx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// ahk.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
15 ahk/stdafx.h
@@ -0,0 +1,15 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#include <stdio.h>
+#include <tchar.h>
+
+
+
+// TODO: reference additional headers your program requires here
13 ahk/targetver.h
@@ -0,0 +1,13 @@
+#pragma once
+
+// The following macros define the minimum required platform. The minimum required platform
+// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run
+// your application. The macros work by enabling all features available on platform versions up to and
+// including the version specified.
+
+// Modify the following defines if you have to target a platform prior to the ones specified below.
+// Refer to MSDN for the latest info on corresponding values for different platforms.
+#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista.
+#define _WIN32_WINNT 0x05010200 // Change this to the appropriate value to target other versions of Windows.
+#endif
+
53 ahk/wrap.cpp
@@ -0,0 +1,53 @@
+#include "stdafx.h"
+#include "../include/zmq.hpp"
+#include <string>
+#include <iostream>
+#include <Windows.h>
+
+#define EXPORT extern "C" __declspec(dllexport)
+EXPORT void * acontext(){
+ void *context = zmq_init (1);
+return context;
+}
+
+EXPORT void * areqsocket (void * context, const char * connectionString)
+{
+ void *requester = zmq_socket (context, ZMQ_REQ);
+ int hr = zmq_connect (requester, connectionString); // "tcp://localhost:5555"
+ return requester ;
+}
+
+EXPORT int asend(void * requester, char * message, unsigned int size){
+ zmq_msg_t request;
+ zmq_msg_init_size (&request, size);
+ memcpy (zmq_msg_data (&request), message, size);
+ int hr = zmq_send (requester, &request, 0);
+ zmq_msg_close (&request);
+ return hr ;
+}
+EXPORT char * arecv(void * requester){
+ static char * buffer = NULL ;
+ static size_t bufsize = 0 ;
+ zmq_msg_t reply;
+ zmq_msg_init (&reply);
+ zmq_recv (requester, &reply, 0);
+ size_t size = zmq_msg_size(&reply) ;
+ if (size > bufsize){
+ buffer = (char *) realloc(buffer, size + 1);
+ if (buffer == NULL)
+ return "out of memory" ;
+ bufsize = size ;
+ buffer[size] = 0 ;
+ } else {
+ memset(buffer, 0, bufsize + 1) ;
+ }
+ memcpy (buffer, zmq_msg_data (&reply), size);
+ zmq_msg_close (&reply);
+ return buffer ;
+ }
+
+EXPORT int aclose(void * context, void * requester){
+ zmq_close (requester);
+ zmq_term (context);
+ return 0;
+}
20 ahkzmq.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ahk", "ahk\ahk.vcproj", "{E35FF5F5-F89F-470F-943A-0F8EE5C14279}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E35FF5F5-F89F-470F-943A-0F8EE5C14279}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E35FF5F5-F89F-470F-943A-0F8EE5C14279}.Debug|Win32.Build.0 = Debug|Win32
+ {E35FF5F5-F89F-470F-943A-0F8EE5C14279}.Release|Win32.ActiveCfg = Release|Win32
+ {E35FF5F5-F89F-470F-943A-0F8EE5C14279}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
17 client.py
@@ -0,0 +1,17 @@
+import zmq
+
+context = zmq.Context()
+
+# Socket to talk to server
+print "Connecting to hello world server"
+socket = context.socket(zmq.REQ)
+socket.connect ("tcp://localhost:5555")
+
+# Do 10 requests, waiting each time for a response
+for request in range (1,10):
+ print "Sending request ", request,"."
+ socket.send ("Hello")
+
+ # Get the reply.
+ message = socket.recv()
+ print "Received reply ", request, "[", message, "]"
19 hwclient.ahk
@@ -0,0 +1,19 @@
+EnvGet, path, PATH
+EnvSet, PATH, % ";" A_ScriptDir . "\Debug"
+DllCall("LoadLibrary", "str", "ahk.dll")
+context := dllcall("ahk\acontext", "cdecl ptr")
+socket := dllcall("ahk\areqsocket", "ptr", context
+, "astr", "tcp://localhost:5555"
+, "cdecl ptr")
+loop, 5{
+msg := "hello " A_Index
+hr := dllcall("ahk\asend", "ptr", socket, "astr", msg, "uint", strlen(msg)
+, "cdecl int")
+msg := dllcall("ahk\arecv", "ptr", socket, "cdecl astr")
+sleep, 500
+tooltip % msg "`n" Errorlevel
+}
+return
+
+!r::reload
+!q::exitapp
7 hwclientSimple.ahk
@@ -0,0 +1,7 @@
+EnvGet, path, PATH
+EnvSet, PATH, % ";" A_ScriptDir . "\Debug"
+DllCall("LoadLibrary", "str", "ahk.dll")
+x := dllcall("ahk\client", "Cdecl int")
+msgbox % x "`n" Errorlevel
+return
+
19 hwserver.py
@@ -0,0 +1,19 @@
+import zmq
+import time
+
+context = zmq.Context()
+socket = context.socket(zmq.REP)
+socket.bind("tcp://*:5555")
+
+while True:
+ # Wait for next request from client
+ message = socket.recv()
+ print "Received request: ", message
+
+ # Do some 'work'
+# time.sleep (1) # Do some 'work'
+
+ # Send reply back to client
+ socket.send("World")
+
+
269 include/zmq.h
@@ -0,0 +1,269 @@
+/*
+ Copyright (c) 2007-2011 iMatix Corporation
+ Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
+
+ This file is part of 0MQ.
+
+ 0MQ is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ 0MQ 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 Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __ZMQ_H_INCLUDED__
+#define __ZMQ_H_INCLUDED__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <errno.h>
+#include <stddef.h>
+#if defined _WIN32
+#include <winsock2.h>
+#endif
+
+/* Handle DSO symbol visibility */
+#if defined _WIN32
+# if defined DLL_EXPORT
+# define ZMQ_EXPORT __declspec(dllexport)
+# else
+# define ZMQ_EXPORT __declspec(dllimport)
+# endif
+#else
+# if defined __SUNPRO_C || defined __SUNPRO_CC
+# define ZMQ_EXPORT __global
+# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER
+# define ZMQ_EXPORT __attribute__ ((visibility("default")))
+# else
+# define ZMQ_EXPORT
+# endif
+#endif
+
+/******************************************************************************/
+/* 0MQ versioning support. */
+/******************************************************************************/
+
+/* Version macros for compile-time API version detection */
+#define ZMQ_VERSION_MAJOR 2
+#define ZMQ_VERSION_MINOR 1
+#define ZMQ_VERSION_PATCH 11
+
+#define ZMQ_MAKE_VERSION(major, minor, patch) \
+ ((major) * 10000 + (minor) * 100 + (patch))
+#define ZMQ_VERSION \
+ ZMQ_MAKE_VERSION(ZMQ_VERSION_MAJOR, ZMQ_VERSION_MINOR, ZMQ_VERSION_PATCH)
+
+/* Run-time API version detection */
+ZMQ_EXPORT void zmq_version (int *major, int *minor, int *patch);
+
+/******************************************************************************/
+/* 0MQ errors. */
+/******************************************************************************/
+
+/* A number random enough not to collide with different errno ranges on */
+/* different OSes. The assumption is that error_t is at least 32-bit type. */
+#define ZMQ_HAUSNUMERO 156384712
+
+/* On Windows platform some of the standard POSIX errnos are not defined. */
+#ifndef ENOTSUP
+#define ENOTSUP (ZMQ_HAUSNUMERO + 1)
+#endif
+#ifndef EPROTONOSUPPORT
+#define EPROTONOSUPPORT (ZMQ_HAUSNUMERO + 2)
+#endif
+#ifndef ENOBUFS
+#define ENOBUFS (ZMQ_HAUSNUMERO + 3)
+#endif
+#ifndef ENETDOWN
+#define ENETDOWN (ZMQ_HAUSNUMERO + 4)
+#endif
+#ifndef EADDRINUSE
+#define EADDRINUSE (ZMQ_HAUSNUMERO + 5)
+#endif
+#ifndef EADDRNOTAVAIL
+#define EADDRNOTAVAIL (ZMQ_HAUSNUMERO + 6)
+#endif
+#ifndef ECONNREFUSED
+#define ECONNREFUSED (ZMQ_HAUSNUMERO + 7)
+#endif
+#ifndef EINPROGRESS
+#define EINPROGRESS (ZMQ_HAUSNUMERO + 8)
+#endif
+#ifndef ENOTSOCK
+#define ENOTSOCK (ZMQ_HAUSNUMERO + 9)
+#endif
+
+/* Native 0MQ error codes. */
+#define EFSM (ZMQ_HAUSNUMERO + 51)
+#define ENOCOMPATPROTO (ZMQ_HAUSNUMERO + 52)
+#define ETERM (ZMQ_HAUSNUMERO + 53)
+#define EMTHREAD (ZMQ_HAUSNUMERO + 54)
+
+/* This function retrieves the errno as it is known to 0MQ library. The goal */
+/* of this function is to make the code 100% portable, including where 0MQ */
+/* compiled with certain CRT library (on Windows) is linked to an */
+/* application that uses different CRT library. */
+ZMQ_EXPORT int zmq_errno (void);
+
+/* Resolves system errors and 0MQ errors to human-readable string. */
+ZMQ_EXPORT const char *zmq_strerror (int errnum);
+
+/******************************************************************************/
+/* 0MQ message definition. */
+/******************************************************************************/
+
+/* Maximal size of "Very Small Message". VSMs are passed by value */
+/* to avoid excessive memory allocation/deallocation. */
+/* If VMSs larger than 255 bytes are required, type of 'vsm_size' */
+/* field in zmq_msg_t structure should be modified accordingly. */
+#define ZMQ_MAX_VSM_SIZE 30
+
+/* Message types. These integers may be stored in 'content' member of the */
+/* message instead of regular pointer to the data. */
+#define ZMQ_DELIMITER 31
+#define ZMQ_VSM 32
+
+/* Message flags. ZMQ_MSG_SHARED is strictly speaking not a message flag */
+/* (it has no equivalent in the wire format), however, making it a flag */
+/* allows us to pack the stucture tigher and thus improve performance. */
+#define ZMQ_MSG_MORE 1
+#define ZMQ_MSG_SHARED 128
+#define ZMQ_MSG_MASK 129 /* Merges all the flags */
+
+/* A message. Note that 'content' is not a pointer to the raw data. */
+/* Rather it is pointer to zmq::msg_content_t structure */
+/* (see src/msg_content.hpp for its definition). */
+typedef struct
+{
+ void *content;
+ unsigned char flags;
+ unsigned char vsm_size;
+ unsigned char vsm_data [ZMQ_MAX_VSM_SIZE];
+} zmq_msg_t;
+
+typedef void (zmq_free_fn) (void *data, void *hint);
+
+ZMQ_EXPORT int zmq_msg_init (zmq_msg_t *msg);
+ZMQ_EXPORT int zmq_msg_init_size (zmq_msg_t *msg, size_t size);
+ZMQ_EXPORT int zmq_msg_init_data (zmq_msg_t *msg, void *data,
+ size_t size, zmq_free_fn *ffn, void *hint);
+ZMQ_EXPORT int zmq_msg_close (zmq_msg_t *msg);
+ZMQ_EXPORT int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src);
+ZMQ_EXPORT int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src);
+ZMQ_EXPORT void *zmq_msg_data (zmq_msg_t *msg);
+ZMQ_EXPORT size_t zmq_msg_size (zmq_msg_t *msg);
+
+/******************************************************************************/
+/* 0MQ infrastructure (a.k.a. context) initialisation & termination. */
+/******************************************************************************/
+
+ZMQ_EXPORT void *zmq_init (int io_threads);
+ZMQ_EXPORT int zmq_term (void *context);
+
+/******************************************************************************/
+/* 0MQ socket definition. */
+/******************************************************************************/
+
+/* Socket types. */
+#define ZMQ_PAIR 0
+#define ZMQ_PUB 1
+#define ZMQ_SUB 2
+#define ZMQ_REQ 3
+#define ZMQ_REP 4
+#define ZMQ_DEALER 5
+#define ZMQ_ROUTER 6
+#define ZMQ_PULL 7
+#define ZMQ_PUSH 8
+#define ZMQ_XPUB 9
+#define ZMQ_XSUB 10
+#define ZMQ_XREQ ZMQ_DEALER /* Old alias, remove in 3.x */
+#define ZMQ_XREP ZMQ_ROUTER /* Old alias, remove in 3.x */
+#define ZMQ_UPSTREAM ZMQ_PULL /* Old alias, remove in 3.x */
+#define ZMQ_DOWNSTREAM ZMQ_PUSH /* Old alias, remove in 3.x */
+
+/* Socket options. */
+#define ZMQ_HWM 1
+#define ZMQ_SWAP 3
+#define ZMQ_AFFINITY 4
+#define ZMQ_IDENTITY 5
+#define ZMQ_SUBSCRIBE 6
+#define ZMQ_UNSUBSCRIBE 7
+#define ZMQ_RATE 8
+#define ZMQ_RECOVERY_IVL 9
+#define ZMQ_MCAST_LOOP 10
+#define ZMQ_SNDBUF 11
+#define ZMQ_RCVBUF 12
+#define ZMQ_RCVMORE 13
+#define ZMQ_FD 14
+#define ZMQ_EVENTS 15
+#define ZMQ_TYPE 16
+#define ZMQ_LINGER 17
+#define ZMQ_RECONNECT_IVL 18
+#define ZMQ_BACKLOG 19
+#define ZMQ_RECOVERY_IVL_MSEC 20 /* opt. recovery time, reconcile in 3.x */
+#define ZMQ_RECONNECT_IVL_MAX 21
+
+/* Send/recv options. */
+#define ZMQ_NOBLOCK 1
+#define ZMQ_SNDMORE 2
+
+ZMQ_EXPORT void *zmq_socket (void *context, int type);
+ZMQ_EXPORT int zmq_close (void *s);
+ZMQ_EXPORT int zmq_setsockopt (void *s, int option, const void *optval,
+ size_t optvallen);
+ZMQ_EXPORT int zmq_getsockopt (void *s, int option, void *optval,
+ size_t *optvallen);
+ZMQ_EXPORT int zmq_bind (void *s, const char *addr);
+ZMQ_EXPORT int zmq_connect (void *s, const char *addr);
+ZMQ_EXPORT int zmq_send (void *s, zmq_msg_t *msg, int flags);
+ZMQ_EXPORT int zmq_recv (void *s, zmq_msg_t *msg, int flags);
+
+/******************************************************************************/
+/* I/O multiplexing. */
+/******************************************************************************/
+
+#define ZMQ_POLLIN 1
+#define ZMQ_POLLOUT 2
+#define ZMQ_POLLERR 4
+
+typedef struct
+{
+ void *socket;
+#if defined _WIN32
+ SOCKET fd;
+#else
+ int fd;
+#endif
+ short events;
+ short revents;
+} zmq_pollitem_t;
+
+ZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);
+
+/******************************************************************************/
+/* Built-in devices */
+/******************************************************************************/
+
+#define ZMQ_STREAMER 1
+#define ZMQ_FORWARDER 2
+#define ZMQ_QUEUE 3
+
+ZMQ_EXPORT int zmq_device (int device, void * insocket, void* outsocket);
+
+#undef ZMQ_EXPORT
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
340 include/zmq.hpp
@@ -0,0 +1,340 @@
+/*
+ Copyright (c) 2007-2011 iMatix Corporation
+ Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
+
+ This file is part of 0MQ.
+
+ 0MQ is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ 0MQ 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 Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __ZMQ_HPP_INCLUDED__
+#define __ZMQ_HPP_INCLUDED__
+
+#include "zmq.h"
+
+#include <cassert>
+#include <cstring>
+#include <exception>
+
+// Detect whether the compiler supports C++11 rvalue references.
+#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)) && defined(__GXX_EXPERIMENTAL_CXX0X__))
+# define ZMQ_HAS_RVALUE_REFS
+#endif
+#if (defined(__clang__))
+# if __has_feature(cxx_rvalue_references)
+# define ZMQ_HAS_RVALUE_REFS
+# endif
+#endif
+#if (defined(_MSC_VER) && (_MSC_VER >= 1600))
+# define ZMQ_HAS_RVALUE_REFS
+#endif
+
+namespace zmq
+{
+
+ typedef zmq_free_fn free_fn;
+ typedef zmq_pollitem_t pollitem_t;
+
+ class error_t : public std::exception
+ {
+ public:
+
+ error_t () : errnum (zmq_errno ()) {}
+
+ virtual const char *what () const throw ()
+ {
+ return zmq_strerror (errnum);
+ }
+
+ int num () const
+ {
+ return errnum;
+ }
+
+ private:
+
+ int errnum;
+ };
+
+ inline int poll (zmq_pollitem_t *items_, int nitems_, long timeout_ = -1)
+ {
+ int rc = zmq_poll (items_, nitems_, timeout_);
+ if (rc < 0)
+ throw error_t ();
+ return rc;
+ }
+
+ inline void device (int device_, void * insocket_, void* outsocket_)
+ {
+ int rc = zmq_device (device_, insocket_, outsocket_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void version (int *major_, int *minor_, int *patch_)
+ {
+ zmq_version (major_, minor_, patch_);
+ }
+
+ class message_t : private zmq_msg_t
+ {
+ friend class socket_t;
+
+ public:
+
+ inline message_t ()
+ {
+ int rc = zmq_msg_init (this);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline message_t (size_t size_)
+ {
+ int rc = zmq_msg_init_size (this, size_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline message_t (void *data_, size_t size_, free_fn *ffn_,
+ void *hint_ = NULL)
+ {
+ int rc = zmq_msg_init_data (this, data_, size_, ffn_, hint_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline ~message_t ()
+ {
+ int rc = zmq_msg_close (this);
+ assert (rc == 0);
+ }
+
+ inline void rebuild ()
+ {
+ int rc = zmq_msg_close (this);
+ if (rc != 0)
+ throw error_t ();
+ rc = zmq_msg_init (this);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void rebuild (size_t size_)
+ {
+ int rc = zmq_msg_close (this);
+ if (rc != 0)
+ throw error_t ();
+ rc = zmq_msg_init_size (this, size_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void rebuild (void *data_, size_t size_, free_fn *ffn_,
+ void *hint_ = NULL)
+ {
+ int rc = zmq_msg_close (this);
+ if (rc != 0)
+ throw error_t ();
+ rc = zmq_msg_init_data (this, data_, size_, ffn_, hint_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void move (message_t *msg_)
+ {
+ int rc = zmq_msg_move (this, (zmq_msg_t*) msg_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void copy (message_t *msg_)
+ {
+ int rc = zmq_msg_copy (this, (zmq_msg_t*) msg_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void *data ()
+ {
+ return zmq_msg_data (this);
+ }
+
+ inline size_t size ()
+ {
+ return zmq_msg_size (this);
+ }
+
+ private:
+
+ // Disable implicit message copying, so that users won't use shared
+ // messages (less efficient) without being aware of the fact.
+ message_t (const message_t&);
+ void operator = (const message_t&);
+ };
+
+ class context_t
+ {
+ friend class socket_t;
+
+ public:
+
+ inline context_t (int io_threads_)
+ {
+ ptr = zmq_init (io_threads_);
+ if (ptr == NULL)
+ throw error_t ();
+ }
+
+#ifdef ZMQ_HAS_RVALUE_REFS
+ inline context_t(context_t&& rhs) : ptr(rhs.ptr)
+ {
+ rhs.ptr = NULL;
+ }
+ inline context_t& operator=(context_t&& rhs)
+ {
+ std::swap(ptr, rhs.ptr);
+ return *this;
+ }
+#endif
+
+ inline ~context_t ()
+ {
+ if (ptr == NULL)
+ return;
+ int rc = zmq_term (ptr);
+ assert (rc == 0);
+ }
+
+ // Be careful with this, it's probably only useful for
+ // using the C api together with an existing C++ api.
+ // Normally you should never need to use this.
+ inline operator void* ()
+ {
+ return ptr;
+ }
+
+ private:
+
+ void *ptr;
+
+ context_t (const context_t&);
+ void operator = (const context_t&);
+ };
+
+ class socket_t
+ {
+ public:
+
+ inline socket_t (context_t &context_, int type_)
+ {
+ ptr = zmq_socket (context_.ptr, type_);
+ if (ptr == NULL)
+ throw error_t ();
+ }
+
+#ifdef ZMQ_HAS_RVALUE_REFS
+ inline socket_t(socket_t&& rhs) : ptr(rhs.ptr)
+ {
+ rhs.ptr = NULL;
+ }
+ inline socket_t& operator=(socket_t&& rhs)
+ {
+ std::swap(ptr, rhs.ptr);
+ return *this;
+ }
+#endif
+
+ inline ~socket_t ()
+ {
+ close();
+ }
+
+ inline operator void* ()
+ {
+ return ptr;
+ }
+
+ inline void close()
+ {
+ if(ptr == NULL)
+ // already closed
+ return ;
+ int rc = zmq_close (ptr);
+ if (rc != 0)
+ throw error_t ();
+ ptr = 0 ;
+ }
+
+ inline void setsockopt (int option_, const void *optval_,
+ size_t optvallen_)
+ {
+ int rc = zmq_setsockopt (ptr, option_, optval_, optvallen_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void getsockopt (int option_, void *optval_,
+ size_t *optvallen_)
+ {
+ int rc = zmq_getsockopt (ptr, option_, optval_, optvallen_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void bind (const char *addr_)
+ {
+ int rc = zmq_bind (ptr, addr_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline void connect (const char *addr_)
+ {
+ int rc = zmq_connect (ptr, addr_);
+ if (rc != 0)
+ throw error_t ();
+ }
+
+ inline bool send (message_t &msg_, int flags_ = 0)
+ {
+ int rc = zmq_send (ptr, &msg_, flags_);
+ if (rc == 0)
+ return true;
+ if (rc == -1 && zmq_errno () == EAGAIN)
+ return false;
+ throw error_t ();
+ }
+
+ inline bool recv (message_t *msg_, int flags_ = 0)
+ {
+ int rc = zmq_recv (ptr, msg_, flags_);
+ if (rc == 0)
+ return true;
+ if (rc == -1 && zmq_errno () == EAGAIN)
+ return false;
+ throw error_t ();
+ }
+
+ private:
+
+ void *ptr;
+
+ socket_t (const socket_t&);
+ void operator = (const socket_t&);
+ };
+
+}
+
+#endif
64 include/zmq_utils.h
@@ -0,0 +1,64 @@
+/*
+ Copyright (c) 2007-2011 iMatix Corporation
+ Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
+
+ This file is part of 0MQ.
+
+ 0MQ is free software; you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ 0MQ 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 Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __ZMQ_UTILS_H_INCLUDED__
+#define __ZMQ_UTILS_H_INCLUDED__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Handle DSO symbol visibility */
+#if defined _WIN32
+# if defined DLL_EXPORT
+# define ZMQ_EXPORT __declspec(dllexport)
+# else
+# define ZMQ_EXPORT __declspec(dllimport)
+# endif
+#else
+# if defined __SUNPRO_C || defined __SUNPRO_CC
+# define ZMQ_EXPORT __global
+# elif (defined __GNUC__ && __GNUC__ >= 4) || defined __INTEL_COMPILER
+# define ZMQ_EXPORT __attribute__ ((visibility("default")))
+# else
+# define ZMQ_EXPORT
+# endif
+#endif
+
+/* Helper functions are used by perf tests so that they don't have to care */
+/* about minutiae of time-related functions on different OS platforms. */
+
+/* Starts the stopwatch. Returns the handle to the watch. */
+ZMQ_EXPORT void *zmq_stopwatch_start (void);
+
+/* Stops the stopwatch. Returns the number of microseconds elapsed since */
+/* the stopwatch was started. */
+ZMQ_EXPORT unsigned long zmq_stopwatch_stop (void *watch_);
+
+/* Sleeps for specified number of seconds. */
+ZMQ_EXPORT void zmq_sleep (int seconds_);
+
+#undef ZMQ_EXPORT
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Please sign in to comment.
Something went wrong with that request. Please try again.