Esempio n. 1
0
 /// <summary>
 /// database count
 /// </summary>
 /// <param name="redisClient"></param>
 /// <returns></returns>
 public static int getDatabasesCount(RedisClient redisClient)
 {
     Tuple <string, string>[] config = redisClient.ConfigGet("databases");
     if (config == null || config.Length < 1)
     {
         return(0);
     }
     return(Convert.ToInt16(config[0].Item2));
 }
Esempio n. 2
0
 public void ConfigGetTest()
 {
     using (var mock = new FakeRedisSocket("*4\r\n$10\r\nmasterauth\r\n$-1\r\n$7\r\nlogfile\r\n$18\r\n/var/log/redis.log\r\n"))
         using (var redis = new RedisClient(mock, new DnsEndPoint("fakehost", 9999)))
         {
             var response = redis.ConfigGet("*");
             Assert.AreEqual(2, response.Length);
             Assert.AreEqual("masterauth", response[0].Item1);
             Assert.AreEqual(String.Empty, response[0].Item2);
             Assert.AreEqual("logfile", response[1].Item1);
             Assert.AreEqual("/var/log/redis.log", response[1].Item2);
             Assert.AreEqual("*3\r\n$6\r\nCONFIG\r\n$3\r\nGET\r\n$1\r\n*\r\n", mock.GetMessage());
         }
 }
Esempio n. 3
0
 public void ConfigGetTest()
 {
     using(var mock = new MockConnector("localhost", 9999, "*4\r\n$10\r\nmasterauth\r\n$-1\r\n$7\r\nlogfile\r\n$18\r\n/var/log/redis.log\r\n"))
     using(var redis = new RedisClient(mock))
     {
         var response = redis.ConfigGet("*");
         Assert.Equal(2, response.Length);
         Assert.Equal("masterauth", response[0].Key);
         Assert.Equal(null, (string)response[0].Value);
         Assert.Equal("logfile", response[1].Key);
         Assert.Equal("/var/log/redis.log", (string)response[1].Value);
         Assert.Equal("*3\r\n$6\r\nCONFIG\r\n$3\r\nGET\r\n$1\r\n*\r\n", mock.GetMessage());
     }
 }
