1 /*
2     Copyright (c) 2007-2011 iMatix Corporation
3     Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file
4 
5 
6     This file is part of 0MQ.
7 
8     0MQ is free software; you can redistribute it and/or modify it under
9     the terms of the GNU Lesser General Public License as published by
10     the Free Software Foundation; either version 3 of the License, or
11     (at your option) any later version.
12 
13     0MQ is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16     GNU Lesser General Public License for more details.
17 
18     You should have received a copy of the GNU Lesser General Public License
19     along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #ifndef __ZMQ_XREQ_HPP_INCLUDED__
23 #define __ZMQ_XREQ_HPP_INCLUDED__
24 
25 #include "socket_base.hpp"
26 #include "fq.hpp"
27 #include "lb.hpp"
28 
29 namespace zmq
30 {
31 
32     class xreq_t : public socket_base_t
33     {
34     public:
35 
36         xreq_t (class ctx_t *parent_, uint32_t tid_);
37         ~xreq_t ();
38 
39     protected:
40 
41         //  Overloads of functions from socket_base_t.
42         void xattach_pipes (class reader_t *inpipe_, class writer_t *outpipe_,
43             const blob_t &peer_identity_);
44         int xsend (zmq_msg_t *msg_, int flags_);
45         int xrecv (zmq_msg_t *msg_, int flags_);
46         bool xhas_in ();
47         bool xhas_out ();
48 
49     private:
50 
51         //  Hook into the termination process.
52         void process_term (int linger_);
53 
54         //  Messages are fair-queued from inbound pipes. And load-balanced to
55         //  the outbound pipes.
56         fq_t fq;
57         lb_t lb;
58 
59         xreq_t (const xreq_t&);
60         const xreq_t &operator = (const xreq_t&);
61     };
62 
63 }
64 
65 #endif
66