/*
 * This software is distributed under following license based on modified BSD
 * style license.
 * ----------------------------------------------------------------------
 *
 * Copyright 2009 The Nimbus2 Project. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NIMBUS PROJECT ``AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
 * NO EVENT SHALL THE NIMBUS PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * The views and conclusions contained in the software and documentation are
 * those of the authors and should not be interpreted as representing official
 * policies, either expressed or implied, of the Nimbus2 Project.
 */
package jp.ossc.nimbus.service.publish.websocket.jetty;

import java.util.Set;

import jp.ossc.nimbus.core.ServiceName;
import jp.ossc.nimbus.core.ServiceBaseMBean;

/**
 * {@link DataSetWebSocketService}のMBeanインタフェース。<p>
 *
 * @author M.Takata
 */
public interface DataSetWebSocketServiceMBean extends ServiceBaseMBean{
    
    /**
     * 送信モード：文字列。<p>
     */
    public static final int SEND_MODE_STRING = 1;
    
    /**
     * 送信モード：バイナリ。<p>
     */
    public static final int SEND_MODE_BINARY = 2;
    
    /**
     * 送信データセットの配信ヘッダのヘッダ名のデフォルト値。<p>
     */
    public static final String PUBLISH_HEADER_DEFAULT_NAME = "Common";
    
    /**
     * ログ出力メッセージID：リクエスト変換エラー。<p>
     */
    public static final String MSG_ID_REQUEST_CONVERT_ERROR        = "DSWS_00001";
    
    /**
     * ログ出力メッセージID：未知のリクエスト受信エラー。<p>
     */
    public static final String MSG_ID_UNKNOWN_REQUEST_OBJECT_ERROR = "DSWS_00002";
    
    /**
     * ログ出力メッセージID：リクエスト処理エラー。<p>
     */
    public static final String MSG_ID_REQUEST_PROCESS_ERROR        = "DSWS_00003";
    
    /**
     * ログ出力メッセージID：送信メッセージ変換エラー。<p>
     */
    public static final String MSG_ID_SEND_MESSAGE_CONVERT_ERROR   = "DSWS_00004";
    
    /**
     * ログ出力メッセージID：メッセージ送信エラー。<p>
     */
    public static final String MSG_ID_SEND_MESSAGE_ERROR           = "DSWS_00005";
    
    /**
     * ログ出力メッセージID：PONG送信エラー。<p>
     */
    public static final String MSG_ID_SEND_PONG_ERROR              = "DSWS_00006";
    
    /**
     * ログ出力メッセージID：未認証エラー。<p>
     */
    public static final String MSG_ID_NO_AUTHENTICATED_ERROR       = "DSWS_00007";
    
    /**
     * ログ出力メッセージID：ログアウト処理エラー。<p>
     */
    public static final String MSG_ID_LOGOUT_ERROR                 = "DSWS_00008";
    
    /**
     * {@link jp.ossc.nimbus.service.context.Context Context}サービスからリクエストIDを取得する場合の、リクエストIDのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_REQUEST_ID_KEY
         = jp.ossc.nimbus.service.aop.interceptor.ThreadContextKey.REQUEST_ID;
    
    /**
     * リクエストジャーナルのルートステップのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_REQUEST_JOURNAL_KEY = "Request";
    
    /**
     * リクエストジャーナルのリクエストメッセージのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_REQUEST_MESSAGE_JOURNAL_KEY = "Message";
    
    /**
     * リクエストジャーナルのリクエストDataSetのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_REQUEST_DATASET_JOURNAL_KEY = "DataSet";
    
    /**
     * ジャーナルのIDのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_ID_JOURNAL_KEY = "Id";
    
    /**
     * ジャーナルの例外のキーのデフォルト値。<p>
     */
    public static final String DEFAULT_EXCEPTION_JOURNAL_KEY = "Exception";
    
