/*------------------------------------------------------------------------- * クライアントに送信 * ---------------------------------------------------------------------------*/ public void Send(tcp_client_base client, string str) { if (client == null) { return; } lock (m_sync_socket){ client.Send(str); } }
/*------------------------------------------------------------------------- * BeginAcceptのコールバック * ---------------------------------------------------------------------------*/ private void accept_callback(IAsyncResult ar) { //接続要求を受け入れる Socket soc = null; try{ lock (m_sync_socket){ soc = m_server.EndAccept(ar); } }catch { this.Close(); return; } // tcp_client_baseの作成 tcp_client_base client = this.CreateClient(soc); // 最大数を超えていないか if (m_client_list.Count >= m_max_client) { client.Close(); } else { // コレクションに追加 lock (m_sync_socket){ m_client_list.Add(client); } // イベントハンドラの追加 client.Disconnected += new EventHandler(client_disconnected); client.ReceivedData += new ReceivedDataEventHandler(client_received_data); // イベントを発生 OnAcceptedClient(new ServerEventArgs(client)); // データ受信開始 if (!client.is_closed) { client.StartReceive(); } } // 接続要求施行を再開する m_server.BeginAccept(new AsyncCallback(accept_callback), null); }
/*------------------------------------------------------------------------- * * ---------------------------------------------------------------------------*/ public ReceivedDataEventArgs(tcp_client_base c, string str) { m_client = c; m_received_string = str; }
/*------------------------------------------------------------------------- * * ---------------------------------------------------------------------------*/ public ServerEventArgs(tcp_client_base c) { m_client = c; }