Exemple #1
0
        public void UpdateAllStatus()
        {
            SqlDataReader reader = null;

            if (db_Base.GetDataGroup("Select uid from [FilesDB].[dbo].[T_PLAT_ApInfo]", ref reader))
            {
                if (reader.HasRows)
                {
                    int c1 = reader.GetOrdinal("uid");
                    reader.Read();
                    reader.Read();
                    reader.Read();
                    while (reader.Read())
                    {
                        string EmpName = reader.GetString(0);

                        if (EmpName == "apserver" || EmpName == "manager server")
                        {
                            continue;
                        }

                        if (EmpName.Length < 20)
                        {
                            return;
                        }
                        udpsocket.Send(apEncapsulator.GetApStatus(Encoding.ASCII.GetBytes(EmpName)));
                    }
                    reader.Close();
                }
            }
            //Log.write("Get all AP status");
            if (db_Base.GetDataGroup("Select ai.uid,ri.uid from dbo.T_PLAT_ReaderConfig as rc left join dbo.T_PLAT_ReaderInfo as ri on ri.pk_id=rc.fk_reader left join dbo.T_PLAT_ApInfo as ai on ai.pk_id=rc.fk_ap", ref reader))
            {
                if (reader.HasRows)
                {
                    int c1 = reader.GetOrdinal("uid");
                    //int c2 = reader.GetOrdinal("uid_1");
                    while (reader.Read())
                    {
                        string EmpName1 = reader.GetString(0);
                        string EmpName2 = reader.GetString(1);
                        udpsocket.Send(apEncapsulator.Response_Terminal_StatusUpdate(Encoding.ASCII.GetBytes(EmpName1), Encoding.ASCII.GetBytes(EmpName2)));
                        break;
                    }
                    reader.Close();
                }
            }
            // Log.write("Get all Terminal status");
        }
        //工作-处理终端数据
        private void Job_Terminal_data_upload(APParser apPaser)
        {
            int size = 0;

            if (!apPaser.GetParam_Terminal_data_upload(ref byte_ap_uid, ref byte_terminal_uid, ref byte_terminal_data, ref size))
            {
                return;
            }

            TerminalHandleJob(size);
            udpSocket.Send(apEncapsulator.Response_Terminal_DataUpload(byte_ap_uid));
            string tmp1 = System.Text.Encoding.Default.GetString(byte_ap_uid);

            database.CmdLog("05020600", tmp1, apPaser.GetParam_Origin_Hex());
            tmp1 = null;
        }
        //工作-处理AP校验
        private void Job_AP_Validate(APParser apPaser)
        {
            int Count = 0;

            apPaser.GetParam_Validate_Order(ref byte_ap_uid, ref Count);
            string tmp = System.Text.Encoding.Default.GetString(byte_ap_uid);

            if (database.AP_Validate(tmp, Count.ToString()))
            {
                udpSocket.Send(apEncapsulator.Response_AP_Validate(byte_ap_uid, 0x31));
            }
            else
            {
                udpSocket.Send(apEncapsulator.Response_AP_Validate(byte_ap_uid, 0x32));
            }

            database.CmdLog("05010100", tmp, apPaser.GetParam_Origin_Hex());

            tmp = null;
        }
        private void DBHandleJob()
        {
            try
            {
                if (dbOrderList.Count == 0 && dbSentList.Count == 0)
                {
                    Log.write("DBMsgHandler-WaitOne");
                    resumeEvent.Reset();
                    resumeEvent.WaitOne();
                }

                lock (dbOrderList)
                {
                    if (dbOrderList.Count != 0)
                    {
                        APParser apParser = dbOrderList[0];
                        udpsocket.Send(apParser.GetParam_Origin_byte());
                        dbOrderList.RemoveAt(0);
                        dbSentList.Add(apParser);
                        Log.write("DBMsgHandler---Send a command", 0);
                    } //处理发送数据
                }     //锁存dbOrderList


                int dbSent_count = dbSentList.Count;
                if (dbSent_count == 0)
                {
                    return;
                }//已发送命令

                lock (dbResultList)
                {
                    int dbResult_count = dbResultList.Count;
                    if (dbResult_count == 0)
                    {
                        Thread.Sleep(50);
                        return;
                    }//有处理结果返回

                    for (int i = dbResult_count - 1; i >= 0; i--)
                    {
                        dbResult_count = dbResultList.Count;

                        if (dbResult_count == 0)
                        {
                            break;
                        }//结果为0,结束

                        bool isReponsed = false;
                        for (int j = dbSent_count - 1; j >= 0; j--)
                        {
                            APParser SentParser   = dbSentList[j];
                            APParser ResultParser = dbResultList[i];
                            int      iRet         = APParser.RelatingMsg(SentParser, ResultParser);
                            if (iRet == 1)
                            {
                                database.DB_Set_Cmd(SentParser.GetID(), ResultParser.GetParam_Result());
                                //Log.write("DBMsgHandler-Get relative message:sent JobDone");
                                Log.write("DBMsgHandler---matching a result:" + SentParser.GetParam_Origin_Hex() + "\r\n" + ResultParser.GetParam_Origin_Hex() + "\r\n", 2);
                                dbSentList.RemoveAt(j);
                                dbResultList.RemoveAt(i);
                                SentParser.Dispose();
                                ResultParser.Dispose();
                                isReponsed = true;

                                break;//match and break the circle
                            }
                            else if (iRet == 0)
                            {
                                database.DB_Update_Cmd(SentParser.GetID(), ResultParser.GetParam_Cmd_SendOrNot());

                                Log.write("DBMsgHandler---matching a response:" + SentParser.GetParam_Origin_Hex() + "\r\n" + ResultParser.GetParam_Origin_Hex() + "\r\n", 2);
                                isReponsed = true;
                                dbResultList.RemoveAt(i);
                                ResultParser.Dispose();
                                break;//match and break the circle
                            }
                            else
                            {
                            }
                        }

                        if (!isReponsed)
                        {
                            APParser aa = dbResultList[i];
                            aa.Dispose();
                            dbResultList.RemoveAt(i);
                            Log.write("DBMsgHandler---inequal result", 0);
                        }
                    } //遍历匹配
                }     //锁存
            }
            catch (SqlException ex)
            {
                Log.write("DBMsgHandler SqlException Error:" + ex.Message, 0);
                SqlExceptionHelper.Deal(ex);
            }
            catch (Exception ex)
            {
                Log.write("DBMsgHandler-ThreadError:" + ex.Message, 0);
                dbOrderList.Clear();
                dbResultList.Clear();
                Log.write("DBMsgHandler-Clear All", 0);
            }
        }