    /**
     * 送信ジャーナルのルートステップのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_SEND_JOURNAL_KEY = "Send";
    
    /**
     * 送信ジャーナルの送信メッセージのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_SEND_MESSAGE_JOURNAL_KEY = "Message";
    
    /**
     * 送信ジャーナルの送信DataSetのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_SEND_DATASET_JOURNAL_KEY = "DataSet";
    
    /**
     * 送信ジャーナルの送信バイトのキーのデフォルト値。<p>
     */
    public static final String DEFAULT_SEND_BYTES_JOURNAL_KEY = "Bytes";
    
    /**
     * {@link jp.ossc.nimbus.service.publish.MessageReceiver MessageReceiver}サービスのサービス名を設定する。<p>
     *
     * @param name MessageReceiverサービスのサービス名
     */
    public void setMessageReceiverServiceName(ServiceName name);
    
    /**
     * {@link jp.ossc.nimbus.service.publish.MessageReceiver MessageReceiver}サービスのサービス名を取得する。<p>
     *
     * @return MessageReceiverサービスのサービス名
     */
    public ServiceName getMessageReceiverServiceName();
    
    /**
     * WebSocketでリクエストされたデータを{@link jp.ossc.nimbus.beans.dataset.DataSet DataSet}に変換する{@link jp.ossc.nimbus.util.converter.BindingStreamConverter BindingStreamConverter}サービスのサービス名を設定する。<p>
     *
     * @param name BindingStreamConverterサービスのサービス名
     */
    public void setRequestDataSetConverterServiceName(ServiceName name);
    
    /**
     * WebSocketでリクエストされたデータを{@link jp.ossc.nimbus.beans.dataset.DataSet DataSet}に変換する{@link jp.ossc.nimbus.util.converter.BindingStreamConverter BindingStreamConverter}サービスのサービス名を取得する。<p>
     *
     * @return BindingStreamConverterサービスのサービス名
     */
    public ServiceName getRequestDataSetConverterServiceName();
    
    /**
     * WebSocketで送信する{@link jp.ossc.nimbus.beans.dataset.DataSet DataSet}を、ストリームに変換する{@link jp.ossc.nimbus.util.converter.BindingStreamConverter StreamConverter}サービスのサービス名を設定する。<p>
     *
     * @param name StreamConverterサービスのサービス名
     */
    public void setSendDataSetConverterServiceName(ServiceName name);
    
    /**
     * WebSocketで送信する{@link jp.ossc.nimbus.beans.dataset.DataSet DataSet}を、ストリームに変換する{@link jp.ossc.nimbus.util.converter.BindingStreamConverter StreamConverter}サービスのサービス名を取得する。<p>
     *
     * @return StreamConverterサービスのサービス名
     */
    public ServiceName getSendDataSetConverterServiceName();
    
    /**
     * {@link jp.ossc.nimbus.service.websocket.jetty.PingSender PingSender}サービスのサービス名を設定する。<p>
     *
     * @param name PingSenderサービスのサービス名
     */
    public void setPingSenderServiceName(ServiceName name);
    
    /**
     * {@link jp.ossc.nimbus.service.websocket.jetty.PingSender PingSender}サービスのサービス名を取得する。<p>
     *
     * @return PingSenderサービスのサービス名
     */
    public ServiceName getPingSenderServiceName();
    
    /**
     * WebSocketへのリクエストをジャーナリングする{@link jp.ossc.nimbus.service.journal.Journal Journal}サービスのサービス名を設定する。<p>
     *
     * @param name Journalサービスのサービス名
     */
    public void setRequestJournalServiceName(ServiceName name);
    
    /**
     * WebSocketへのリクエストをジャーナリングする{@link jp.ossc.nimbus.service.journal.Journal Journal}サービスのサービス名を取得する。<p>
     *
     * @return Journalサービスのサービス名
     */
    public ServiceName getRequestJournalServiceName();
    
    /**
     * WebSocketへのリクエストをジャーナリングする際の{@link jp.ossc.nimbus.service.journal.EditorFinder EditorFinder}サービスのサービス名を設定する。<p>
     *
     * @param name EditorFinderサービスのサービス名
     */
    public void setRequestEditorFinderServiceName(ServiceName name);
    
