using System; namespace FishNet.Transporting { /// <summary> /// Container about data received on the server. /// </summary> public struct ServerReceivedDataArgs { /// <summary> /// Data received. /// </summary> public ArraySegment<byte> Data; /// <summary> /// Channel data was received on. /// </summary> public Channel Channel; /// <summary> /// ConnectionId from which client sent data, if data was received on the server. /// </summary> public int ConnectionId; /// <summary> /// Index of the transport that is for. /// This is primarily used when supporting multiple transports. /// </summary> public int TransportIndex; /// <summary> /// Delegate to invoke after data is processed. /// </summary> /// <returns></returns> public Action FinalizeMethod; public ServerReceivedDataArgs(ArraySegment<byte> data, Channel channel, int connectionId, int transportIndex) { Data = data; Channel = channel; ConnectionId = connectionId; TransportIndex = transportIndex; FinalizeMethod = null; } public ServerReceivedDataArgs(ArraySegment<byte> data, Channel channel, int connectionId, int transportIndex, Action finalizeMethod) { Data = data; Channel = channel; ConnectionId = connectionId; TransportIndex = transportIndex; FinalizeMethod = finalizeMethod; } } /// <summary> /// Container about data received on the local client. /// </summary> public struct ClientReceivedDataArgs { /// <summary> /// Data received. /// </summary> public ArraySegment<byte> Data; /// <summary> /// Channel data was received on. /// </summary> public Channel Channel; /// <summary> /// Index of the transport that is for. /// This is primarily used when supporting multiple transports. /// </summary> public int TransportIndex; public ClientReceivedDataArgs(ArraySegment<byte> data, Channel channel, int transportIndex) { Data = data; Channel = channel; TransportIndex = transportIndex; } } /// <summary> /// Container about a connection state change for a client. /// </summary> public struct RemoteConnectionStateArgs { /// <summary> /// Index of the transport that is for. /// This is primarily used when supporting multiple transports. /// </summary> public int TransportIndex; /// <summary> /// New connection state. /// </summary> public RemoteConnectionState ConnectionState; /// <summary> /// ConnectionId for which client the state changed. Will be -1 if ConnectionState was for the local server. /// </summary> public int ConnectionId; public RemoteConnectionStateArgs(RemoteConnectionState connectionState, int connectionId, int transportIndex) { ConnectionState = connectionState; ConnectionId = connectionId; TransportIndex = transportIndex; } } /// <summary> /// Container about a connection state change for the server. /// </summary> public struct ServerConnectionStateArgs { /// <summary> /// Index of the transport that is for. /// This is primarily used when supporting multiple transports. /// </summary> public int TransportIndex; /// <summary> /// New connection state. /// </summary> public LocalConnectionState ConnectionState; public ServerConnectionStateArgs(LocalConnectionState connectionState, int transportIndex) { ConnectionState = connectionState; TransportIndex = transportIndex; } } /// <summary> /// Container about a connection state change for the local client. /// </summary> public struct ClientConnectionStateArgs { /// <summary> /// New connection state. /// </summary> public LocalConnectionState ConnectionState; /// <summary> /// Index of the transport that is for. /// This is primarily used when supporting multiple transports. /// </summary> public int TransportIndex; public ClientConnectionStateArgs(LocalConnectionState connectionState, int transportIndex) { ConnectionState = connectionState; TransportIndex = transportIndex; } } }