TCP カスタムメッセージの送信方法

Diarkis サーバにカスタムコマンドを実装し、それらのコマンドを呼び出すことができます。

// ver = command version
// cmd = command ID
// payload = message
tcp.Send(ver, cmd, payload);

TCP クライアント - OnConnect

接続が正常に確立されると、OnConnect イベントが発生します。

tcp.OnCreate += OnTcpCreate;
private void OnTcpCreate( bool reconnected)
{
    // A connection is successfully established. Now you may interactive wit the server cluster
}

TCP クライアント - OnException

このイベントは、内部で例外が捕捉された場合や、Connectメソッドが失敗した場合に発生します。

tcp.OnException += OnTcpException;
private void OnTcpException( int errorCode, string errorMessage)
{
    // Handle the exception here
}

TCP クライアント - OnHeartbeat

TCPクライアントは、接続を維持するために、特定の間隔(デフォルトでは5秒ごと)でハートビートパケットを送受信します。このイベントは、クライアントがサーバクラスターから応答を受信したときに発生します。

tcp.OnHeartbeat += OnTcpHeartbeat;
private void OnTcpHeartbeat()
{
    // Do something if you would like to
}

TCP クライアント - OnOffline

このイベントは、接続されたサーバがオフラインになる準備をしているときに発生します。このイベントが発生した場合、クライアントは現在の接続を終了し、新しい接続を再確立する必要があります。

tcp.OnOffline += OnTcpOffline;
tcp.OnDisconnect += OnTcpDisconnect;
private void OnTcpOffline()
{
    // We set a flag, so we can perform re-connection in OnDisconnect event listener
    reconnectFlag = true;
    // This is raise OnDisconnect event
    tcp.Disconnect();
}
// bool reconnecting is set to true when you use tcp.Reconnect()
private void OnTcpDisconnect( bool reconnecting)
{
    if (reconnectFlag)
    {
        // Call the application server to indirectly obtain a new endpoint here
        // Assuming we have the new endpoint, we proceed with reconnect
        tcp.SetEncryptionKeys(newSid, newKey, newIv, newMacKey);
        tcp.Connect(newAddr, newPort);
    }
}

TCP クライアント - OnDisconnect

このイベントは、クライアントがDiarkisサーバクラスターから正常に切断されたときに発生します。

tcp.OnDisconnect += OnTcpDisconnect;
private void OnTcpDisconnect( bool reconnecting)
{
    // bool reconnecting is set to true only when tcp.Reconnect() is used.
}

TCP クライアント - OnPush

このイベントは、クライアントがDiarkisサーバークラスターからプッシュとしてパケット(クライアントから要求されていないパケット)を受信したときに発生します。

tcp.OnPush += OnTcpPush;
private void OnTcpPush( uint ver, uint cmd, byte[] payload)
{
      // Consume payload accordingly using uint ver and cmd
      switch(ver)
      {
            case MY_CUSTOM_CMD_VER1:
                  HandleCustomCmdVer1(cmd, payload);
            default:
                  // Unknown command version... :(
            break;
      }
}
private void HandleCustomCmdVer1( uint cmd, byte[] payload)
{
      switch(cmd)
      {
            case CMD1:
                  HandleCmd1(payload);
            break;
      }
}

最終更新