lib/exws.ex

defmodule ExWs do
	alias ExWs.Writer

	defdelegate txt(data), to: Writer
	defdelegate bin(data), to: Writer
	defdelegate to_binary(frame), to: Writer

	def invalid_handshake(err) do
		ExWs.Handshake.Errors.build(400, err)
	end

	def write(socket, {:framed, data}) do
		:gen_tcp.send(socket, data)
	end

	def write(socket, data) do
		write(socket, Writer.txt(data))
	end

	def ping(socket) do
		:gen_tcp.send(socket, Writer.ping())
	end

	def pong(socket, data) do
		:gen_tcp.send(socket, Writer.pong(data))
	end

	def close(socket, {:framed, data}) do
		:inet.setopts(socket, send_timeout: 1_000)
		:gen_tcp.send(socket, data)
		:gen_tcp.close(socket)
		:closed
	end

	def close(socket, message, code) do
		close(socket, Writer.close(message, code))
	end

	def close(socket) do
		close(socket, Writer.close(nil))
	end
end