Module: ServerEngine::SocketManagerUnix::ServerModule

Included in:
ServerEngine::SocketManager::Server
Defined in:
lib/serverengine/socket_manager_unix.rb

Instance Method Summary collapse

Instance Method Details

#share_sockets_with_another_serverObject



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
# File 'lib/serverengine/socket_manager_unix.rb', line 50

def share_sockets_with_another_server
  another_server = UNIXSocket.new(@path)
  begin
    idx = 0
    while true
      SocketManager.send_peer(another_server, [Process.pid, :share_udp, idx])
      key = SocketManager.recv_peer(another_server)
      break if key.nil?
      @udp_sockets[key] = another_server.recv_io UDPSocket
      idx += 1
    end

    idx = 0
    while true
      SocketManager.send_peer(another_server, [Process.pid, :share_tcp, idx])
      key = SocketManager.recv_peer(another_server)
      break if key.nil?
      @tcp_sockets[key] = another_server.recv_io TCPServer
      idx += 1
    end

    SocketManager.send_peer(another_server, [Process.pid, :share_unix])
    res = SocketManager.recv_peer(another_server)
    raise res if res.is_a?(Exception)
    @server = another_server.recv_io UNIXServer

    start_server(@path)
  ensure
    another_server.close
  end
end