View Javadoc
1   package org.metricshub.ipmi.core.sm.events;
2   
3   /*-
4    * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5    * IPMI Java Client
6    * ჻჻჻჻჻჻
7    * Copyright 2023 Verax Systems, MetricsHub
8    * ჻჻჻჻჻჻
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU Lesser General Public License as
11   * published by the Free Software Foundation, either version 3 of the
12   * License, or (at your option) any later version.
13   *
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Lesser Public License for more details.
18   *
19   * You should have received a copy of the GNU General Lesser Public
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/lgpl-3.0.html>.
22   * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
23   */
24  
25  import org.metricshub.ipmi.core.coding.PayloadCoder;
26  import org.metricshub.ipmi.core.sm.StateMachine;
27  import org.metricshub.ipmi.core.sm.states.SessionValid;
28  import org.metricshub.ipmi.core.sm.states.State;
29  
30  /**
31   * Performed in {@link SessionValid} {@link State} will cause {@link #message}
32   * to be sent.
33   *
34   * @see StateMachine
35   */
36  public class Sendv20Message extends StateMachineEvent {
37  	private PayloadCoder message;
38  	private int sessionId;
39  	private int messageSequenceNumber;
40  	private int sessionSequenceNumber;
41  
42  	/**
43  	 * Prepares an event for {@link StateMachine} that will perform sending an
44  	 * IPMI command in v2.0 format. Only possible in {@link SessionValid}
45  	 * {@link State}
46  	 *
47  	 * @param payloadCoder
48  	 *        - The payload to send.
49  	 * @param sessionId
50  	 *        - managed system session ID
51  	 * @param messageSequenceNumber
52  	 *        - generated sequence number for the message to send
53  	 */
54  	public Sendv20Message(PayloadCoder payloadCoder, int sessionId, int messageSequenceNumber,
55  			int sessionSequenceNumber) {
56  		message = payloadCoder;
57  		this.sessionId = sessionId;
58  		this.messageSequenceNumber = messageSequenceNumber;
59  		this.sessionSequenceNumber = sessionSequenceNumber;
60  	}
61  
62  	public int getSessionId() {
63  		return sessionId;
64  	}
65  
66  	public int getMessageSequenceNumber() {
67  		return messageSequenceNumber;
68  	}
69  
70  	public int getSessionSequenceNumber() {
71  		return sessionSequenceNumber;
72  	}
73  
74  	public PayloadCoder getPayloadCoder() {
75  		return message;
76  	}
77  
78  	@Override
79  	public boolean equals(Object o) {
80  		if (this == o) {
81  			return true;
82  		}
83  		if (o == null || getClass() != o.getClass()) {
84  			return false;
85  		}
86  
87  		Sendv20Message that = (Sendv20Message) o;
88  
89  		if (sessionId != that.sessionId) {
90  			return false;
91  		}
92  		if (messageSequenceNumber != that.messageSequenceNumber) {
93  			return false;
94  		}
95  		if (sessionSequenceNumber != that.sessionSequenceNumber) {
96  			return false;
97  		}
98  
99  		return message != null ? message.equals(that.message) : that.message == null;
100 	}
101 
102 	@Override
103 	public int hashCode() {
104 		int result = message != null ? message.hashCode() : 0;
105 		result = 31 * result + sessionId;
106 		result = 31 * result + messageSequenceNumber;
107 		result = 31 * result + sessionSequenceNumber;
108 		return result;
109 	}
110 }