コード例 #1
0
        /// <summary>设置父级DNS</summary>
        /// <param name="parents"></param>
        public virtual void SetParents(String parents)
        {
            var ss = parents.Split(",");

            if (ss == null || ss.Length < 1)
            {
                return;
            }

            var ps   = Parents;
            var list = new HashSet <String>(ps.Select(p => p.ToString()), StringComparer.OrdinalIgnoreCase);

            //ps.Clear();

            for (int i = ss.Length - 1; i >= 0; i--)
            {
                var uri = new NetUri(ss[i]);
                if (uri.Port <= 0)
                {
                    uri.Port = 53;
                }
                if (!list.Contains(uri.ToString()))
                {
                    if (uri.Address.IsAny())
                    {
                        WriteLog("配置的父级DNS[{0}]有误,任意地址不能作为父级DNS地址。", uri);
                        continue;
                    }
                    ps.Insert(0, uri);
                    list.Add(uri.ToString());
                }
            }
        }
コード例 #2
0
        void Connect()
        {
            _Client = null;

            var uri  = new NetUri(cbAddr.Text);
            var cfg  = Setting.Current;
            var mode = cbMode.Text;

            var ac = new LinkClient(uri.ToString())
            {
                Log        = cfg.ShowLog ? XTrace.Log : Logger.Null,
                EncoderLog = cfg.ShowEncoderLog ? XTrace.Log : Logger.Null
            };

            //ac.Received += OnReceived;
            ac.UserName     = cfg.UserName;
            ac.Password     = cfg.Password;
            ac.ActionPrefix = mode;

            //ac.Encrypted = cfg.Encrypted;
            //ac.Compressed = cfg.Compressed;

            if (!ac.Open())
            {
                return;
            }

            ac.CreateCallback = sc =>
            {
                sc.Log        = cfg.ShowLog ? XTrace.Log : Logger.Null;
                sc.LogSend    = cfg.ShowSend;
                sc.LogReceive = cfg.ShowReceive;
            };

            "已连接服务器".SpeechTip();

            _Client = ac;

            pnlSetting.Enabled = false;
            pnlAction.Enabled  = true;
            btnConnect.Text    = "关闭";

            // 添加地址
            cfg.AddAddresss(uri.ToString());

            cfg.Save();

            BizLog = TextFileLog.Create("DeviceLog");
        }
コード例 #3
0
        /// <summary>添加服务器</summary>
        /// <param name="uri"></param>
        public IApiServer Add(NetUri uri)
        {
            Type type;

            if (!Providers.TryGetValue(uri.Type + "", out type))
            {
                return(null);
            }

            var svr = type.CreateInstance() as IApiServer;

            if (svr != null)
            {
                svr.Provider = this;
                svr.Log      = Log;

                if (!svr.Init(uri.ToString()))
                {
                    return(null);
                }
            }

            Servers.Add(svr);

            return(svr);
        }
コード例 #4
0
        private void btnSend_Click(Object sender, EventArgs e)
        {
            if (_Client == null || !_Client.Active)
            {
                return;
            }

            var count = (Int32)numThreads.Value;

            if (count <= cs.Count)
            {
                return;
            }

            //var sc = _Client.Client.GetService<ISocketClient>();
            //if (sc == null) return;

            var uri = new NetUri(cbAddr.Text);

            Task.Run(() =>
            {
                var cc = _Client;
                for (var i = 0; i < count; i++)
                {
                    var ac = new LinkClient(uri.ToString())
                    {
                        //ac.Received += OnReceived;

                        UserName     = cc.UserName,
                        Password     = cc.Password,
                        ActionPrefix = cc.ActionPrefix
                    };

                    //ac.Encrypted = cc.Encrypted;
                    //ac.Compressed = cc.Compressed;

                    cs.Add(ac);

                    Task.Run(() =>
                    {
                        for (var k = 0; k < 10; k++)
                        {
                            if (ac.Open())
                            {
                                break;
                            }
                            Thread.Sleep(1000);
                        }

                        //// 共用统计对象
                        //if (ac.Active)
                        //{
                        //    var sc2 = ac.Client.GetService<ISocketClient>();
                        //    sc2.StatSend = sc.StatSend;
                        //    sc2.StatReceive = sc.StatReceive;
                        //}
                    });
                }
            });
        }
