Exemplo n.º 1
0
        /// <summary>
        /// 处理 ClientExitNetwork 消息。
        /// </summary>
        /// <param name="args">处理时所需要的信息。</param>
        private void HandleClientExitNetwork(HandleMessageArgs args)
        {
            Logger.Log("收到消息: 客户端离开分布网络。");
            KEndPoint remoteEndPoint = args.Message.Header.SourceEndPoint;
            // 只是简单的移除
            int clItemIndex;
            ConnectionListItem item = ConnectionList.FindConnectionListItem(remoteEndPoint, out clItemIndex);

            if (item != null)
            {
                Logger.Log("找到项目并移除。");
                lock (ConnectionList)
                {
                    // 一样,应该不用担心前面的项被移动到后面去导致索引错误的事情吧
                    ConnectionList.RemoveAt(clItemIndex);
                    EventHelper.RaiseEvent(ConnectionListChanged, this, EventArgs.Empty);
                }
            }

            Logger.Log("转发消息。");
            // 转发
            BroadcastMessage(args.Message);
        }