/// <summary> /// 全てのクライアントとの接続を閉じる。 /// </summary> public override void CloseAllClients() { // すべてのクライアントを閉じる lock (((System.Collections.ICollection)_AcceptedClients).SyncRoot) { // foreachは途中で要素数が変わるとうまく動かないので、使わないようにする for (int i = (_AcceptedClients.Count - 1); i >= 0; --i) { BaseCommunication client = _AcceptedClients[i]; CloseClient(client); } } }
/// <summary> /// 全てのクライアントにデータを送信する。 /// </summary> /// <param name="data">書き込むバッファ。</param> /// <param name="offset">書き込むバッファのオフセット。</param> /// <param name="size">書き込むバッファの長さ。</param> public override void SendToAllClients(byte[] data, int offset, int size) { // すべてのクライアントに送信 lock (((System.Collections.ICollection)_AcceptedClients).SyncRoot) { // foreachは途中で要素数が変わるとうまく動かないので、使わないようにする for (int i = (_AcceptedClients.Count - 1); i >= 0; --i) { BaseCommunication client = _AcceptedClients[i]; client.Write(data, offset, size); } } }
/// <summary> /// 指定したクライアントとの接続を閉じる。 /// </summary> /// <param name="client">接続を閉じたいクライアント。</param> public override void CloseClient(BaseCommunication client) { // 切断済みなら飛ばす if (!client.IsConnect) { return; } // リストから取り除く _AcceptedClients.Remove(client); // イベントハンドラを外す client.Disconnecting -= Client_Disconnecting; client.DataReceived -= Client_DataReceived; client.ErrorOccurred -= Client_ErrorOccurred; // 処分 client.Disconnect(); client.Dispose(); }
/// <summary> /// 指定したクライアントとの接続を閉じる。 /// </summary> /// <param name="client">クライアント。</param> public abstract void CloseClient(BaseCommunication client);
/// <summary> /// DataReceivedEventArgs クラスのコンストラクタ。 /// </summary> /// <param name="communication">データ受信元との通信。</param> public DataReceivedEventArgs(BaseCommunication communication) { Communication = communication; }
/// <summary> /// CommunicationEventArgs クラスのコンストラクタ。 /// </summary> /// <param name="communication">関係する通信。</param> public CommunicationEventArgs(BaseCommunication communication) { Communication = communication; }
/// <summary> /// CommunicationErrorEventArgs クラスのコンストラクタ。 /// </summary> /// <param name="communication">エラー発生した通信。</param> /// <param name="exception">発生した例外。</param> public CommunicationErrorEventArgs(BaseCommunication communication, Exception exception) { Communication = communication; Exception = exception; }