Esempio n. 4
0
        /*public struct machine
         * {
         *  UInt16 MachineIndex;
         *  String MachineState;
         *  String MachineAlarm;
         *
         * }*/

        //机床状态初始化
        public void ListViewInitial()
        {
            ushort DB = 0;

            if (machinestate != null && machinestate.listView1 != null && machinestate.listView1.Items != null)
            {
                machinestate.listView1.Items.Clear();
            }

            try
            {
                if (serverpara.connectvalid == false)
                {
                    throw new Exception("云端服务器参数错误,请重新设置!");
                }
                int port = -1;
                if (int.TryParse(serverpara.RedisPort, out port) != true)
                {
                    throw new Exception("云端服务器参数错误,请重新设置!");
                }
                RedisClient Client = new RedisClient(serverpara.RedisIP, port, serverpara.RedisPassword);  //连接云端服务器
                if (!Client.Ping())
                {
                    throw new Exception("未能连接云端服务器,请检查相关参数!");
                }
                if (int.TryParse(redispara.RedisPort, out port) != true)
                {
                    throw new Exception("Redis本地服务器参数错误,请重新设置!");
                }
                RedisClient LocalClient = new RedisClient(redispara.RedisIP, port, redispara.RedisPassword);  //连接本地服务器
                if (!LocalClient.Ping())
                {
                    throw new Exception("未能连接本地服务器,请检查相关参数!");
                }
                if (LineNo == 0 ||  LineCount == 0)
                {
                    throw new Exception("生产线设备参数设置错误,请重新设置!");
                }
                string   lineindex = "Line" + LineNo.ToString();
                byte[][] value     = new byte[][] { };
                value = LocalClient.SMembers(lineindex);
                List <string> machineSN = new List <string>();  //生产线包含的设备SN码集合
                for (int i = 0; i < value.Length; ++i)
                {
                    machineSN.Add(System.Text.Encoding.Default.GetString(value[i]));
                }
                string   databases_tring;
                byte[][] tmp = new byte[][] { };
                tmp             = Client.ConfigGet("databases");
                databases_tring = System.Text.Encoding.Default.GetString(tmp[1]);
                int databases = -1;  //云服务器db数量
                if (int.TryParse(databases_tring, out databases) != true)
                {
                    throw new Exception("云端服务器参数错误,请重新设置!");
                }
                //遍历云端服务器db
                for (int i = 0; i < LineCount; ++i)
                {
                    machineDB.Add(new Dictionary <string, ushort>());
                    machineName.Add(new Dictionary <string, string>());
                    machinePort.Add(new Dictionary <string, ushort>());
                    machineIP.Add(new Dictionary <string, string>());
                }
                UInt16 linenoindex = (UInt16)(LineNo - 1);
                for (int i = 0; i < databases; ++i)
                {
                    DB        = (ushort)i;
                    Client.Db = DB;
                    byte[] tmppara = new byte[] { };
                    tmppara = Client.Get("Machine");
                    string SN = null;
                    if (tmppara != null)
                    {
                        SN = System.Text.Encoding.Default.GetString(tmppara);
                        if (machineSN.Contains(SN))
                        {
                            machineDB[linenoindex][SN] = DB;
                        }
                    }
                }

                //设置本地设备DB && 建立SN与机床编号映射
                LocalClient.Db = 0;
                byte[] textkey = Encoding.UTF8.GetBytes("DB");
                foreach (string key in machineDB[linenoindex].Keys)
                {
                    string texttmp   = machineDB[linenoindex][key].ToString();
                    byte[] hashvalue = Encoding.UTF8.GetBytes(texttmp);
                    LocalClient.HSet("MachineSN:" + key, textkey, hashvalue);  //设置本地设备DB参数

                    byte[] machinenamebytes = new byte[] { };
                    byte[] tmpbytes         = Encoding.UTF8.GetBytes("MachineNo");
                    machinenamebytes = LocalClient.HGet("MachineSN:" + key, tmpbytes);
                    string machinename = System.Text.Encoding.Default.GetString(machinenamebytes);
                    machineName[linenoindex][key] = machinename;
                }

                //初始化绘制机床状态
                UInt16 connectedmachinenum    = 0; //服务器可连接机床数量
                UInt16 Alarmmachinenum        = 0; //告警机床数量
                UInt16 workmachinenum         = 0; //在线机床数量
                UInt16 disconnectedmachinenum = 0; //离线机床数量
                UInt16 invisiblemachinenum    = 0; //因参数错误未显示机床数量
                int    lineno = LineNo - 1;

                machinestate.listView1.BeginUpdate();
                foreach (string key in machineDB[lineno].Keys)
                {
                    Client.Db = machineDB[lineno][key];
                    byte[] machine = new byte[] { };
                    machine = Client.Get("Machine");
                    string machinestr = System.Text.Encoding.Default.GetString(machine);
                    if (machinestr == key)
                    {
                        ListViewItem lvi = new ListViewItem();
                        lvi.UseItemStyleForSubItems = false; //可以设置单元格背景
                        string tmpstr = machineName[lineno][key];
                        if (tmpstr != null && tmpstr != "")
                        {
                            ++connectedmachinenum;
                            lvi.Text = tmpstr;

                            //机床状态
                            DCAgentApi dcagentApi = DCAgentApi.GetInstance(serverpara.RedisIP);
                            // HNC_NetConnect 连接Redis数据库并获取连接设备号
                            //获取本地服务器上记录的机床IP,Port
                            byte[] machinebytes = new byte[] { };
                            byte[] tmpbytes     = Encoding.UTF8.GetBytes("IP");
                            machinebytes = LocalClient.HGet("MachineSN:" + key, tmpbytes);
                            string machineip = System.Text.Encoding.Default.GetString(machinebytes);
                            tmpbytes     = Encoding.UTF8.GetBytes("Port");
                            machinebytes = LocalClient.HGet("MachineSN:" + key, tmpbytes);
                            string machineportstr = System.Text.Encoding.Default.GetString(machinebytes);
                            ushort machineport    = 0;
                            if (UInt16.TryParse(machineportstr, out machineport) != true)
                            {
                                MessageBox.Show("因生产线设备参数错误,SN码为" + key + ",编号为" + lvi.Text + "的设备未显示,请修改设备参数!");
                                ++invisiblemachinenum;
                                continue;  //跳过此设备
                            }

                            //获取云服务器上记录的机床IP,Port
                            machinebytes = Client.Get("IP");
                            string machineserverip = System.Text.Encoding.Default.GetString(machinebytes);
                            machinebytes = Client.Get("Port");
                            string machineserverportstr = System.Text.Encoding.Default.GetString(machinebytes);
                            ushort machineserverport    = 0;
                            if (UInt16.TryParse(machineserverportstr, out machineserverport) != true)
                            {
                                MessageBox.Show("因生产线设备参数错误,SN码为" + key + ",编号为" + lvi.Text + "的设备未显示,请修改设备参数!");
                                ++invisiblemachinenum;
                                continue;  //跳过此设备
                            }

                            if (machineip != machineserverip || machineport != machineserverport)
                            {
                                MessageBox.Show("因云端和本地设备参数有出入,SN码为" + key + ",编号为" + lvi.Text + "的设备未显示,请修改设备参数!");
                                ++invisiblemachinenum;
                                continue;                           //跳过此设备
                            }
                            machineIP[lineno][key]   = machineip;   //key-ip
                            machinePort[lineno][key] = machineport; //key-port

                            //获取时间
                            byte[] timebyte     = Client.Get("TimeStamp");
                            string timestampstr = System.Text.Encoding.Default.GetString(timebyte);
                            long   timestamp    = Convert.ToInt64(timestampstr);
                            var    time         = System.DateTime.FromBinary(timestamp);

                            Int16 clientNo  = dcagentApi.HNC_NetConnect(machineip, machineport);
                            bool  isConnect = dcagentApi.HNC_NetIsConnect(clientNo);
                            if (isConnect == false)
                            {
                                ++disconnectedmachinenum;
                                lvi.SubItems.Add("离线");
                                lvi.SubItems.Add("\\");
                                lvi.SubItems.Add(time.ToString());
                                lvi.SubItems[1].BackColor = Color.Gray;
                            }
                            else
                            {
                                byte[] machinealarmbyte = new byte[] { };
                                byte[] alarmbyte        = Encoding.UTF8.GetBytes("ALARMNUM_CURRENT");
                                machinealarmbyte = Client.HGet("Alarm:AlarmNum", alarmbyte);
                                string machinealarmstr = System.Text.Encoding.Default.GetString(machinealarmbyte);
                                long   machinealarm    = Convert.ToInt64(machinealarmstr);

                                if (machinealarm == 0)
                                {
                                    ++workmachinenum;
                                    lvi.SubItems.Add("在线");
                                    lvi.SubItems.Add("\\");
                                    lvi.SubItems.Add(time.ToString());
                                    lvi.SubItems[1].BackColor = Color.Green;
                                }
                                else
                                {
                                    ++Alarmmachinenum;
                                    lvi.SubItems.Add("告警");
                                    lvi.SubItems.Add("\\");
                                    lvi.SubItems.Add(time.ToString());
                                    lvi.SubItems[1].BackColor = Color.Red;
                                }
                            }

                            machinestate.listView1.Items.Add(lvi);
                        }
                    }
                }

                machinestate.listView1.EndUpdate();

                //设备数量显示
                label7.Visible  = true;
                label8.Visible  = true;
                label9.Visible  = true;
                label10.Visible = true;
                label11.Visible = true;
                label7.Text     = "生产线" + LineNo.ToString() + "设备数目:" + machineDB[lineno].Count.ToString() + "台";
                label8.Text     = "在线设备数目:" + workmachinenum.ToString() + "台";
                label9.Text     = "离线设备数目:" + disconnectedmachinenum.ToString() + "台";
                label10.Text    = "告警设备数目:" + Alarmmachinenum.ToString() + "台";
                label11.Text    = "未显示设备数目:" + invisiblemachinenum.ToString() + "台";
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR:" + ex.Message, "ERROR");
            }
        }
