Class: MessagePack::RPC::TCPClientTransport

Inherits:
Object
  • Object
show all
Defined in:
lib/msgpack/rpc/transport/tcp.rb

Defined Under Namespace

Classes: ClientSocket

Instance Method Summary collapse

Constructor Details

#initialize(session, address, reconnect_limit) ⇒ 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

#closeObject

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