class Richpresence::Ipc

Public Class Methods

new() click to toggle source
# File lib/ipc.rb, line 11
def initialize
  @socket = UNIXSocket.new("#{ipc_path}discord-ipc-0")
end

Public Instance Methods

decode(data) click to toggle source
# File lib/ipc.rb, line 26
def decode(data)
  code, = data[0..3].unpack 'i<'
  [code, data[8..-1]]
end
encode(opcode, payload) click to toggle source
# 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_path() click to toggle source
# 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) click to toggle source
# File lib/ipc.rb, line 15
def send(opcode, payload)
  @socket.write(encode(opcode, payload))
  decode(@socket.recvfrom(1024).first)
end