Class: MessagePack::RPC::TCPClientTransport
- Inherits:
-
Object
- Object
- MessagePack::RPC::TCPClientTransport
- Defined in:
- lib/msgpack/rpc/transport/tcp.rb
Defined Under Namespace
Classes: ClientSocket
Instance Method Summary collapse
-
#close ⇒ Object
ClientTransport interface.
-
#initialize(session, address, reconnect_limit) ⇒ TCPClientTransport
constructor
A new instance of TCPClientTransport.
-
#on_close(sock) ⇒ Object
from TCPClientTransport::ClientSocket::on_close.
-
#on_connect(sock) ⇒ Object
from TCPClientTransport::ClientSocket::on_connect.
-
#on_connect_failed(sock) ⇒ Object
from TCPClientTransport::ClientSocket::on_connect_failed.
-
#send_data(data) ⇒ Object
ClientTransport interface.
Constructor Details
#initialize(session, address, reconnect_limit) ⇒ TCPClientTransport
Returns a new instance of TCPClientTransport.
62 63 64 65 66 67 68 69 70 |
# File 'lib/msgpack/rpc/transport/tcp.rb', line 62 def initialize(session, address, reconnect_limit) @session = session @address = address @pending = "" @sockpool = [] @connecting = 0 @reconnect_limit = reconnect_limit end |
Instance Method Details
#close ⇒ Object
ClientTransport interface
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/msgpack/rpc/transport/tcp.rb', line 89 def close @sockpool.reject! {|sock| sock.detach if sock.attached? sock.close true } @sockpool = [] @connecting = 0 @pending = "" self end |
#on_close(sock) ⇒ Object
from TCPClientTransport::ClientSocket::on_close
122 123 124 |
# File 'lib/msgpack/rpc/transport/tcp.rb', line 122 def on_close(sock) @sockpool.delete(sock) end |
#on_connect(sock) ⇒ Object
from TCPClientTransport::ClientSocket::on_connect
102 103 104 105 106 107 |
# File 'lib/msgpack/rpc/transport/tcp.rb', line 102 def on_connect(sock) @sockpool.push(sock) sock.send_pending(@pending) @pending = "" @connecting = 0 end |
#on_connect_failed(sock) ⇒ Object
from TCPClientTransport::ClientSocket::on_connect_failed
110 111 112 113 114 115 116 117 118 119 |
# File 'lib/msgpack/rpc/transport/tcp.rb', line 110 def on_connect_failed(sock) if @connecting < @reconnect_limit try_connect @connecting += 1 else @connecting = 0 @pending = "" @session.on_connect_failed end end |
#send_data(data) ⇒ Object
ClientTransport interface
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/msgpack/rpc/transport/tcp.rb', line 73 def send_data(data) if @sockpool.empty? if @connecting == 0 try_connect @connecting = 1 end @pending << data else # FIXME pesudo connection load balance # sock = @sockpool.choice sock = @sockpool.first sock.send_data(data) end end |