示例#1
0
 function readLine($file, $filename, $ServerData, $StartTime, $EndTime, $LastUpdate, $lag, $matchesc, $matchsingle, $matchtotal)
 {
     if (file_exists($file)) {
         $fd = fopen($file, "r");
         while ($buffer = fgets($fd)) {
             $data = explode(":", substr($buffer, 20, strlen($buffer)));
             $function = explode(";", $data[2]);
             $log = array();
             if (($StartTime <= strtotime(substr($buffer, 0, 19)) || $StartTime == 0) && ($EndTime >= strtotime(substr($buffer, 0, 19)) || $EndTime == 0)) {
                 $log['time'] = substr($buffer, 0, 19);
                 $log['type'] = $function[0];
                 $log['function'] = $function[1];
                 $log['text'] = $buffer;
                 unset($function[0], $function[1]);
                 foreach ($function as $k => $v) {
                     $newdata = explode("=", $v);
                     $log['data'][$newdata[0]] = $newdata[1];
                 }
             } else {
                 continue;
             }
             $result = array();
             if (count($matchtotal) > 1000) {
                 unset($matchtotal);
                 $matchtotal = array();
             }
             if (count($matchesc) > 1000) {
                 unset($matchesc);
                 $matchesc = array();
             }
             if (count($matchsingle) > 1000) {
                 unset($matchsingle);
                 $matchsingle = array();
             }
             echo "\n" . $log['function'];
             switch ($log['function']) {
                 //PVP单人记录
                 case "matchsingle":
                     $DataArr = array('SlkID' => $log['data']['SlkID'], 'EctypeID' => $log['data']['EctypeID'], 'UserId' => $log['data']['AccountID'], 'HeroID' => $log['data']['HeroID'], 'PvpLevel' => $log['data']['PvpLevel'], 'KillNum' => $log['data']['KillNum'], 'DeadNum' => $log['data']['DeadNum'], 'AssistNum' => $log['data']['AssistNum'], 'EquipList' => json_encode(array('1' => $log['data']['Equip1'], '2' => $log['data']['Equip2'], '3' => $log['data']['Equip3'], '4' => $log['data']['Equip4'], '5' => $log['data']['Equip5'], '6' => $log['data']['Equip6'])), 'Won' => $log['data']['Result'], 'AppId' => $ServerData['AppId'], 'PartnerId' => $ServerData['PartnerId'], 'ServerId' => $ServerData['ServerId'], 'Comment' => json_encode(array("Double" => $log['data']['Double'], "Triple" => $log['data']['Triple'], "Four" => $log['data']['Four'], "Five" => $log['data']['Five'], "God" => $log['data']['God'], "Mvp" => $log['data']['Mvp'], "KillKing" => $log['data']['KillKing'], "AssistKing" => $log['data']['AssistKing'], "DestroyKing" => $log['data']['DestroyKing'], "Grade" => $log['data']['Grade'], "KillMonNum" => $log['data']['KillMonNum'], "PvpMoney" => $log['data']['PvpMoney'], "Faction" => trim($log['data']['Faction']))));
                     $oTask = new Lm_Task();
                     if (isset($matchtotal[$DataArr['EctypeID']])) {
                         $DataArr['PvpEnterTime'] = $matchtotal[$DataArr['EctypeID']]['PvpEnterTime'];
                         $DataArr['PvpLeaveTime'] = $matchtotal[$DataArr['EctypeID']]['PvpEndTime'];
                         if (isset($matchesc[$DataArr['EctypeID']])) {
                             foreach ($matchesc[$DataArr['EctypeID']] as $k => $v) {
                                 $DataArrEsc = array('SlkID' => $v['SlkID'], 'EctypeID' => $v['EctypeID'], 'UserId' => $v['UserId'], 'HeroID' => $v['HeroID'], 'PvpEnterTime' => $DataArr['PvpEnterTime'], 'PvpLeaveTime' => $v['PvpLeaveTime'], 'PvpLevel' => 0, 'KillNum' => 0, 'DeadNum' => 0, 'AssistNum' => 0, 'EquipList' => json_encode(array()), 'Won' => 3, 'AppId' => $ServerData['AppId'], 'PartnerId' => $ServerData['PartnerId'], 'ServerId' => $ServerData['ServerId'], 'Comment' => json_encode(array('Faction' => trim($v['Faction']))));
                                 $insertLog = $oTask->InsertPvpLog($DataArrEsc);
                                 if ($insertLog) {
                                     unset($matchesc[$DataArr['EctypeID'][$k]]);
                                 }
                             }
                         }
                         $insertLog = $oTask->InsertPvpLog($DataArr);
                     } else {
                         $matchsingle[$DataArr['EctypeID']][] = $DataArr;
                     }
                     break;
                 case "matchtotal":
                     $DataArr = array('SlkID' => $log['data']['SlkID'], 'EctypeID' => $log['data']['EctypeID'], 'PvpEnterTime' => $log['data']['EndTimeStamp'] - $log['data']['RunTime'], 'RunTime' => $log['data']['RunTime'], 'PvpEndTime' => $log['data']['EndTimeStamp'], 'WinCamp' => $log['data']['WinCamp'], 'AppId' => $ServerData['AppId'], 'PartnerId' => $ServerData['PartnerId'], 'ServerId' => $ServerData['ServerId']);
                     $oTask = new Lm_Task();
                     $insertLog = $oTask->InsertPvpTotalLog($DataArr);
                     if (isset($matchesc[$DataArr['EctypeID']])) {
                         foreach ($matchesc[$DataArr['EctypeID']] as $k => $v) {
                             $DataArrEsc = array('SlkID' => $v['SlkID'], 'EctypeID' => $v['EctypeID'], 'UserId' => $v['UserId'], 'HeroID' => $v['HeroID'], 'PvpEnterTime' => $DataArr['PvpEnterTime'], 'PvpLeaveTime' => $v['PvpLeaveTime'], 'PvpLevel' => 0, 'KillNum' => 0, 'DeadNum' => 0, 'AssistNum' => 0, 'EquipList' => json_encode(array()), 'Won' => 3, 'AppId' => $ServerData['AppId'], 'PartnerId' => $ServerData['PartnerId'], 'ServerId' => $ServerData['ServerId'], 'Comment' => json_encode(array('Faction' => $v['Faction'])));
                             $insertLog = $oTask->InsertPvpLog($DataArrEsc);
                             if ($insertLog) {
                                 unset($matchesc[$DataArr['EctypeID']][$k]);
                             }
                         }
                     }
                     if (isset($matchsingle[$DataArr['EctypeID']])) {
                         foreach ($matchsingle[$DataArr['EctypeID']] as $k => $v) {
                             $v['PvpEnterTime'] = $DataArr['PvpEnterTime'];
                             $v['PvpLeaveTime'] = $DataArr['PvpEndTime'];
                             $insertLog = $oTask->InsertPvpLog($v);
                             if ($insertLog) {
                                 unset($matchsingle[$DataArr['EctypeID']][$k]);
                             }
                         }
                     }
                     $matchtotal[$DataArr['EctypeID']] = $DataArr;
                     break;
                 case "matchesc":
                     $DataArr = array('SlkID' => $log['data']['SlkID'], 'EctypeID' => $log['data']['EctypeID'], 'PvpLeaveTime' => strtotime($log['time']), 'UserId' => $log['data']['AccountID'], 'HeroID' => $log['data']['HeroID'], 'Faction' => trim($log['data']['Faction']), 'AppId' => $ServerData['AppId'], 'PartnerId' => $ServerData['PartnerId'], 'ServerId' => $ServerData['ServerId']);
                     $matchesc[$DataArr['EctypeID']][] = $DataArr;
                     break;
             }
             echo "LogTime:" . $log['time'] . "\n";
             if ($insertLog) {
                 echo "\tinsert:" . $insertLog . "\n";
                 if (strtotime($log['time']) >= $LastUpdate['LastUpdateTime']) {
                     $LastUpdate['LastUpdateTime'] = strtotime($log['time']);
                 }
                 echo "LastUpdateTime:" . date("Y-m-d H:i:s", $LastUpdate['LastUpdateTime']) . "\tToUpdateTime:" . date("Y-m-d H:i:s", $LastUpdate['ToUpdateTime']) . "\n";
                 if ($LastUpdate['LastUpdateTime'] >= $LastUpdate['ToUpdateTime']) {
                     $this->oCron->UpdateLastUpdate(array('ServerId' => $ServerData['ServerId'], 'LastUpdateTime' => $LastUpdate['LastUpdateTime'], 'FileType' => $filename));
                     $LastUpdate['ToUpdateTime'] = $LastUpdate['LastUpdateTime'] + $lag;
                 }
             }
         }
         $this->oCron->UpdateLastUpdate(array('ServerId' => $ServerData['ServerId'], 'LastUpdateTime' => $LastUpdate['LastUpdateTime'], 'FileType' => $filename));
         $LastUpdate['ToUpdateTime'] = $LastUpdate['LastUpdateTime'] + $lag;
         $return['LastUpdate'] = $LastUpdate;
         $return['matchsingle'] = $matchsingle;
         $return['matchesc'] = $matchesc;
         $return['matchtotal'] = $matchtotal;
         fclose($fd);
         return $return;
     } else {
         echo iconv("utf-8", "gbk", "文件" . $file . "不存在\n");
     }
 }