<Unknow>
nnhy authored at 2010-12-27 07:28:22
7.72 KiB
X
//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Net;
//using NewLife.Messaging;
//using NewLife.Net.Common;
//using NewLife.PeerToPeer.Messages;

//namespace NewLife.PeerToPeer.Client
//{
//    /// <summary>
//    /// 对等应用程序
//    /// </summary>
//    public class P2PClient : MessageServer
//    {
//        #region 属性
//        private Guid _Token;
//        /// <summary>唯一本地标识</summary>
//        public Guid Token
//        {
//            get { return _Token; }
//            set { _Token = value; }
//        }

//        private List<IPEndPoint> _Trackers;
//        /// <summary>跟踪服务器地址</summary>
//        public List<IPEndPoint> Trackers
//        {
//            get { return _Trackers; }
//            set { _Trackers = value; }
//        }

//        private List<IPAddress> _Private;
//        /// <summary>我的私有地址</summary>
//        public List<IPAddress> Private
//        {
//            get { return _Private; }
//            set { _Private = value; }
//        }

//        private IPEndPoint _Public;
//        /// <summary>我的公有地址</summary>
//        public IPEndPoint Public
//        {
//            get { return _Public; }
//            set { _Public = value; }
//        }

//        private Dictionary<Guid, Peer> _Friends;
//        /// <summary>好友节点 TKey Public-Private</summary>
//        public Dictionary<Guid, Peer> Friends
//        {
//            get
//            {
//                if (_Friends == null) _Friends = new Dictionary<Guid, Peer>();
//                return _Friends;
//            }
//            set { _Friends = value; }
//        }

//        private DateTime _FriendUpdateTime;
//        /// <summary>好友最后更新时间</summary>
//        public DateTime FriendUpdateTime
//        {
//            get { return _FriendUpdateTime; }
//            set { _FriendUpdateTime = value; }
//        }

//        //private Thread _PingThread;
//        ///// <summary>Ping线程</summary>
//        //public Thread PingThread
//        //{
//        //    get
//        //    {
//        //        if (_PingThread == null)
//        //            _PingThread = new Thread(new ThreadStart(Ping));
//        //        return _PingThread;
//        //    }
//        //    set { _PingThread = value; }
//        //}
//        #endregion

//        #region 开始/停止
//        /// <summary>
//        /// 开始
//        /// </summary>
//        public void Start()
//        {
//            Private = NetHelper.GetIPV4();
//        }

//        /// <summary>
//        /// 停止
//        /// </summary>
//        public void Stop()
//        {
//            ////结束Ping
//            //if (_PingThread != null) _PingThread.Abort();
//        }
//        #endregion

//        #region 收发消息
//        /// <summary>
//        /// 消息到达时
//        /// </summary>
//        /// <param name="sender"></param>
//        /// <param name="e"></param>
//        protected override void OnReceived(object sender, EventArgs<Message, Stream> e)
//        {
//            P2PMessage msg = e.Arg1 as P2PMessage;
//            if (msg == null) return;

//            switch (msg.MessageType)
//            {
//                case MessageTypes.Unkown:
//                    break;
//                //case MessageTypes.Test:
//                //    OnTest(e.Arg1 as TestMessage, e.Arg2);
//                //    break;
//                //case MessageTypes.Ping:
//                //    OnPing(e.Arg1 as PingMessage, e.Arg2);
//                //    break;
//                //case MessageTypes.Track:
//                //    OnTrack(e.Arg1 as TrackMessage, e.Arg2);
//                //    break;
//                default:
//                    //TestMessage.Response response = new TestMessage.Response();
//                    //response.Str = "无法识别该消息!";
//                    //response.WritePacket(e.Arg2);

//                    WriteLog("未处理的消息:{0}", msg.MessageType);
//                    break;
//            }
//        }
//        #endregion

//        #region 邀请
//        /// <summary>
//        /// 邀请指定地址成为我的好友
//        /// </summary>
//        /// <param name="ep"></param>
//        public void Invite(IPEndPoint ep)
//        {
//            //Peer peer = new ClientPeer(this);
//            //peer.Public = ep;
//            //peer.MessageArrived += delegate(Object sender, MessageArrivedEventArgs e)
//            //{
//            //    Console.WriteLine("收到消息!");

//            //    if (e.Message is InviteMessage.Response)
//            //    {
//            //        InviteMessage.Response message = e.Message as InviteMessage.Response;
//            //        peer.Token = e.Token;
//            //        peer.Private = message.Private;
//            //        AddFriend(peer);
//            //        AddFriends(message.Friends);
//            //        Console.WriteLine("邀请好友:" + e.Token);
//            //    }
//            //};
//            //peer.Public = ep;
//            //Invite(peer);
//        }

//        /// <summary>
//        /// 邀请
//        /// </summary>
//        /// <param name="peer"></param>
//        public void Invite(Peer peer)
//        {
//            InviteMessage msg = new InviteMessage();
//            //msg.Private = Private;

//            //peer.Send(msg, false);
//        }
//        #endregion

//        #region 好友
//        /// <summary>
//        /// 查找好友,关加入好友列表
//        /// </summary>
//        /// <returns></returns>
//        public bool AddFriend(Peer Friend)
//        {
//            if (Friend == null) return false;
//            //String TKey = Friend.Public.Address.ToString();
//            //if (null == Friends.Find(delegate(Peer item)
//            //{
//            //    if (Friend.Public == item.Public && Friend.Private == item.Private)
//            //        return true;
//            //    return false;
//            //}))
//            if (Find(Friend.Token) == null)
//            {
//                Friends.Add(Friend.Token, Friend);
//                return true;
//            }
//            return false;
//        }

//        /// <summary>
//        /// 添加远程好友列表
//        /// </summary>
//        /// <param name="friends"></param>
//        public void AddFriends(Dictionary<Guid, Peer> friends)
//        {
//            if (friends == null || friends.Count == 0) return;
//            foreach (Peer item in friends.Values)
//            {
//                AddFriend(item);
//            }
//        }

//        /// <summary>
//        /// 根据Guid找好友
//        /// </summary>
//        /// <param name="guid">Guid</param>
//        /// <returns></returns>
//        public Peer Find(Guid guid)
//        {
//            if (Friends == null || Friends.Count == 0) return null;
//            if (Friends.ContainsKey(guid))
//                return Friends[guid];

//            return null;
//        }

//        /// <summary>
//        /// 移除连接超时的好友
//        /// </summary>
//        /// <returns></returns>
//        public bool RemoveTimeoutFriend()
//        {
//            return true;
//        }
//        #endregion

//        #region 重载
//        ///// <summary>
//        ///// 已重载。
//        ///// </summary>
//        ///// <returns></returns>
//        //public override string ToString()
//        //{
//        //    return Name;
//        //}
//        #endregion
//    }
//}