private void ReadCallback(IAsyncResult ar) { var content = string.Empty; var state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; try { int bytesRead = handler.EndReceive(ar); if (bytesRead > 0) { state.sb.Append(Encoding.UTF8.GetString(state.buffer, 0, bytesRead)); content = state.sb.ToString(); // 改行まで読んだら if (content.IndexOf("\n") > -1) { log.Value = "Received: " + content.Replace("\n", ""); broadcastContent = new BroadcastContent(); broadcastContent.Message = content; broadcastContent.from_id = state.id; state.sb.Length = 0; handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } else { handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state); } } if (bytesRead == 0) { lock (lockObjectConnection) { log.Value = "Disconnected."; activeConnections.Remove(state); connectedCount.Value = activeConnections.Count; } } } catch (Exception e) { lock (lockObjectConnection) { log.Value = e.ToString(); activeConnections.Remove(state); connectedCount.Value = activeConnections.Count; } } }
private void SendMessageThread() { while (runSendDataThread == true) { try { lock (lockObjectConnection) { if (broadcastContent != null) { foreach (StateObject each in activeConnections) { if (!doBroadcast || each.id != broadcastContent.from_id) { Send(each.workSocket, broadcastContent.Message); } } broadcastContent = null; } } } catch (Exception e) { log.Value = e.ToString(); } Thread.Sleep(1000); } lock (lockObjectConnection) { foreach (StateObject each in activeConnections) { each.workSocket.Close(); } } }