Class: McProtocolE::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/mc_protocol_e/client.rb

Overview

This client shows a MC protocol client.

Defined Under Namespace

Classes: NotStartedError

Constant Summary collapse

DEFAULT_OPEN_TIMEOUT =
3
DEFAULT_READ_TIMEOUT =
3

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(address:, port:, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT) ⇒ Client

Constructor.

Parameters:

  • address (String)

    server IP address

  • port (Integer)

    server port number

  • open_timeout (Numeric) (defaults to: DEFAULT_OPEN_TIMEOUT)

    second of open timeout

  • read_timeout (Numeric) (defaults to: DEFAULT_READ_TIMEOUT)

    second of read timeout



19
20
21
22
23
24
25
# File 'lib/mc_protocol_e/client.rb', line 19

def initialize(address:, port:, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT)
  @address = address
  @port = port
  @open_timeout = open_timeout
  @read_timeout = read_timeout
  @socket = nil
end

Class Method Details

.start(address:, port:, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT) {|client| ... } ⇒ Object

Starts MC protocol communication.

Parameters:

  • address (String)

    IP address

  • port (Integer)

    port number

  • open_timeout (Numeric) (defaults to: DEFAULT_OPEN_TIMEOUT)

    second of open timeout

  • read_timeout (Numeric) (defaults to: DEFAULT_READ_TIMEOUT)

    second of read timeout

Yields:

  • (client)

    MC protocol client



33
34
35
36
37
38
39
40
41
# File 'lib/mc_protocol_e/client.rb', line 33

def self.start(address:, port:, open_timeout: DEFAULT_OPEN_TIMEOUT, read_timeout: DEFAULT_READ_TIMEOUT, &block)
  client = new(address: address, port: port, open_timeout: open_timeout, read_timeout: read_timeout)

  if block_given?
    client.start(&block)
  else
    client
  end
end

Instance Method Details

#closeObject

Closes MC protocol communication.



44
45
46
# File 'lib/mc_protocol_e/client.rb', line 44

def close
  socket.close if started?
end

#request(req) ⇒ Object

Sends request.

Parameters:

  • req (Request)

    request

Returns:

  • (Object)

    response

Raises:



52
53
54
55
56
# File 'lib/mc_protocol_e/client.rb', line 52

def request(req)
  raise NotStartedError, "not started" unless started?

  req.exec(socket, read_timeout)
end

#startObject

Starts MC protocol communication.



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/mc_protocol_e/client.rb', line 59

def start
  @socket = Socket.tcp(address, port, connect_timeout: open_timeout) unless started?

  if block_given?
    begin
      yield self
    ensure
      close
    end
  else
    self
  end
end

#started?Boolean

Returns true if communication has started.

Returns:

  • (Boolean)


74
75
76
# File 'lib/mc_protocol_e/client.rb', line 74

def started?
  socket && !socket.closed?
end