| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -18,12 +18,11 @@ use std::net::TcpStream;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use std::sync::mpsc;
 | 
					 | 
					 | 
					 | 
					use std::sync::mpsc;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//  MQTT Topics:
 | 
					 | 
					 | 
					 | 
					//  MQTT Topics:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - division/{division_id}
 | 
					 | 
					 | 
					 | 
					//   - division/{division_id}/{round}/{match}/score
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - division/{division_id}/ranking
 | 
					 | 
					 | 
					 | 
					//   - division/{division_id}/ranking
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - arena/{arena_id}/score
 | 
					 | 
					 | 
					 | 
					//   - arena/{arena_id}/score
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - arena/{arena_id}/state
 | 
					 | 
					 | 
					 | 
					//   - arena/{arena_id}/state
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - arena/{arena_id}
 | 
					 | 
					 | 
					 | 
					//   - arena/{arena_id}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - game/{division_id}/{game_id}/score
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//   - team/{team_string}
 | 
					 | 
					 | 
					 | 
					//   - team/{team_string}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					pub mod tm {
 | 
					 | 
					 | 
					 | 
					pub mod tm {
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -712,14 +711,16 @@ fn on_score_change(notice: tm::Notice, event: Event, _connection: &TMConnection)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    match get_affected_match(¬ice) {
 | 
					 | 
					 | 
					 | 
					    match get_affected_match(¬ice) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        None => (Vec::new(), event),
 | 
					 | 
					 | 
					 | 
					        None => (Vec::new(), event),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Some(tuple) => {
 | 
					 | 
					 | 
					 | 
					        Some(tuple) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            // Use `event` to figure out which arena topic to publish to
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            // Also add the match score topic based on the tuple
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            match get_game_score(¬ice) {
 | 
					 | 
					 | 
					 | 
					            match get_game_score(¬ice) {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                None => (Vec::new(), event),
 | 
					 | 
					 | 
					 | 
					                None => (Vec::new(), event),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                Some(score) => {
 | 
					 | 
					 | 
					 | 
					                Some(score) => {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    let serialized = serde_json::to_string(&score).unwrap();
 | 
					 | 
					 | 
					 | 
					                    let serialized = serde_json::to_string(&score).unwrap();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    let arena_topic = String::from("arena/TEST/score");
 | 
					 | 
					 | 
					 | 
					                    let game_topic = format!("division/{}/{:?}/{}/score", tuple.division, tuple.round, tuple.match_num);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    let mut out = Vec::new();
 | 
					 | 
					 | 
					 | 
					                    let mut out = Vec::new();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    out.push(MQTTMessage{
 | 
					 | 
					 | 
					 | 
					                    out.push(MQTTMessage{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        topic: arena_topic,
 | 
					 | 
					 | 
					 | 
					                        topic: game_topic,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        payload: serialized,
 | 
					 | 
					 | 
					 | 
					                        payload: serialized,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    });
 | 
					 | 
					 | 
					 | 
					                    });
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                    return (out, event);
 | 
					 | 
					 | 
					 | 
					                    return (out, event);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -796,28 +797,12 @@ fn on_match_list_update(_notice: tm::Notice, _event: Event, connection: &TMConne
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return _on_match_list_update(connection);
 | 
					 | 
					 | 
					 | 
					    return _on_match_list_update(connection);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					fn on_match_score_update(notice: tm::Notice, event: Event, _connection: &TMConnection) -> (Vec<MQTTMessage>, Event) {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    match get_game_score(¬ice) {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        None => (Vec::new(), event),
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        Some(score) => {
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            let serialized = serde_json::to_string(&score).unwrap();
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            let arena_topic = String::from("arena/TEST/score");
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            let mut out = Vec::new();
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            out.push(MQTTMessage{
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                topic: arena_topic,
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                payload: serialized,
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            });
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            return (out, event);
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        },
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					fn main() {
 | 
					 | 
					 | 
					 | 
					fn main() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    env_logger::init();
 | 
					 | 
					 | 
					 | 
					    env_logger::init();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    let mut callbacks: HashMap<tm::NoticeId, NoticeCallback> = HashMap::new();
 | 
					 | 
					 | 
					 | 
					    let mut callbacks: HashMap<tm::NoticeId, NoticeCallback> = HashMap::new();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeRealtimeScoreChanged, on_score_change);
 | 
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeRealtimeScoreChanged, on_score_change);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeMatchScoreUpdated, on_match_score_update);
 | 
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeMatchScoreUpdated, on_score_change);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeFieldTimerStarted, on_match_start);
 | 
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeFieldTimerStarted, on_match_start);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeFieldTimerStopped, on_match_cancel);
 | 
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeFieldTimerStopped, on_match_cancel);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeFieldResetTimer, on_match_reset);
 | 
					 | 
					 | 
					 | 
					    callbacks.insert(tm::NoticeId::NoticeFieldResetTimer, on_match_reset);
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |