Class: Richpresence::Ipc

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

Instance Method Summary collapse

Constructor Details

#initializeIpc

Returns a new instance of Ipc.



11
12
13
# File 'lib/ipc.rb', line 11

def initialize
  @socket = UNIXSocket.new("#{ipc_path}discord-ipc-0")
end

Instance Method Details

#decode(data) ⇒ Object



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

def decode(data)
  code, = data[0..3].unpack 'i<'
  [code, data[8..-1]]
end

#encode(opcode, payload) ⇒ Object



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

def encode(opcode, payload)
  payload[:nonce] = format '%.20f', Time.now
  payload = payload.to_json
  [opcode, payload.length].pack('ii<') + payload
end

#ipc_pathObject



31
32
33
34
35
36
37
38
# File 'lib/ipc.rb', line 31

def ipc_path
  %w[XDG_RUNTIME_DIR TMPDIR TMP TEMP].each do |directory|
    directory = ENV[directory]
    return directory if directory
  end

  '/tmp'
end

#send(opcode, payload) ⇒ Object



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

def send(opcode, payload)
  @socket.write(encode(opcode, payload))
  decode(@socket.recvfrom(1024).first)
end