# Class MemberImpl

java.lang.Object
org.apache.catalina.tribes.membership.MemberImpl

All Implemented Interfaces:
  `Externalizable`, `Serializable`, `Member`

Direct Known Subclasses:
  `StaticMember`

public class MemberImpl extends Object implements Member, Externalizable
A membership implementation using simple multicast. This is the representation of a multicast member. Carries the host, and port of the this or other cluster nodes.

See Also:
  - Serialized Form

## Field Summary

Fields
Modifier and Type
Field
Description
`protected byte[]`
`command`
Command, so that the custom payload doesn't have to be used This is for internal tribes use, such as SHUTDOWN_COMMAND
`protected byte[]`
`dataPkg`
To avoid serialization over and over again, once the local dataPkg has been set, we use that to transmit data
`protected byte[]`
`domain`
Domain if we want to filter based on domain.
`protected byte[]`
`host`
The listen host for this member
`protected String`
`hostname`
`protected boolean`
`local`
The flag indicating that this member is a local member.
`protected long`
`memberAliveTime`
The number of milliseconds since this member was created, is kept track of using the start time
`protected AtomicInteger`
`msgCount`
Counter for how many broadcast messages have been sent from this member
`protected byte[]`
`payload`
Custom payload that an app framework can broadcast Also used to transport stop command.
`protected int`
`port`
The tcp listen port for this member
`protected int`
`securePort`
The tcp/SSL listen port for this member
`protected long`
`serviceStartTime`
For the local member only
`protected static final StringManager`
`sm`
`static final byte[]`
`TRIBES_MBR_BEGIN`
`static final byte[]`
`TRIBES_MBR_END`
`protected int`
`udpPort`
The udp listen port for this member
`protected byte[]`
`uniqueId`
Unique session Id for this member

### Fields inherited from interface org.apache.catalina.tribes.Member

`SHUTDOWN_PAYLOAD`

## Constructor Summary

Constructors
Constructor
Description
`MemberImpl()`
Empty constructor for serialization
`MemberImpl(String host, int port, long aliveTime)`
Construct a new member object.
`MemberImpl(String host, int port, long aliveTime, byte[] payload)`

## Method Summary

Modifier and Type
Method
Description
`static String`
`bToS(byte[] data)`
`static String`
`bToS(byte[] data, int max)`
`boolean`
`equals(Object o)`
Returns true if the param o is a McastMember with the same name
`byte[]`
`getCommand()`
`byte[]`
`getData()`
Create a data package to send over the wire representing this member.
`byte[]`
`getData(boolean getalive)`
Highly optimized version of serializing a member into a byte array Returns a cached byte[] reference, do not modify this data
`byte[]`
`getData(boolean getalive, boolean reset)`
Highly optimized version of serializing a member into a byte array Returns a cached byte[] reference, do not modify this data
`int`
`getDataLength()`
Length of a message obtained by `Member.getData(boolean)` or `Member.getData(boolean, boolean)`.
`byte[]`
`getDomain()`
`byte[]`
`getHost()`
Returns the listen host for the ChannelReceiver implementation
`String`
`getHostname()`
`static Member`
`getMember(byte[] data)`
`static Member`
`getMember(byte[] data, int offset, int length)`
`static Member`
`getMember(byte[] data, int offset, int length, MemberImpl member)`
`static Member`
`getMember(byte[] data, MemberImpl member)`
Deserializes a member from data sent over the wire.
`long`
`getMemberAliveTime()`
Contains information on how long this member has been online.
`int`
`getMsgCount()`
`String`
`getName()`
`byte[]`
`getPayload()`
`int`
`getPort()`
Returns the listen port for the ChannelReceiver implementation
`int`
`getSecurePort()`
Returns the secure listen port for the ChannelReceiver implementation.
`long`
`getServiceStartTime()`
`int`
`getUdpPort()`
Returns the UDP port that this member is listening to for UDP messages.
`byte[]`
`getUniqueId()`
returns a UUID unique for this member over all sessions.
`int`
`hashCode()`
`protected void`
`inc()`
Increment the message count.
`boolean`
`isFailing()`
`boolean`
`isLocal()`
`boolean`
`isReady()`
The current state of the member.
`boolean`
`isSuspect()`
The current state of the member.
`void`
`readExternal(ObjectInput in)`
`void`
`setCommand(byte[] command)`
Set the command associated with this member.
`void`
`setDomain(byte[] domain)`
`void`
`setHost(byte[] host)`
`void`
`setHostname(String host)`
`void`
`setLocal(boolean local)`
Set if the member is local.
`void`
`setMemberAliveTime(long time)`
Set the alive time in ms.
`void`
`setMsgCount(int msgCount)`
`void`
`setPayload(byte[] payload)`
Set the payload associated with this member.
`void`
`setPort(int port)`
`void`
`setSecurePort(int securePort)`
`void`
`setServiceStartTime(long serviceStartTime)`
`void`
`setUdpPort(int port)`
`void`
`setUniqueId(byte[] uniqueId)`
`String`
`toString()`
`void`
`writeExternal(ObjectOutput out)`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Field Details

