Sha256: 5607b0be7d1ac38b54450a632612d1aa682eb10db09eb54b74c480b5f1cd289d

Contents?: true

Size: 979 Bytes

Versions: 1

Compression:

Stored size: 979 Bytes

Contents

# frozen_string_literal: true

module Whatup
  module Server
    class Client
      attr_reader :id, :name
      attr_accessor *%i[socket room]

      def initialize id:, name:, socket:
        @id = id
        @name = name
        @socket = socket
        @room = nil
      end

      def puts msg
        socket.puts msg
      end

      def gets
        socket.gets
      end

      def input!
        loop while (msg = gets).blank?
        msg.chomp
      end

      def room?
        !room.nil?
      end
      alias chatting? room?

      def status
        "#{name}" \
        "#{chatting? ? " (#{@room.name})" : ''}"
      end

      def broadcast msg
        @room.clients.reject { |c| c == self }
             .each { |c| c.puts "#{name}> #{msg}" }
      end

      def leave_room!
        broadcast 'LEFT'
        room.drop_client! self
        @room = nil
      end

      def exit!
        puts "END\n"
        Thread.kill Thread.current
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
whatup-0.2.4 lib/whatup/server/client.rb