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