### TRIBES_MBR_BEGIN

public static final transient byte[] TRIBES_MBR_BEGIN

### TRIBES_MBR_END

public static final transient byte[] TRIBES_MBR_END

### sm

protected static final StringManager sm

### host

protected volatile byte[] host
The listen host for this member

### hostname

protected transient volatile String hostname

### port

protected volatile int port
The tcp listen port for this member

### udpPort

protected volatile int udpPort
The udp listen port for this member

### securePort

protected volatile int securePort
The tcp/SSL listen port for this member

### msgCount

protected AtomicInteger msgCount
Counter for how many broadcast messages have been sent from this member

### memberAliveTime

protected volatile long memberAliveTime
The number of milliseconds since this member was created, is kept track of using the start time

### serviceStartTime

protected transient long serviceStartTime
For the local member only

### dataPkg

protected transient byte[] dataPkg
To avoid serialization over and over again, once the local dataPkg has been set, we use that to transmit data

### uniqueId

protected volatile byte[] uniqueId
Unique session Id for this member

### payload

protected volatile byte[] payload
Custom payload that an app framework can broadcast Also used to transport stop command.

### command

protected volatile byte[] command
Command, so that the custom payload doesn't have to be used This is for internal tribes use, such as SHUTDOWN_COMMAND

### domain

protected volatile byte[] domain
Domain if we want to filter based on domain.

### local

protected volatile boolean local
The flag indicating that this member is a local member.

## Constructor Details

### MemberImpl

public MemberImpl()
Empty constructor for serialization

### MemberImpl

public MemberImpl(String host, int port, long aliveTime) throws IOException
Construct a new member object.

Parameters:
  `host` - - the tcp listen host
  `port` - - the tcp listen port
  `aliveTime` - - the number of milliseconds since this member was created
Throws:
  `IOException` - If there is an error converting the host name to an IP address

### MemberImpl

public MemberImpl(String host, int port, long aliveTime, byte[] payload) throws IOException

Throws:
  `IOException`

## Method Details

### isReady

public boolean isReady()
Description copied from interface: `Member`
The current state of the member.

Specified by:
  `isReady` in interface `Member`
Returns:
  `true` if the member is functioning correctly

### isSuspect

public boolean isSuspect()
Description copied from interface: `Member`
The current state of the member.

Specified by:
  `isSuspect` in interface `Member`
Returns:
  `true` if the member is suspect, but the crash has not been confirmed

### isFailing

public boolean isFailing()

Specified by:
  `isFailing` in interface `Member`
Returns:
  `true` if the member has been confirmed to malfunction

### inc

protected void inc()
Increment the message count.

### getData

public byte[] getData()
Create a data package to send over the wire representing this member. This is faster than serialization.

Returns:
  - the bytes for this member deserialized

### getData

public byte[] getData(boolean getalive)
Description copied from interface: `Member`
Highly optimized version of serializing a member into a byte array Returns a cached byte[] reference, do not modify this data

Specified by:
  `getData` in interface `Member`
Parameters:
  `getalive` - calculate memberAlive time
Returns:
  the data as a byte array

### getDataLength

public int getDataLength()
Description copied from interface: `Member`
Length of a message obtained by `Member.getData(boolean)` or `Member.getData(boolean, boolean)`.

Specified by:
  `getDataLength` in interface `Member`
Returns:
  the data length

### getData

public byte[] getData(boolean getalive, boolean reset)
Description copied from interface: `Member`
Highly optimized version of serializing a member into a byte array Returns a cached byte[] reference, do not modify this data

Specified by:
  `getData` in interface `Member`
Parameters:
  `getalive` - calculate memberAlive time
  `reset` - reset the cached data package, and create a new one
Returns:
  the data as a byte array

### getMember

public static Member getMember(byte[] data, MemberImpl member)
Deserializes a member from data sent over the wire.

Parameters:
  `data` - The bytes received
  `member` - The member object to populate
Returns:
  The populated member object.

### getMember

public static Member getMember(byte[] data, int offset, int length, MemberImpl member)

### getMember

public static Member getMember(byte[] data)

### getMember

public static Member getMember(byte[] data, int offset, int length)

### getName

public String getName()

