Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        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();
                }
            }
        }