コード例 #5
0
        /// <summary>添加服务器</summary>
        /// <param name="uri"></param>
        public void Add(NetUri uri)
        {
            Type type = null;

            if (Providers.TryGetValue(uri.Protocol, out type))
            {
                var svr = type.CreateInstance() as IApiServer;
                if (svr.Init(uri.ToString()))
                {
                    Servers.Add(svr);
                }
            }
        }
コード例 #6
0
        void Connect()
        {
            _Client = null;

            var uri  = new NetUri(cbAddr.Text);
            var cfg  = Setting.Current;
            var mode = cbMode.Text;

            var url = uri.ToString();
            var ac  = mode == "Device" ? new DeviceClient(url) : new LinkClient(url)
            {
                Log        = cfg.ShowLog ? XTrace.Log : Logger.Null,
                EncoderLog = cfg.ShowEncoderLog ? XTrace.Log : Logger.Null
            };

            ac.UserName     = cfg.UserName;
            ac.Password     = cfg.Password;
            ac.ActionPrefix = mode;

            if (!ac.Open())
            {
                return;
            }

            "已连接服务器".SpeechTip();

            _Client = ac;

            pnlSetting.Enabled = false;
            pnlAction.Enabled  = true;
            btnConnect.Text    = "关闭";

            // 添加地址
            cfg.AddAddresss(uri.ToString());

            cfg.Save();

            //BizLog = TextFileLog.Create("DeviceLog");
        }
コード例 #7
0
ファイル: ApiServer.cs プロジェクト: LX0/X_NET40
        /// <summary>添加服务器</summary>
        /// <param name="uri"></param>
        public IApiServer Use(NetUri uri)
        {
            var svr = new ApiNetServer();

            if (!svr.Init(uri.ToString()))
            {
                return(null);
            }

            Server = svr;

            return(svr);
        }
コード例 #8
0
ファイル: NetUriTests.cs プロジェクト: hvppy/X
        public void TestIPv6()
        {
            var addr = IPAddress.IPv6Loopback;

            Assert.Equal("::1", addr + "");

            var ep = new IPEndPoint(addr, 80);

            Assert.Equal("[::1]:80", ep + "");

            var uri = new NetUri(NetType.Tcp, ep);

            Assert.Equal("Tcp://[::1]:80", uri.ToString());
            Assert.Equal(ep, uri.EndPoint);
            Assert.True(uri.IsTcp);

            uri.Port = 0;
            Assert.Equal("Tcp://::1", uri + "");

            var uri2 = new NetUri("http://[::1]:80");

            Assert.Equal(NetType.Http, uri2.Type);
            Assert.False(uri2.IsUdp);
            Assert.Null(uri2.Host);
            Assert.Equal(IPAddress.IPv6Loopback, uri2.Address);
            Assert.Equal(80, uri2.Port);
            Assert.Equal("Http://[::1]:80", uri2.ToString());

            var uri3 = new NetUri("wss://::1");

            Assert.Equal(NetType.WebSocket, uri3.Type);
            Assert.Null(uri3.Host);
            Assert.Equal(IPAddress.IPv6Loopback, uri3.Address);
            Assert.Equal(443, uri3.Port);
            Assert.Equal("wss://[::1]:443", uri3.ToString());

            var uri4 = new NetUri();

            uri4.Parse("ws://[240e:e0:9930:2100:9914:b410:c7d8:c0a6]");
            Assert.Equal(NetType.WebSocket, uri4.Type);
            Assert.Null(uri4.Host);
            Assert.Equal("240e:e0:9930:2100:9914:b410:c7d8:c0a6", uri4.Address + "");
            Assert.Equal(80, uri4.Port);
            Assert.Equal("ws://[240e:e0:9930:2100:9914:b410:c7d8:c0a6]:80", uri4.ToString());
        }