    /**
     * WebSocketへのリクエストをジャーナリングする際の{@link jp.ossc.nimbus.service.journal.EditorFinder EditorFinder}サービスのサービス名を取得する。<p>
     *
     * @return EditorFinderサービスのサービス名
     */
    public ServiceName getRequestEditorFinderServiceName();
    
    /**
     * WebSocketへのリクエストをジャーナリングする時に、リクエスト通番を{@link jp.ossc.nimbus.service.context.Context Context}サービスから取得または設定する際のコンテキストキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_REQUEST_ID_KEY}。<br>
     *
     * @param key リクエスト通番のコンテキストキー名
     */
    public void setRequestIDKey(String key);
    
    /**
     * WebSocketへのリクエストをジャーナリングする時に、リクエスト通番を{@link jp.ossc.nimbus.service.context.Context Context}サービスから取得または設定する際のコンテキストキー名を取得する。<p>
     *
     * @return リクエスト通番のコンテキストキー名
     */
    public String getRequestIDKey();
    
    /**
     * WebSocketへのリクエストをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_REQUEST_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setRequestJournalKey(String key);
    
    /**
     * WebSocketへのリクエストをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getRequestJournalKey();
    
    /**
     * WebSocketへのリクエストのメッセージをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_REQUEST_MESSAGE_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setRequestMessageJournalKey(String key);
    
    /**
     * WebSocketへのリクエストのメッセージをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getRequestMessageJournalKey();
    
    /**
     * WebSocketへのリクエストのDataSetをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_REQUEST_DATASET_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setRequestDataSetJournalKey(String key);
    
    /**
     * WebSocketへのリクエストのDataSetをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getRequestDataSetJournalKey();
    
    /**
     * WebSocketへのリクエストのクライアントIDをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_ID_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setIdJournalKey(String key);
    
    /**
     * WebSocketへのリクエストのクライアントIDをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getIdJournalKey();
    
    /**
     * WebSocketへのリクエスト及び送信時の例外をジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_EXCEPTION_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setExceptionJournalKey(String key);
    
    /**
     * WebSocketへのリクエスト及び送信時の例外をジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getExceptionJournalKey();
    
    /**
     * WebSocketへの送信をジャーナリングする{@link jp.ossc.nimbus.service.journal.Journal Journal}サービスのサービス名を設定する。<p>
     *
     * @param name Journalサービスのサービス名
     */
    public void setSendJournalServiceName(ServiceName name);
    
    /**
     * WebSocketへの送信をジャーナリングする{@link jp.ossc.nimbus.service.journal.Journal Journal}サービスのサービス名を取得する。<p>
     *
     * @return Journalサービスのサービス名
     */
    public ServiceName getSendJournalServiceName();
    
    /**
     * WebSocketへの送信をジャーナリングする際の{@link jp.ossc.nimbus.service.journal.EditorFinder EditorFinder}サービスのサービス名を設定する。<p>
     *
     * @param name EditorFinderサービスのサービス名
     */
    public void setSendEditorFinderServiceName(ServiceName name);
    
    /**
     * WebSocketへの送信をジャーナリングする際の{@link jp.ossc.nimbus.service.journal.EditorFinder EditorFinder}サービスのサービス名を取得する。<p>
     *
     * @return EditorFinderサービスのサービス名
     */
    public ServiceName getSendEditorFinderServiceName();
    
    /**
     * WebSocketへの送信をジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_SEND_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setSendJournalKey(String key);
    
    /**
     * WebSocketへの送信をジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getSendJournalKey();
    
    /**
     * WebSocketへの送信メッセージをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_SEND_MESSAGE_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setSendMessageJournalKey(String key);
    
    /**
     * WebSocketへの送信メッセージをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getSendMessageJournalKey();
    
    /**
     * WebSocketへの送信DataSetをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_SEND_DATASET_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setSendDataSetJournalKey(String key);
    
    /**
     * WebSocketへの送信DataSetをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getSendDataSetJournalKey();
    
    /**
     * WebSocketへの送信バイトをジャーナリングする際のジャーナルキー名を設定する。<p>
     * デフォルトは、{@link #DEFAULT_SEND_BYTES_JOURNAL_KEY}。<br>
     *
     * @param key ジャーナルキー名
     */
    public void setSendBytesJournalKey(String key);
    
    /**
     * WebSocketへの送信バイトをジャーナリングする際のジャーナルキー名を取得する。<p>
     *
     * @return ジャーナルキー名
     */
    public String getSendBytesJournalKey();
    
    /**
     * WebSocketへのリクエストをジャーナリングする際にリクエスト通番を発行する{@link jp.ossc.nimbus.service.sequence.Sequence Sequence}サービスのサービス名を設定する。<p>
     *
     * @param name Sequenceサービスのサービス名
     */
    public void setSequenceServiceName(ServiceName name);
    
    /**
     * WebSocketへのリクエストをジャーナリングする際にリクエスト通番を発行する{@link jp.ossc.nimbus.service.sequence.Sequence Sequence}サービスのサービス名を取得する。<p>
     *
     * @return Sequenceサービスのサービス名
     */
    public ServiceName getSequenceServiceName();
    
    /**
     * WebSocketへのリクエストをジャーナリングする際にリクエスト通番を取得または設定する{@link jp.ossc.nimbus.service.context.Context Context}サービスのサービス名を設定する。<p>
     *
     * @param name Contextサービスのサービス名
     */
    public void setContextServiceName(ServiceName name);
    
    /**
     * WebSocketへのリクエストをジャーナリングする際にリクエスト通番を取得または設定する{@link jp.ossc.nimbus.service.context.Context Context}サービスのサービス名を取得する。<p>
     *
     * @return Contextサービスのサービス名
     */
    public ServiceName getContextServiceName();
    
    /**
     * WebSocketで送受信するデータの文字エンコーディングを設定する。<p>
     * デフォルトは、UTF-8。<br>
     *
     * @param encoding 文字エンコーディング
     */
    public void setCharacterEncoding(String encoding);
    
    /**
     * WebSocketで送受信するデータの文字エンコーディングを取得する。<p>
     *
     * @return 文字エンコーディング
     */
    public String getCharacterEncoding();
    
    /**
     * WebSocketへの認証リクエストを処理する{@link jp.ossc.nimbus.service.websocket.Authenticator Authenticator}サービスのサービス名を設定する。<p>
     *
     * @param name Authenticatorサービスのサービス名
     */
    public void setAuthenticatorServiceName(ServiceName name);
    
    /**
     * WebSocketへの認証リクエストを処理する{@link jp.ossc.nimbus.service.websocket.Authenticator Authenticator}サービスのサービス名を取得する。<p>
     *
     * @return Authenticatorサービスのサービス名
     */
    public ServiceName getAuthenticatorServiceName();
    
    /**
     * WebSocketへの送信モードを設定する。<p>
     * デフォルトは、{@link #SEND_MODE_STRING}。<br>
     *
     * @param mode 送信モード
     * @see #SEND_MODE_STRING
     * @see #SEND_MODE_BINARY
     */
    public void setSendMode(int mode) throws IllegalArgumentException;
    
    /**
     * WebSocketへの送信モードを取得する。<p>
     *
     * @return 送信モード
     */
    public int getSendMode();
    
    /**
     * WebSocketへの送信DataSetに配信ヘッダを付与するかどうかを設定する。<p>
     * デフォルトは、trueで、付与する。<br>
     *
     * @param isAppend 付与する場合は、true
     */
    public void setAppendPublishHeader(boolean isAppend);
    
    /**
     * WebSocketへの送信DataSetに配信ヘッダを付与するかどうかを判定する。<p>
     *
     * @return trueの場合、付与する
     */
    public boolean isAppendPublishHeader();
    
    /**
     * WebSocketへの送信DataSetに付与する配信ヘッダのヘッダ名を設定する。<p>
     * デフォルトは、{@link #PUBLISH_HEADER_DEFAULT_NAME}。<br>
     *
     * @param name 配信ヘッダのヘッダ名
     */
    public void setPublishHeaderName(String name);
    
    /**
     * WebSocketへの送信DataSetに付与する配信ヘッダのヘッダ名を取得する。<p>
     *
     * @return 配信ヘッダのヘッダ名
     */
    public String getPublishHeaderName();
    
    /**
     * サブジェクトを複数持った{@link jp.ossc.nimbus.service.publish.Message Message}を送信する場合に、サブジェクト毎に送信するかどうかを設定する。<p>
     * デフォルトは、trueで、サブジェクト毎に送信する。<br>
     *
     * @param isSend サブジェクト毎に送信する場合は、true
     */
    public void setSendBySubject(boolean isSend);
    
    /**
     * サブジェクトを複数持った{@link jp.ossc.nimbus.service.publish.Message Message}を送信する場合に、サブジェクト毎に送信するかどうかを判定する。<p>
     *
     * @return trueの場合、サブジェクト毎に送信する
     */
    public boolean isSendBySubject();
    
    /**
     * 登録されているサブジェクトを取得する。<p>
     *
     * @return 登録されているサブジェクト
     */
    public Set<String> getSubjects();
    
    /**
     * WebSocketへのバイナリリクエストの最大サイズを設定する。<p>
     * デフォルトは、0で指定しない。<br>
     *
     * @param size 最大サイズ
     */
    public void setMaxBinaryMessageSize(int size);
    
    /**
     * WebSocketへのバイナリリクエストの最大サイズを取得する。<p>
     *
     * @return 最大サイズ
     */
    public int getMaxBinaryMessageSize();
    
    /**
     * WebSocketへの文字列リクエストの最大サイズを設定する。<p>
     * デフォルトは、0で指定しない。<br>
     *
     * @param size 最大サイズ
     */
    public void setMaxTextMessageSize(int size);
    
    /**
     * WebSocketへの文字列リクエストの最大サイズを取得する。<p>
     *
     * @return 最大サイズ
     */
    public int getMaxTextMessageSize();
    
    /**
     * WebSocketの無通信状態の許容時間[ms]を設定する。<p>
     * デフォルトは、0で指定しない。<br>
     *
     * @param ms 無通信状態の許容時間[ms]
     */
    public void setMaxIdleTime(int ms);
    
    /**
     * WebSocketの無通信状態の許容時間[ms]を取得する。<p>
     *
     * @return 無通信状態の許容時間[ms]
     */
    public int getMaxIdleTime();
    
    /**
     * WebSocketへのリクエストの変換に失敗した場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_REQUEST_CONVERT_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setRequestConvertErrorMessageId(String id);
    
    /**
     * WebSocketへのリクエストの変換に失敗した場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getRequestConvertErrorMessageId();
    
    /**
     * WebSocketへのリクエストが未知のリクエストだった場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_UNKNOWN_REQUEST_OBJECT_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setUnknownRequestObjectErrorMessageId(String id);
    
    /**
     * WebSocketへのリクエストが未知のリクエストだった場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getUnknownRequestObjectErrorMessageId();
    
    /**
     * WebSocketへのリクエストが未認証で行われた場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_NO_AUTHENTICATED_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setNoAuthenticatedErrorMessageId(String id);
    
    /**
     * WebSocketへのリクエストが未認証で行われた場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getNoAuthenticatedErrorMessageId();
    
    /**
     * WebSocketへのリクエスト処理でエラーが発生した場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_REQUEST_PROCESS_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setRequestProcessErrorMessageId(String id);
    
    /**
     * WebSocketへのリクエスト処理でエラーが発生した場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getRequestProcessErrorMessageId();
    
    /**
     * WebSocketへの送信メッセージの変換に失敗した場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_SEND_MESSAGE_CONVERT_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setSendMessageConvertErrorMessageId(String id);
    
    /**
     * WebSocketへの送信メッセージの変換に失敗した場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getSendMessageConvertErrorMessageId();
    
    /**
     * WebSocketへの送信に失敗した場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_SEND_MESSAGE_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setSendMessageErrorMessageId(String id);
    
    /**
     * WebSocketへの送信に失敗した場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getSendMessageErrorMessageId();
    
    /**
     * WebSocketへのPONGの送信に失敗した場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_SEND_PONG_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setSendPongErrorMessageId(String id);
    
    /**
     * WebSocketへのPONGの送信に失敗した場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getSendPongErrorMessageId();
    
    /**
     * ログアウト処理に失敗した場合の、ログメッセージIDを設定する。<p>
     * デフォルトは、{@link #MSG_ID_LOGOUT_ERROR}。<br>
     *
     * @param id ログメッセージID
     */
    public void setLogoutErrorMessageId(String id);
    
    /**
     * ログアウト処理に失敗した場合の、ログメッセージIDを取得する。<p>
     *
     * @return ログメッセージID
     */
    public String getLogoutErrorMessageId();
    
    /**
     * WebSocketへのリクエストの変換に失敗した場合の、WebSocket終了コードを設定する。<p>
     * デフォルトは、1003。<br>
     *
     * @param code WebSocket終了コード
     */
    public void setCloseCodeForRequestConvertError(int code);
    
    /**
     * WebSocketへのリクエストの変換に失敗した場合の、WebSocket終了コードを取得する。<p>
     *
     * @return WebSocket終了コード
     */
    public int getCloseCodeForRequestConvertError();
    
    /**
     * WebSocketへのリクエストが未認証で行われた場合の、WebSocket終了コードを設定する。<p>
     * デフォルトは、1008。<br>
     *
     * @param code WebSocket終了コード
     */
    public void setCloseCodeForNoAuthenticatedError(int code);
    
    /**
     * WebSocketへのリクエストが未認証で行われた場合の、WebSocket終了コードを取得する。<p>
     *
     * @return WebSocket終了コード
     */
    public int getCloseCodeForNoAuthenticatedError();
    
    /**
     * WebSocketへのリクエストが未知のリクエストだった場合の、WebSocket終了コードを設定する。<p>
     * デフォルトは、1011。<br>
     *
     * @param code WebSocket終了コード
     */
    public void setCloseCodeForUnknownRequestObjectError(int code);
    
    /**
     * WebSocketへのリクエストが未知のリクエストだった場合の、WebSocket終了コードを取得する。<p>
     *
     * @return WebSocket終了コード
     */
    public int getCloseCodeForUnknownRequestObjectError();
    
    /**
     * WebSocketへのリクエスト処理でエラーが発生した場合の、WebSocket終了コードを設定する。<p>
     * デフォルトは、1011。<br>
     *
     * @param code WebSocket終了コード
     */
    public void setCloseCodeForRequestProcessError(int code);
    
    /**
     * WebSocketへのリクエスト処理でエラーが発生した場合の、WebSocket終了コードを取得する。<p>
     *
     * @return WebSocket終了コード
     */
    public int getCloseCodeForRequestProcessError();
    
    /**
     * WebSocketへの送信に失敗した場合の、WebSocket終了コードを設定する。<p>
     * デフォルトは、1001。<br>
     *
     * @param code WebSocket終了コード
     */
    public void setCloseCodeForSendMessageError(int code);
    
    /**
     * WebSocketへの送信に失敗した場合の、WebSocket終了コードを取得する。<p>
     *
     * @return WebSocket終了コード
     */
    public int getCloseCodeForSendMessageError();
    
    /**
     * このWebSocketに接続しているクライアントIDを取得する。<p>
     *
     * @return クライアントID
     */
    public String getId();
    
    /**
     * このWebSocketのサブプロトコルを取得する。<p>
     *
     * @return サブプロトコル
     */
    public String getProtocol();
    
    /**
     * このWebSocketへのリクエスト回数を取得する。<p>
     *
     * @return リクエスト回数
     */
    public long getReceiveRequestCount();
    
    /**
     * このWebSocketへのメッセージ受信回数を取得する。<p>
     *
     * @return メッセージ受信回数
     */
    public long getReceiveMessageCount();
    
    /**
     * このWebSocketからのメッセージ送信回数を取得する。<p>
     *
     * @return メッセージ送信回数
     */
    public long getSendMessageCount();
    
    /**
     * カウンタをリセットする。<p>
     */
    public void resetCount();
}