chat/lib/chat_client.ex
2023-04-17 22:49:46 +03:00

32 lines
763 B
Elixir

defmodule ChatClient do
use GenServer
require Logger
def start_link(socket) do
GenServer.start_link(__MODULE__, socket)
end
def init(socket) do
:inet.setopts(socket, active: :once)
{:ok, %{socket: socket}}
end
def handle_info({:tcp, socket, data}, state) do
Logger.info("Received message: #{inspect(data)}")
ChatServer.broadcast(data)
:inet.setopts(socket, active: :once)
{:noreply, state}
end
def handle_info({:tcp_closed, _socket}, state) do
Logger.info("Client disconnected: #{inspect(state.socket)}")
ChatServer.remove_client(self())
{:stop, :normal, state}
end
def handle_info({:send_data, data}, %{socket: socket} = state) do
:gen_tcp.send(socket, data)
{:noreply, state}
end
end