Пример #1
0
 public QcTimeLicense(DateTime exp)
 {
     if (exp.Subtract(DateTime.Now).Days <= 1)
     {
         stat = LicenseRetCode.超出允许授权期限;
     }
     else
     {
         stat = LicenseRetCode.成功;
     }
 }
Пример #2
0
        void server_ReceiveCmd(object sender, QcCmdEventArgs e)
        {
            lock (obj)
            {
                QcCmd  cmd  = e.Cmd;
                string from = e.Cmd.tokens(1);
                string to   = e.Cmd.tokens(2);
                if (lstUser.ContainsKey(from))
                {
                    lstUser[from].LastOnline = DateTime.Now;
                }
                switch (cmd.CmdType)
                {
                case QcProtocol.QcCommand.QcCheckLicense:
                    try
                    {
                        LicenseRetCode ret = LicenseRetCode.未授权;
                        //CONTINUE:
                        //    if (cmd == null) goto CONTINUE;
                        string type = cmd.tokens(1);
                        string arg  = cmd.tokens(2);
                        switch (type)
                        {
                        case "Feature":
                            int id = 0;
                            int.TryParse(arg, out id);
                            ret = License.CheckFeature(id);
                            break;

                        case "Module":
                            ret = License.CheckModule(arg);
                            break;

                        case "Product":
                            ret = License.CheckProduct(arg);
                            break;

                        case "Regsiter":
                            ret = License.RegsisterUser(arg);
                            break;

                        case "Release":
                            License.ReleaseUser(arg);
                            break;
                        }
                        e.Chanel.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcCheckLicense, ret.ToString()));
                        e.Chanel.CloseLink();
                    }
                    catch (Exception ex)
                    {
                        QcLog.LogString("QcCheckLicense   " + cmd.ToString() + ":" + ex.Message);
                    }

                    break;

                case QcProtocol.QcCommand.QcUserLogin:
                    bool blLogined = false;
                    blLogined = true;
                    if (lstUser.ContainsKey(from) == false)
                    {
                        var user = QcUser.RefreshUser(from);
                        if (user != null)
                        {
                            var qmu = new QcMsgUser(user);
                            lstUser.TryAdd(qmu.Name, qmu);
                        }
                    }

                    if (lstUser.ContainsKey(from))
                    {
                        //这里判断一下是否可以登录
                        var msguser = lstUser[from];
                        var user    = msguser.User as QcUser;

                        string sql = "select * from " + QcUser.TableName + " where " + user.CodeField + "='" + user.Code + "' and 状态='启用'";
                        if (DbHelper.Exists(sql))
                        {
                            QcChanel chanel = new QcChanel();
                            chanel.SetChanel(e.Chanel, this);
                            lstUser[from].Chanel = chanel;
                            if (this.Logined != null)
                            {
                                var userfrom = lstUser[from];
                                var evtarg   = new QcMessagerLoginEventArg(userfrom);
                                this.Logined(this, evtarg);
                            }
                            //this.BroadcastMsg(e.Cmd.ToString());
                            this.BroadcastMsg(QcCmd.MakeCmd(QcProtocol.QcCommand.QcUserLogin, from, "*"));
                            blLogined = true;
                        }
                        else
                        {
                            blLogined = false;
                        }
                        QcClientService qcs = e.Chanel as QcClientService;
                        e.Chanel.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcLoginReplay, blLogined));
                    }
                    break;

                case QcProtocol.QcCommand.QcListUser:
                    var strusers = "";
                    foreach (var u in OnlineUsers)
                    {
                        strusers += u.Name + ",";
                    }
                    e.Chanel.Send(QcCmd.MakeCmd(QcProtocol.QcCommand.QcListUser, strusers));
                    break;

                case QcProtocol.QcCommand.QcLoginOut:
                    if (lstUser.ContainsKey(from))
                    {
                        var userfrom = lstUser[from];
                        if (this.Loginout != null)
                        {
                            var evt = new QcMessagerLoginEventArg(userfrom);
                            this.Loginout(this, evt);
                        }
                        this.BroadcastMsg(QcCmd.MakeCmd(QcProtocol.QcCommand.QcLoginOut, from, "*"));
                        userfrom.Close();
                    }
                    break;

                case QcProtocol.QcCommand.QcDataUpdate:
                    this.BroadcastMsg(e.Cmd.ToString());
                    break;

                default:
                    if (to == "*")
                    {
                        this.BroadcastMsg(e.Cmd.ToString());
                        return;
                    }
                    else
                    {
                        if (lstUser.ContainsKey(to))
                        {
                            var user = lstUser[to];
                            user.Send(e.Cmd.ToString());
                        }
                    }
                    break;
                }
            }
        }
