summaryrefslogtreecommitdiff
path: root/bindings/java/org/zmq/Socket.java
blob: 851b7b84d2c3e6e794626af6b0273dfd5713eff2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
    Copyright (c) 2007-2010 iMatix Corporation

    This file is part of 0MQ.

    0MQ is free software; you can redistribute it and/or modify it under
    the terms of the Lesser GNU 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
    Lesser GNU General Public License for more details.

    You should have received a copy of the Lesser GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.zmq;

public class Socket {
    static {
        System.loadLibrary("jzmq");
    }

    public static final int NOBLOCK = 1;
    public static final int NOFLUSH = 2;

    public static final int P2P = 0;
    public static final int PUB = 1;
    public static final int SUB = 2;
    public static final int REQ = 3;
    public static final int REP = 4;
    public static final int XREQ = 5;
    public static final int XREP = 6;
    public static final int UPSTREAM = 7;
    public static final int DOWNSTREAM = 8;

    public static final int HWM = 1;
    public static final int LWM = 2;
    public static final int SWAP = 3;
    public static final int AFFINITY = 4;
    public static final int IDENTITY = 5;
    public static final int SUBSCRIBE = 6;
    public static final int UNSUBSCRIBE = 7;
    public static final int RATE = 8;
    public static final int RECOVERY_IVL = 9;
    public static final int MCAST_LOOP = 10;
    public static final int SNDBUF = 11;
    public static final int RCVBUF = 12;

    /**
     * Class constructor.
     *
     * @param context a 0MQ context previously created.
     * @param type the socket type.
     */
    public Socket (Context context, int type) {
        construct (context, type);
    }

    /**
     * Set the socket option value, given as a long.
     *
     * @param option ID of the option to set.
     * @param optval value (as a long) to set the option to.
     */
    public native void setsockopt (int option, long optval);

    /**
     * Set the socket option value, given as a String.
     *
     * @param option ID of the option to set.
     * @param optval value (as a String) to set the option to.
     */
    public native void setsockopt (int option, String optval);

    /**
     * Bind to network interface. Start listening for new connections.
     *
     * @param addr the endpoint to bind to.
     */
    public native void bind (String addr);

    /**
     * Connect to remote application.
     *
     * @param addr the endpoint to connect to.
     */
    public native void connect (String addr);

    /**
     * Send a message.
     *
     * @param msg the message to send, as an array of bytes.
     * @param flags the flags to apply to the send operation.
     * @return true if send was successful, false otherwise.
     */
    public native boolean send (byte [] msg, long flags);

    /**
     * Flush the messages down the stream.
     */
    public native void flush ();

    /**
     * Receive a message.
     *
     * @param flags the flags to apply to the receive operation.
     * @return the message received, as an array of bytes; null on error.
     */
    public native byte [] recv (long flags);

    /** Initialize the JNI interface */
    protected native void construct (Context context, int type);

    /** Free all resources used by JNI interface. */
    protected native void finalize ();

    /**
     * Get the underlying socket handle.
     * This is private because it is only accessed from JNI, where
     * Java access controls are ignored.
     *
     * @return the internal 0MQ socket handle.
     */
    private long getSocketHandle () {
        return socketHandle;
    }

    /** Opaque data used by JNI driver. */
    private long socketHandle;
}