Module: MarshalSocket::Socket

Included in:
TCPSocket
Defined in:
lib/marshal_socket.rb

Instance Method Summary collapse

Instance Method Details

#byeObject



20
21
22
23
24
# File 'lib/marshal_socket.rb', line 20

def bye
  write_lock.synchronize do
    Marshal.dump([:bye], self)
  end
end

#dump(obj) ⇒ Object



8
9
10
11
12
# File 'lib/marshal_socket.rb', line 8

def dump(obj)
  write_lock.synchronize do
    Marshal.dump([:obj, obj], self)
  end
end

#loadObject



14
15
16
17
18
# File 'lib/marshal_socket.rb', line 14

def load
  read_lock.synchronize do
    Marshal.load(self)
  end
end

#read_lockObject



30
31
32
# File 'lib/marshal_socket.rb', line 30

def read_lock
  @read_lock = Mutex.new
end

#receive_objects(&block) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/marshal_socket.rb', line 34

def receive_objects(&block)
  run = true

  while run do
    begin
      msg_type, obj = load
    rescue EOFError
      run = false
      next
    end

    case msg_type
    when :bye
      run = false
      close
    when :obj
      block.call(self, obj)
    else
      $stderr.puts "unknown message type #{msg_type.inspect}"
    end

  end

end

#write_lockObject



26
27
28
# File 'lib/marshal_socket.rb', line 26

def write_lock
  @write_lock = Mutex.new
end