Пример #3
0
        LicenseRetCode PostLicenseMessage(string type, string arg)
        {
            int            count  = 3;
            QcMsgClient    client = new QcMsgClient(null, null);
            AutoResetEvent are    = new AutoResetEvent(false);
            QcCmd          retcmd = null;
            string         cmd    = QcCmd.MakeCmd(QcProtocol.QcCommand.QcCheckLicense, type, arg);

            try
            {
                //client =;
                client.ConnectedServer += (o, e) =>
                {
                    client.Send(cmd);
                };
                client.ReceiveCmd += (o, e) =>
                {
                    retcmd = e.Cmd;
                    are.Set();
                    //接收消息
                };
CONTINUE:
                client.Connect(QcMessagner.IP, QcMessagner.Port);
                if (are.WaitOne(5000))//3秒钟超时连接
                {
                    LicenseRetCode ret = LicenseRetCode.授权未知错误01;
                    //if (retcmd == null)
                    //{
                    //    Thread.Sleep(500);//有可能消息接收 事件还没有给retcmd赋值,因此延迟500毫秒
                    //}
                    if (retcmd != null)
                    {
                        string t_Test = retcmd.tokens(1);
                        ret = (LicenseRetCode)Enum.Parse(typeof(LicenseRetCode), t_Test);
                    }
                    return(ret);
                }
                else
                {
                    if (count > 0)
                    {
                        count--;
                        goto CONTINUE;
                    }
                    else
                    {
                        return(LicenseRetCode.授权服务器连接超时);
                    }
                }
            }
            catch (Exception e)
            {
                QcLog.LogString(e.Message + e.StackTrace);
                //System.Windows.Forms.MessageBox.Show(e.Message + e.StackTrace);
                return(LicenseRetCode.授权未知错误);
            }
            finally
            {
                //这里该怎样断开服务器上的连接呢?
                if (client != null)
                {
                    client.Close();
                }
                are.Set();
            }
        }
Пример #4
0
        public void checklicensetext()
        {
            string licensetext = _licensetext;

            try
            {
                XLicDoc = XDocument.Parse(licensetext);
                if (protect.CheckLicense(licensetext))
                {
                    Stats = LicenseRetCode.成功;
                    if (DateTime.Now.CompareTo(DateTime.Parse(LicDoc.Root.Element("EndDate").Value.ToString())) > 0)
                    {
                        Stats = LicenseRetCode.超出授权时间范围;
                    }
                    else
                    {
                        RegistryKey rsg = null;
                        if (Registry.LocalMachine.OpenSubKey("SOFTWARE\\OfficeServer") == null)
                        {
                            if (chksn)//如果要进行机器码检验那么就需要进行注册时间判断
                            {
                                if (DateTime.Now.Subtract(DateTime.Parse(LicDoc.Root.Element("StartDate").Value.ToString())).Days > 7)
                                {
                                    Stats = LicenseRetCode.超出允许授权期限;
                                }
                            }
                            //不论超不超期限都要进行记录系统时间
                            Registry.LocalMachine.CreateSubKey("SOFTWARE", RegistryKeyPermissionCheck.ReadWriteSubTree).CreateSubKey("OfficeServer");
                            rsg = Registry.LocalMachine.CreateSubKey("SOFTWARE").OpenSubKey("OfficeServer", true);
                            rsg.SetValue("PreDate", DateTime.Now.ToShortDateString());
                            rsg.Close();
                        }
                        else
                        {
                            rsg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\OfficeServer", true);
                            if (DateTime.Now.CompareTo(DateTime.Parse(rsg.GetValue("PreDate").ToString())) < 0)
                            {
                                Stats = LicenseRetCode.授权服务系统时间被修改;
                            }
                            else
                            {
                                rsg.SetValue("PreDate", DateTime.Now.ToShortDateString());
                            }
                            rsg.Close();
                        }
                    }
                    QcLog.LogString("授权文件检查成功,当前机器码为:" + new QcProtect().GetSn() + "授权机器码为" + LicDoc.Root.Element("序列号").Value + "\n当前机器特征为:" + new QcProtect().GetHdw());
                    //if (DateTime.Now > DateTime.Parse(LicDoc.Root.Element("EndDate").Value.ToString())) Stats = LicenseRetCode.超出允许授权期限;
                    //创建系统时间注入文件,如果没有则创建,如果有则判断系统时间是否被篡改,如果没有篡改就注入系统时间,如果超过7天时间仍没有注册不允许
                    //创建系统时间注入文件,
                }
                else
                {
                    Stats = LicenseRetCode.未授权;
                    QcLog.LogString("授权文件检查失败,当前机器码为:" + new QcProtect().GetSn() + "授权机器码为" + LicDoc.Root.Element("序列号").Value + "\n当前机器特征为:" + new QcProtect().GetHdw());
                }
                //授权时间判断

                //注册时间判断在这里判断
                //系统服务时间篡改在这里判断
                lstFeature.AddRange(LicDoc.Root.Element("FeatureID").Value.Split('_'));

                lstProduct.AddRange(LicDoc.Root.Element("Product").Value.Split('_'));
                foreach (var v in LicDoc.Root.Element("Modules").Elements("ModuleName"))
                {
                    lstModule.Add(v.Value);
                }

                QcLog.LogString("授权文件读取成功!");
                QcLog.LogString("FeatureList = " + String.Join(";", lstFeature));
                QcLog.LogString("ProductList = " + String.Join(";", lstProduct));
            }
            catch (Exception e)
            {
                Stats = LicenseRetCode.未授权;
                QcLog.LogString("授权文件不合无法读取" + e.Message);
            }
        }