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,
55                            int messageSequenceNumber, 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) return true;
81          if (o == null || getClass() != o.getClass()) return false;
82  
83          Sendv20Message that = (Sendv20Message) o;
84  
85          if (sessionId != that.sessionId) return false;
86          if (messageSequenceNumber != that.messageSequenceNumber) return false;
87          if (sessionSequenceNumber != that.sessionSequenceNumber) return false;
88  
89          return message != null ? message.equals(that.message) : that.message == null;
90      }
91  
92      @Override
93      public int hashCode() {
94          int result = message != null ? message.hashCode() : 0;
95          result = 31 * result + sessionId;
96          result = 31 * result + messageSequenceNumber;
97          result = 31 * result + sessionSequenceNumber;
98          return result;
99      }
100 }