Class: ActionMessages

Inherits:
Object
  • Object
show all
Defined in:
lib/acpc_dealer_data/action_messages.rb

Defined Under Namespace

Classes: FromMessage, LogFile, ToMessage

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(acpc_log_statements, player_names, game_def_directory, num_hands = nil) ⇒ ActionMessages

Returns a new instance of ActionMessages.



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/acpc_dealer_data/action_messages.rb', line 95

def initialize(acpc_log_statements, player_names, game_def_directory, num_hands=nil)
  @final_score = nil
  @match_def = nil
  @data = acpc_log_statements.inject([]) do |accumulating_data, log_line|
    if @match_def.nil?
      @match_def = MatchDefinition.parse(log_line, player_names, game_def_directory)
    else
      parsed_message = ActionMessages.parse_to_or_from_message(log_line)
      if parsed_message
        if (
          accumulating_data.empty? || 
          accumulating_data.last.first[:state].hand_number != parsed_message[:state].hand_number
        )
          break accumulating_data if accumulating_data.length == num_hands
          accumulating_data << []
        end

        accumulating_data.last << parsed_message
      else
        @final_score = ActionMessages.parse_score(log_line) unless @final_score
      end
    end

    accumulating_data
  end
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



9
10
11
# File 'lib/acpc_dealer_data/action_messages.rb', line 9

def data
  @data
end

#final_scoreObject (readonly)

Returns the value of attribute final_score.



9
10
11
# File 'lib/acpc_dealer_data/action_messages.rb', line 9

def final_score
  @final_score
end

#match_defObject (readonly)

Returns the value of attribute match_def.



9
10
11
# File 'lib/acpc_dealer_data/action_messages.rb', line 9

def match_def
  @match_def
end

Class Method Details

.parse_file(acpc_log_file_path, player_names, game_def_directory, num_hands = nil) ⇒ Object



87
88
89
90
91
# File 'lib/acpc_dealer_data/action_messages.rb', line 87

def self.parse_file(acpc_log_file_path, player_names, game_def_directory, num_hands=nil)
  LogFile.open(acpc_log_file_path, 'r') do |file| 
    ActionMessages.parse file, player_names, game_def_directory, num_hands
  end
end

.parse_from_message(from_message) ⇒ Object

Parameters:

  • from_message (String)

    FROM message (message from player)



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/acpc_dealer_data/action_messages.rb', line 44

def self.parse_from_message(from_message)
  if from_message.strip.match(
/^FROM\s*(\d+)\s*at\s*[\d\.]+\s*(#{MatchState::LABEL}\S+):([#{PokerAction::LEGAL_ACPC_CHARACTERS.to_a.join('')}]\s*\d*)$/
  )
    FromMessage.new(
      $1.to_i - 1, 
      MatchState.parse($2), 
      PokerAction.new($3)
    )
  else
    nil
  end
end

.parse_score(score_string) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/acpc_dealer_data/action_messages.rb', line 58

def self.parse_score(score_string)
  if score_string.strip.match(
    /^SCORE:([\d\-\.|]+):([\w|]+)$/
    )
     
    stack_changes = $1.split '|'
    players = $2.split '|'
       
    players.each_index.inject({}) do |player_results, j|
       player_results[players[j].to_sym] = stack_changes[j].to_r
       player_results
    end
  else
    nil
  end
end

.parse_to_message(to_message) ⇒ Object

Parameters:

  • to_message (String)

    TO message (message to player)



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/acpc_dealer_data/action_messages.rb', line 30

def self.parse_to_message(to_message)
  if to_message.strip.match(
    /^TO\s*(\d+)\s*at\s*[\d\.]+\s+(\S+)$/
  )
    ToMessage.new(
      $1.to_i - 1,
      MatchState.parse($2)
    )
  else
    nil
  end
end

.parse_to_or_from_message(message) ⇒ Object



75
76
77
78
79
80
81
82
# File 'lib/acpc_dealer_data/action_messages.rb', line 75

def self.parse_to_or_from_message(message)
  parsed_message = ActionMessages.parse_to_message(message)
  if parsed_message.nil?
    ActionMessages.parse_from_message(message)
  else
    parsed_message
  end
end