This class is a base class for server connections. The RequestFiber processes all incoming messages. More...
Classes | |
struct | EncryptionQueueFailureParams |
Public Member Functions | |
void | Initialize (InitRequest initRequest) |
override string | ToString () |
void | Disconnect (int disconnectError=ErrorCodes.Ok) |
Closes the connection. More... | |
void | AbortConnection () |
Forces the connection to close immediately. Should only be used if "Disconnect" does not lead to a clean connection shutdown, e.g. in case of an overloaded connection. More... | |
void | Flush () |
Flushes all pending data to the socket. More... | |
byte[] | InitializeEncryption (byte[] otherPartyPublicKey) |
Initializes the peer to receive and send encrypted operations with EncryptionMethod.Sha256Pkcs7. More... | |
byte[] | InitializeEncryption (byte[] otherPartyPublicKey, EncryptionMethod mode) |
Initializes the peer to receive and send encrypted operations. More... | |
bool | SetupEncryption (EncryptionData encryptionData, byte channelCount, out short errorCode, out string errorMsg) |
SendResult | SendEvent (IEventData eventData, SendParameters sendParameters) |
Sends an IEventData object to the client. More... | |
SendResult | SendMessage (object message, SendParameters sendParameters) |
SendResult | SendOperationResponse (OperationResponse operationResponse, SendParameters sendParameters) |
Sends the operation response to the client. More... | |
SendResult | SendDisconnectMessage (DisconnectMessage message, SendParameters sendParameters, int disconnectDelay=DefaultDisconnectInterval) |
void | GetStats (out int roundTripTime, out int roundTripTimeVariance, out int numFailures) |
void | SetDebugString (string message) |
string | GetDebugString () |
virtual string | GetHistograms () |
SendResult | SendEventAndDisconnect (IEventData eventData, SendParameters sendParameters, int disconnectDelay=DefaultDisconnectInterval, int disconnectCode=ErrorCodes.Ok) |
SendResult | SendMessageAndDisconnect (object message, SendParameters sendParameters, int disconnectDelay=DefaultDisconnectInterval, int disconnectCode=ErrorCodes.Ok) |
SendResult | SendOperationResponseAndDisconnect (OperationResponse operationResponse, SendParameters sendParameters, int disconnectDelay=DefaultDisconnectInterval) |
Sends the operation response to the client. More... | |
void | ScheduleDisconnect (int disconnectError, int delay) |
Schedules disconnect for peer. After this call data will be neither accepted from nor sent to client one of use cases is next: send error info and schedule for disconnect. this will give a chance to error information to reach a client More... | |
int | GetLastTouch () |
void | SetPrivateCustomTypeCache (CustomTypeCache cache) |
Sets private custom type cache. It is supposed to be used together with plugins. In other case Protocol.TryRegisterCustomType should be used More... | |
void | SetInboundController (InboundController controller) |
void | Dispose () |
Disposes the peer. More... | |
void | Trace (bool enabled, object tag) |
Public Attributes | |
bool | Connected => this.ConnectionState == ConnectionState.Connected || this.connectionState == ConnectionState.ScheduledForDisconnect |
Gets a value indicating whether this PeerBase instance is connected. More... | |
int | ConnectionId => this.UnmanagedPeer.GetConnectionID() |
Gets the connection id. More... | |
bool | IsConnectionSecure => this.datagramEncryptionUsed || this.NetworkProtocol == NetworkProtocolType.SecureWebSocket |
bool | Disposed => this.ConnectionState == ConnectionState.Disposed |
Gets a value indicating whether the peer was disposed. More... | |
bool | ScheduledForDisconnect => this.connectionState == ConnectionState.ScheduledForDisconnect |
IPAddress | LocalIPAddress => string.IsNullOrEmpty(this.LocalIP) ? IPAddress.None : IPAddress.Parse(this.LocalIP) |
Gets the IP Address the client connects to. More... | |
IPAddress | RemoteIPAddress => string.IsNullOrEmpty(this.RemoteIP) ? IPAddress.None : IPAddress.Parse(this.RemoteIP) |
Gets the client's remote IP address. More... | |
IFiber | RequestFiber => this.requestFiber |
Gets fiber for incoming messages. More... | |
bool | LocalIPAddressIsIPv6 => this.LocalIPAddress.AddressFamily == AddressFamily.InterNetworkV6 |
If true connection is using a server IPv6 endpoint. More... | |
bool | IsIPv6ToIPv4Bridged => this.SourceUsingIPv6 && this.LocalIPAddress.AddressFamily != AddressFamily.InterNetworkV6 |
If true the client is being bridged (DNS64+NAT64), also SourceUsingIPv6. More... | |
ProtocolType | ProtocolType => this.protocol.ProtocolType |
Static Public Attributes | |
const int | DefaultDisconnectInterval = 5_000 |
Protected Member Functions | |
virtual SendResult | SendData (byte[] data, SendParameters sendParameters) |
Sends bytes to the client. More... | |
virtual void | OnReceive (byte[] data, SendParameters sendParameters) |
Invoked if incoming data was received for the peer. More... | |
void | OnMessageInternal (object message, SendParameters sendParameters) |
void | OnOperationRequestInternal (OperationRequest operationRequest, SendParameters sendParameters) |
virtual void | Dispose (bool disposing) |
Disposes the internal fibers. More... | |
abstract void | OnDisconnect (int reasonCode, string reasonDetail) |
The connection was closed. More... | |
virtual void | OnSendBufferEmpty () |
The default behavior of OnSendBufferFull is to disconnect the client. If this behavior is changed (override) the inheritor can pause sending until OnSendBufferEmpty is called. More... | |
virtual void | OnDeserializationError (byte[] data, RtsMessageType msgType, string debugMessage, short errorCode=ErrorCodes.UnexpectedData, byte opCode=0, Exception exception=null) |
This method is called if incoming data has an unexpected format. Per default this method disconnects the client. Override to change this behavior. More... | |
OperationRequest | ParseOperationRequest (byte[] data, SendParameters sendParameters) |
OperationRequest | ParseInternalOperationRequest (byte[] data, SendParameters sendParameters) |
object | ParseMessage (byte[] data, SendParameters sendParameters) |
byte[] | ParseRawMessage (byte[] data, SendParameters sendParameters) |
void | HandleParseError (byte[] data, SendParameters sendParameters, Exception exception, string errorMsg, short errorCode, RtsMessageType msgType, byte operationCode=0) |
void | GetTraceStatus (out int traceOptions, out int enableOptions, out string tag) |
void | DisconnectAfterSend (int disconnectCode, int disconnectDelay, SendResult result) |
virtual void | OnEncryptionQueueOverload (EncryptionQueueFailureParams failureParams) |
Static Protected Member Functions | |
static bool | NeedSendErrorLog (SendResult sendResult) |
Protected Attributes | |
readonly object | SyncRoot = new object() |
object for synchronization More... | |
CustomTypeCache | privateCustomTypeCache |
PeerMetaDataContext | metaDataContext |
Static Protected Attributes | |
static readonly ILogger | sendErrorLog = LogManager.GetLogger("Photon.ErrorLog.PeerSendError") |
Properties | |
ConnectionState | ConnectionState [get, set] |
Gets the ConnectionState for this instance. More... | |
string | LocalIP [get] |
Gets the IP the client connects to. More... | |
int | LocalPort [get] |
Gets the port the client connects to. More... | |
NetworkProtocolType | NetworkProtocol [get] |
Gets the network protocol type used by the peer. More... | |
IRpcProtocol | Protocol [get, set] |
Gets the used IRpcProtocol protocol. More... | |
string | RemoteIP [get] |
Gets the client's remote IP address. More... | |
int | RemotePort [get] |
Gets the port the client connects from. More... | |
int | RoundTripTime [get, protected set] |
Gets the last round trip time for this peer. More... | |
int | RoundTripTimeVariance [get, protected set] |
Gets the last round trip time variance for this peer. More... | |
int | NumFailures [get, protected set] |
bool | SourceUsingIPv6 [get] |
If true the peer is using IPv6 to connect to the server, if the server endpoint used is not IPv6 (LocalIPAddressIsIPv6) it means the client is being bridged (DNS64+NAT64), also IsIPv6ToIPv4Bridged. More... | |
bool | ClientUsingDebugLib [get] |
byte | SdkId [get] |
byte | PlatformId [get] |
Version | ClientVersion [get, protected set] |
DateTime | CreationTime = DateTime.Now [get] |
PeerType | PeerType [get] |
Under laying native peer type More... | |
InboundController | PrivateInboundController [get] |
int | LastErrorCode [get] |
last error code that we was sent/set though this peer More... | |
This class is a base class for server connections. The RequestFiber processes all incoming messages.
|
inline |
Forces the connection to close immediately. Should only be used if "Disconnect" does not lead to a clean connection shutdown, e.g. in case of an overloaded connection.
|
inline |
Closes the connection.
|
inlineprotected |
|
inline |
Disposes the peer.
|
inlineprotectedvirtual |
Disposes the internal fibers.
disposing | True if called from Dispose(). |
Reimplemented in Photon.SocketServer.ServerToServer.S2SPeerBase, and Photon.SocketServer.ServerToServer.OutboundS2SPeer.
|
inline |
Flushes all pending data to the socket.
|
inline |
|
inlinevirtual |
|
inline |
|
inline |
|
inlineprotected |
|
inlineprotected |
|
inline |
|
inline |
Initializes the peer to receive and send encrypted operations with EncryptionMethod.Sha256Pkcs7.
otherPartyPublicKey | The other party public key. |
|
inline |
Initializes the peer to receive and send encrypted operations.
otherPartyPublicKey | The other party public key. |
mode | Specifies the EncryptionMethod. |
DONOT_USE_NATIVE_CRYPTO_PLUGIN
|
inlinestaticprotected |
|
inlineprotectedvirtual |
This method is called if incoming data has an unexpected format. Per default this method disconnects the client. Override to change this behavior.
data | The received data. |
debugMessage | A debug message that specifies why the data was unexpected. |
errorCode | |
opCode | |
exception | parsing exception |
Reimplemented in Photon.Hive.HivePeer.
|
protectedpure virtual |
The connection was closed.
Implemented in Photon.LoadBalancing.MasterServer.MasterClientPeer, Photon.Hive.HivePeer, Photon.LoadBalancing.MasterServer.GameServer.IncomingGameServerPeer, Photon.LoadBalancing.GameServer.GameClientPeer, Photon.LoadBalancing.GameServer.OutgoingMasterServerPeer, Photon.SocketServer.Rpc.Peer, and Photon.NameServer.ClientPeer.
|
inlineprotectedvirtual |
|
inlineprotected |
|
inlineprotected |
|
inlineprotectedvirtual |
Invoked if incoming data was received for the peer.
data | An array of type Byte containing the received data. |
sendParameters | A SendParameters instance specifying how the data was send. |
Can be overridden in a derived class to implement a custom request handling. The default implementation tries to parse the data as an OperationRequest and invokes the OnOperationRequest method of this instance.
Reimplemented in Photon.SocketServer.ServerToServer.S2SPeerBase.
|
inlineprotectedvirtual |
The default behavior of OnSendBufferFull is to disconnect the client. If this behavior is changed (override) the inheritor can pause sending until OnSendBufferEmpty is called.
Reimplemented in Photon.Hive.HivePeer.
|
inlineprotected |
|
inlineprotected |
|
inlineprotected |
|
inlineprotected |
|
inline |
Schedules disconnect for peer. After this call data will be neither accepted from nor sent to client one of use cases is next: send error info and schedule for disconnect. this will give a chance to error information to reach a client
disconnectError | error code that is reason for disconnect. OperationInvalid for instance |
delay |
|
inlineprotectedvirtual |
Sends bytes to the client.
data | The data. |
sendParameters | The send Options. |
|
inline |
|
inline |
Sends an IEventData object to the client.
eventData | The event data. |
sendParameters | The send Options. |
|
inline |
|
inline |
|
inline |
|
inline |
Sends the operation response to the client.
operationResponse | The operation response. |
sendParameters | The send Options. |
|
inline |
Sends the operation response to the client.
operationResponse | The operation response. |
sendParameters | The send Options. |
disconnectDelay |
|
inline |
|
inline |
|
inline |
Sets private custom type cache. It is supposed to be used together with plugins. In other case Protocol.TryRegisterCustomType should be used
cache |
|
inline |
|
inline |
|
inline |
bool Photon.SocketServer.PeerBase.Connected => this.ConnectionState == ConnectionState.Connected || this.connectionState == ConnectionState.ScheduledForDisconnect |
Gets a value indicating whether this PeerBase instance is connected.
true
if connected; otherwise, false
.
int Photon.SocketServer.PeerBase.ConnectionId => this.UnmanagedPeer.GetConnectionID() |
Gets the connection id.
Peers connected to different ports may have similar connection ids.
|
static |
bool Photon.SocketServer.PeerBase.Disposed => this.ConnectionState == ConnectionState.Disposed |
Gets a value indicating whether the peer was disposed.
The peer is automatically disposed after OnDisconnect.
bool Photon.SocketServer.PeerBase.IsConnectionSecure => this.datagramEncryptionUsed || this.NetworkProtocol == NetworkProtocolType.SecureWebSocket |
bool Photon.SocketServer.PeerBase.IsIPv6ToIPv4Bridged => this.SourceUsingIPv6 && this.LocalIPAddress.AddressFamily != AddressFamily.InterNetworkV6 |
If true the client is being bridged (DNS64+NAT64), also SourceUsingIPv6.
IPAddress Photon.SocketServer.PeerBase.LocalIPAddress => string.IsNullOrEmpty(this.LocalIP) ? IPAddress.None : IPAddress.Parse(this.LocalIP) |
Gets the IP Address the client connects to.
bool Photon.SocketServer.PeerBase.LocalIPAddressIsIPv6 => this.LocalIPAddress.AddressFamily == AddressFamily.InterNetworkV6 |
If true connection is using a server IPv6 endpoint.
|
protected |
|
protected |
ProtocolType Photon.SocketServer.PeerBase.ProtocolType => this.protocol.ProtocolType |
IPAddress Photon.SocketServer.PeerBase.RemoteIPAddress => string.IsNullOrEmpty(this.RemoteIP) ? IPAddress.None : IPAddress.Parse(this.RemoteIP) |
Gets the client's remote IP address.
IFiber Photon.SocketServer.PeerBase.RequestFiber => this.requestFiber |
Gets fiber for incoming messages.
bool Photon.SocketServer.PeerBase.ScheduledForDisconnect => this.connectionState == ConnectionState.ScheduledForDisconnect |
|
staticprotected |
|
protected |
object for synchronization
|
get |
|
getprotected set |
|
getset |
Gets the ConnectionState for this instance.
|
get |
|
get |
last error code that we was sent/set though this peer
|
get |
Gets the IP the client connects to.
|
get |
Gets the port the client connects to.
|
get |
Gets the network protocol type used by the peer.
The network protocol type.
|
getprotected set |
|
get |
Under laying native peer type
|
get |
|
get |
|
getset |
Gets the used IRpcProtocol protocol.
|
get |
Gets the client's remote IP address.
|
get |
Gets the port the client connects from.
|
getprotected set |
Gets the last round trip time for this peer.
This property is updated after each incoming request from the client. Only set for ENet / UDP peers, not for TCP peers.
|
getprotected set |
Gets the last round trip time variance for this peer.
This property is updated after each incoming request from the client. Only set for ENet / UDP peers, not for TCP peers.
|
get |
|
get |
If true the peer is using IPv6 to connect to the server, if the server endpoint used is not IPv6 (LocalIPAddressIsIPv6) it means the client is being bridged (DNS64+NAT64), also IsIPv6ToIPv4Bridged.