コード例 #9
0
        private void btnSend_Click(Object sender, EventArgs e)
        {
            if (_Client == null || !_Client.Active)
            {
                return;
            }

            var count = (Int32)numThreads.Value;

            if (count <= cs.Count)
            {
                return;
            }

            var uri = new NetUri(cbAddr.Text);

            Task.Run(() =>
            {
                var cc = _Client;
                for (var i = 0; i < count; i++)
                {
                    var ac = new LinkClient(uri.ToString())
                    {
                        UserName     = cc.UserName,
                        Password     = cc.Password,
                        ActionPrefix = cc.ActionPrefix
                    };

                    cs.Add(ac);

                    Task.Run(() =>
                    {
                        for (var k = 0; k < 10; k++)
                        {
                            if (ac.Open())
                            {
                                break;
                            }
                            Thread.Sleep(1000);
                        }
                    });
                }
            });
        }
コード例 #10
0
ファイル: ApiServer.cs プロジェクト: stylinlin/X
        /// <summary>添加服务器</summary>
        /// <param name="uri"></param>
        public IApiServer Add(NetUri uri)
        {
            Type type;

            if (!Providers.TryGetValue(uri.Protocol, out type))
            {
                return(null);
            }

            var svr = type.CreateInstance() as IApiServer;

            if (svr != null && !svr.Init(uri.ToString()))
            {
                return(null);
            }

            Servers.Add(svr);

            return(svr);
        }
コード例 #11
0
        void Connect()
        {
            _Server = null;
            _Client = null;

            var uri = new NetUri(cbAddr.Text);
            // 网络封包
            var idx  = cbPacket.SelectedIndex;
            var fact = idx < 0 ? null : _packets.Result[idx].CreateInstance() as IPacketFactory;

            _Packet = fact.Create();

            var cfg = MessageConfig.Current;

            switch (cbMode.Text)
            {
            case "服务端":
                var svr = new NetServer();
                svr.Log       = cfg.ShowLog ? XTrace.Log : Logger.Null;
                svr.SocketLog = cfg.ShowSocketLog ? XTrace.Log : Logger.Null;
                svr.Port      = uri.Port;
                if (uri.IsTcp || uri.IsUdp)
                {
                    svr.ProtocolType = uri.Type;
                }
                svr.MessageReceived += OnReceived;

                svr.LogSend    = cfg.ShowSend;
                svr.LogReceive = cfg.ShowReceive;

                // 加大会话超时时间到1天
                svr.SessionTimeout = 24 * 3600;

                svr.SessionPacket = fact;

                svr.Start();

                "正在监听{0}".F(svr.Port).SpeechTip();

                if (uri.Port == 0)
                {
                    uri.Port = svr.Port;
                }
                _Server = svr;
                break;

            case "客户端":
                var client = uri.CreateRemote();
                client.Log              = cfg.ShowLog ? XTrace.Log : Logger.Null;
                client.MessageReceived += OnReceived;

                client.LogSend    = cfg.ShowSend;
                client.LogReceive = cfg.ShowReceive;

                client.Packet = _Packet;

                client.Open();

                "已连接服务器".SpeechTip();

                if (uri.Port == 0)
                {
                    uri.Port = client.Port;
                }
                _Client = client;
                break;

            default:
                return;
            }

            pnlSetting.Enabled = false;
            btnConnect.Text    = "关闭";

            // 添加地址
            var addr = uri.ToString();
            var list = cfg.Address.Split(";").ToList();

            if (!list.Contains(addr))
            {
                list.Insert(0, addr);
                cfg.Address = list.Join(";");
            }

            cfg.Save();

            _timer = new TimerX(ShowStat, null, 5000, 5000);

            BizLog = TextFileLog.Create("MessageLog");
        }