Specified by:
  `getName` in interface `Member`
Returns:
  the name of this node, should be unique within the group.

### getPort

public int getPort()
Description copied from interface: `Member`
Returns the listen port for the ChannelReceiver implementation

Specified by:
  `getPort` in interface `Member`
Returns:
  the listen port for this member, -1 if its not listening on an insecure port
See Also:
  - `ChannelReceiver`

### getHost

public byte[] getHost()
Description copied from interface: `Member`
Returns the listen host for the ChannelReceiver implementation

Specified by:
  `getHost` in interface `Member`
Returns:
  IPv4 or IPv6 representation of the host address this member listens to incoming data
See Also:
  - `ChannelReceiver`

### getHostname

public String getHostname()

### getMsgCount

public int getMsgCount()

### getMemberAliveTime

public long getMemberAliveTime()
Description copied from interface: `Member`
Contains information on how long this member has been online. The result is the number of milli seconds this member has been broadcasting its membership to the group.

Specified by:
  `getMemberAliveTime` in interface `Member`
Returns:
  nr of milliseconds since this member started.

### getServiceStartTime

public long getServiceStartTime()

### getUniqueId

public byte[] getUniqueId()
Description copied from interface: `Member`
returns a UUID unique for this member over all sessions. If the member crashes and restarts, the uniqueId will be different.

Specified by:
  `getUniqueId` in interface `Member`
Returns:
  byte[]

### getPayload

public byte[] getPayload()

Specified by:
  `getPayload` in interface `Member`
Returns:
  the payload associated with this member

### getCommand

public byte[] getCommand()

Specified by:
  `getCommand` in interface `Member`
Returns:
  the command associated with this member

### getDomain

public byte[] getDomain()

Specified by:
  `getDomain` in interface `Member`
Returns:
  the domain for this cluster

### getSecurePort

public int getSecurePort()
Description copied from interface: `Member`
Returns the secure listen port for the ChannelReceiver implementation. Returns -1 if its not listening to a secure port.

Specified by:
  `getSecurePort` in interface `Member`
Returns:
  the listen port for this member, -1 if its not listening on a secure port
See Also:
  - `ChannelReceiver`

### getUdpPort

public int getUdpPort()
Description copied from interface: `Member`
Returns the UDP port that this member is listening to for UDP messages.

Specified by:
  `getUdpPort` in interface `Member`
Returns:
  the listen UDP port for this member, -1 if its not listening on a UDP port

### setMemberAliveTime

public void setMemberAliveTime(long time)
Description copied from interface: `Member`
Set the alive time in ms.

Specified by:
  `setMemberAliveTime` in interface `Member`
Parameters:
  `time` - the value to set

### toString

public String toString()

Overrides:
  `toString` in class `Object`

### bToS

public static String bToS(byte[] data)

### bToS

public static String bToS(byte[] data, int max)

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### equals

public boolean equals(Object o)
Returns true if the param o is a McastMember with the same name

Overrides:
  `equals` in class `Object`
Parameters:
  `o` - The object to test for equality

### setHost

public void setHost(byte[] host)

### setHostname

public void setHostname(String host) throws IOException

Throws:
  `IOException`

### setMsgCount

public void setMsgCount(int msgCount)

### setPort

public void setPort(int port)

### setServiceStartTime

public void setServiceStartTime(long serviceStartTime)

### setUniqueId

public void setUniqueId(byte[] uniqueId)

### setPayload

public void setPayload(byte[] payload)
Description copied from interface: `Member`
Set the payload associated with this member.

Specified by:
  `setPayload` in interface `Member`
Parameters:
  `payload` - the payload

### setCommand

public void setCommand(byte[] command)
Description copied from interface: `Member`
Set the command associated with this member.

Specified by:
  `setCommand` in interface `Member`
Parameters:
  `command` - the command

### setDomain

public void setDomain(byte[] domain)

### setSecurePort

public void setSecurePort(int securePort)

### setUdpPort

public void setUdpPort(int port)

### isLocal

public boolean isLocal()

Specified by:
  `isLocal` in interface `Member`
Returns:
  `true` if the member is local member

### setLocal

public void setLocal(boolean local)
Description copied from interface: `Member`
Set if the member is local.

Specified by:
  `setLocal` in interface `Member`
Parameters:
  `local` - set to `true` if this is the local member

### readExternal

public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException

Specified by:
  `readExternal` in interface `Externalizable`
Throws:
  `IOException`
  `ClassNotFoundException`

### writeExternal

public void writeExternal(ObjectOutput out) throws IOException

Specified by:
  `writeExternal` in interface `Externalizable`
Throws:
  `IOException`