Esempio n. 5
0
 public void ConfigGetTest()
 {
     using (var mock = new FakeRedisSocket("*4\r\n$10\r\nmasterauth\r\n$-1\r\n$7\r\nlogfile\r\n$18\r\n/var/log/redis.log\r\n"))
     using (var redis = new RedisClient(mock, new DnsEndPoint("fakehost", 9999)))
     {
         var response = redis.ConfigGet("*");
         Assert.AreEqual(2, response.Length);
         Assert.AreEqual("masterauth", response[0].Item1);
         Assert.AreEqual(String.Empty, response[0].Item2);
         Assert.AreEqual("logfile", response[1].Item1);
         Assert.AreEqual("/var/log/redis.log", response[1].Item2);
         Assert.AreEqual("*3\r\n$6\r\nCONFIG\r\n$3\r\nGET\r\n$1\r\n*\r\n", mock.GetMessage());
     }
 }
Esempio n. 6
0
        public bool Connect(IPEndPoint endpoint, string password)
        {
            if (_status.Equals(RedisInstanceStatus.Connected))
            {
                throw new Exception("Instance is already connected to a server.");
            }

            IPEndPoint = endpoint;
            Password   = password;
            string connString = string.Format("{0}[:{1}],password={2},defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=", endpoint.Address, endpoint.Port, password);

            _client = new CSRedisClient(connString);

            _pulseClient = new RedisClient(endpoint);
            bool isConnected = false;

            isConnected = _pulseClient.Connect(3000);

            if (isConnected)
            {
                string authRtn = _pulseClient.Auth(password);

                if (authRtn.ToLower().Equals("ok"))
                {
                    Tuple <string, string>[] rtn = _pulseClient.ConfigGet("*");
                    foreach (Tuple <string, string> tuple in rtn)
                    {
                        _configs[tuple.Item1] = tuple.Item2;
                        Console.WriteLine("{0}={1}", tuple.Item1, tuple.Item2);
                    }

                    _databases.Clear();
                    if (_configs.ContainsKey("databases"))
                    {
                        int dbCount = 0;

                        if (int.TryParse(_configs["databases"], out dbCount))
                        {
                            for (int i = 0; i < dbCount; i++)
                            {
                                RedisInstanceDatabase db = new RedisInstanceDatabase(this)
                                {
                                    Index = i,
                                };
                                _databases.Add(db);
                            }
                        }
                    }


                    string info = _pulseClient.Info();
                    Console.WriteLine(info);

                    string   section   = string.Empty;
                    string[] infoItems = info.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string item in infoItems)
                    {
                        string[] keyvalue = item.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                        if (keyvalue.Length == 1)
                        {
                            section = keyvalue[0].Substring(2, keyvalue[0].Length - 2);
                        }
                        else if (keyvalue.Length == 2)
                        {
                            switch (section.ToLower())
                            {
                            case "server":
                                this.Infos.Servers[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "clients":
                                this.Infos.Clients[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "memory":
                                this.Infos.Memory[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "persistence":
                                this.Infos.Persistence[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "stats":
                                this.Infos.Stats[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "replication":
                                this.Infos.Replication[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "cpu":
                                this.Infos.CPU[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "cluster":
                                this.Infos.Cluster[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "keyspace":
                                this.Infos.Keyspace[keyvalue[0]] = keyvalue[1].Trim();
                                int dbIndex = -1;
                                if (int.TryParse(keyvalue[0].Substring(keyvalue[0].Length - 1, 1), out dbIndex))
                                {
                                    RedisInstanceDatabase db = _databases[dbIndex];
                                    string[] valueStrings    = keyvalue[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                                    foreach (string valueString in valueStrings)
                                    {
                                        string[] kv = valueString.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                                        switch (kv[0])
                                        {
                                        case "keys":
                                            int keysValue = 0;
                                            if (int.TryParse(kv[1], out keysValue))
                                            {
                                                db.Keys = keysValue;
                                            }
                                            break;

                                        case "expires":
                                            int expiresValue = 0;
                                            if (int.TryParse(kv[1], out expiresValue))
                                            {
                                                db.Expires = expiresValue;
                                            }
                                            break;

                                        case "avg_ttl":
                                            int avgTTL = 0;
                                            if (int.TryParse(kv[1], out avgTTL))
                                            {
                                                db.AvgTTL = avgTTL;
                                            }
                                            break;
                                        }
                                    }
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }

                    if (_cancellationSource != null)
                    {
                        _cancellationSource.Cancel();
                    }
                    _pulseThread = new Thread(new ThreadStart(PulseThread));
                    _pulseThread.IsBackground = true;
                    _pulseThread.Start();

                    this.Status = RedisInstanceStatus.Connected;
                }
            }

            return(isConnected);
        }