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"); } }