コード例 #12
0
        void Connect()
        {
            _Server = null;
            _Client = null;

            var port = (Int32)numPort.Value;
            var uri  = new NetUri(cbAddr.ActiveText);

            var cfg = ApiConfig.Current;
            var log = BizLog;

            switch (cbMode.Active)
            {
            case 0:     //"服务端":
                var svr = new ApiServer(port)
                {
                    Log        = cfg.ShowLog ? log : Logger.Null,
                    EncoderLog = cfg.ShowEncoderLog ? log : Logger.Null
                };

                if (cfg.ShowSend || cfg.ShowReceive)
                {
                    var ns = svr.Server as NetServer;
                    ns.Log        = log;
                    ns.LogSend    = cfg.ShowSend;
                    ns.LogReceive = cfg.ShowReceive;
                }

                svr.Register <MyApiController>();
                svr.Start();

                "正在监听{0}".F(port).SpeechTip();

                _Server = svr;
                break;

            case 1:     //"客户端":
                var client = new ApiClient(uri + "")
                {
                    Log        = cfg.ShowLog ? log : Logger.Null,
                    EncoderLog = cfg.ShowEncoderLog ? log : Logger.Null
                };

                //if (cfg.ShowSend || cfg.ShowReceive)
                //{
                //    var ct = client.Client;
                //    ct.Log = log;
                //    ct.LogSend = cfg.ShowSend;
                //    ct.LogReceive = cfg.ShowReceive;
                //}

                _Client = client;
                client.Open();
                // 连接成功后拉取Api列表
                GetApiAll();

                "已连接服务器".SpeechTip();

                break;

            default:
                return;
            }

            // pnlSetting.Enabled = false;
            btnConnect.Label = "关闭";

            // 添加地址
            var addr = uri.ToString();
            var list = cfg.Address.Split(";").ToList();

            if (!list.Contains(addr))
            {
                list.Insert(0, addr);
                cfg.Address = list.Join(";");
            }

            cfg.Save();

            _timer = new TimerX(ShowStat, null, 5000, 5000)
            {
                Async = true
            };
        }
コード例 #13
0
ファイル: FrmMain.cs プロジェクト: xiawei666/X
        void Connect()
        {
            _Server = null;
            _Client = null;

            var uri = new NetUri(cbAddr.Text);

            var cfg = ApiConfig.Current;
            var log = BizLog;

            switch (cbMode.Text)
            {
            case "服务端":
                var svr = new ApiServer(uri);
                svr.Log        = cfg.ShowLog ? log : Logger.Null;
                svr.EncoderLog = cfg.ShowEncoderLog ? log : Logger.Null;

                svr.Start();

                "正在监听{0}".F(uri.Port).SpeechTip();

                _Server = svr;
                break;

            case "客户端":
                var client = new ApiClient(uri + "");
                client.Log        = cfg.ShowLog ? log : Logger.Null;
                client.EncoderLog = cfg.ShowEncoderLog ? log : Logger.Null;

                // 连接成功后拉取Api列表
                client.Opened += (s, e) =>
                {
                    GetApiAll();
                    //client.UserName = cfg.UserName;
                    //client.Password = cfg.Password;
                };

                _Client = client;
                client.Open();

                "已连接服务器".SpeechTip();

                break;

            default:
                return;
            }

            pnlInfo.Enabled    = true;
            pnlSetting.Enabled = false;
            btnConnect.Text    = "关闭";

            // 添加地址
            var addr = uri.ToString();
            var list = cfg.Address.Split(";").ToList();

            if (!list.Contains(addr))
            {
                list.Insert(0, addr);
                cfg.Address = list.Join(";");
            }

            cfg.Save();

            _timer = new TimerX(ShowStat, null, 5000, 5000);
        }