R/gateway.r

Defines functions connect start_connection

Documented in connect

source("R/request_identify.r")
source("R/request_resume.r")
source("R/event_handler.r")

#' Connect and authenticate to the websocket via a client
#' @export
#'
#' @param client A Client class/object
#' @examples
#' \dontrun{
#' client <- Client("<PRECIOUS TOKEN>")
#' connect(client)
#'}
connect <- function(client) {
  start_connection(client)
}

start_connection <- function(client, reconnecting = FALSE, should_resume = FALSE) {
  client$private$set("reconnecting", reconnecting)
  client$ws = WebSocket$new(
   "wss://gateway.discord.gg/?v=6&encoding=json",
   autoConnect = FALSE
  )

  client$ws$onOpen(function(event) {
    if (isTRUE(should_resume))
      resume(client)
    else
      identify(client)
  })

  client$ws$onClose(function(event) {
    only_reconnect = event$code == 4000 | event$code == 4007 | event$code == 4009
    if (only_reconnect) {
      start_connection(client, TRUE, FALSE)
    } else {
      cat("Resume")
      start_connection(client, TRUE, TRUE)
    }
  })

  client$ws$onMessage(function(event) {
    data = fromJSON(event$data)
    handle(data$op, data, client)
  })

  client$ws$connect()

  while (TRUE) {
    later::run_now(1L)
  }
}
TheOnlyArtz/Pirate documentation built on Oct. 31, 2019, 12:12 a.m.