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;
  }
}