VM暫存
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

116 строки
3.2KB

  1. <?php
  2. require_once '/home/bigbang/libs/Workerman/Autoloader.php';
  3. use Workerman\Worker;
  4. Worker::$logFile = '/dev/null'; // 不記錄log file
  5. //Worker::$pidFile = '/tmp/run/'.basename(__FILE__).'.pid';
  6. //Worker::$logFile = __DIR__ . '/../mitac2server.log';
  7. // 場站共用設定檔
  8. require_once '/home/bigbang/apps/coworker/station.config.php';
  9. define('APP_NAME', 'mitac'); // application name
  10. define('WORKERMAN_DEBUG', 1);
  11. if (WORKERMAN_DEBUG)
  12. {
  13. ini_set('display_errors', '1');
  14. error_reporting(E_ALL);
  15. set_error_handler('error_handler', E_ALL);
  16. }
  17. ///////////////////////////////
  18. //
  19. // 主程式
  20. //
  21. ///////////////////////////////
  22. // 傳送主機資料
  23. $ch = curl_init();
  24. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  25. curl_setopt($ch, CURLOPT_POST, true); // 啟用POST
  26. // 建立一個Worker監聽49993埠,不使用任何應用層協定
  27. $tcp_worker = new Worker("tcp://0.0.0.0:49993");
  28. // 啟動N個進程對外提供服務
  29. $tcp_worker->count = 4;
  30. $tcp_worker->onConnect = function($connection)
  31. {
  32. echo APP_NAME . "..New Connection\n";
  33. };
  34. $tcp_worker->onClose = function($connection)
  35. {
  36. echo APP_NAME . "..Connection closed\n";
  37. };
  38. $tcp_worker->onMessage = function($connection, $tcp_in)
  39. {
  40. global $ch;
  41. $explode_tcp_in = explode(',', $tcp_in);
  42. $send_data = null;
  43. if(empty($explode_tcp_in) || count($explode_tcp_in) != 10)
  44. {
  45. trigger_error(".. unknown tcp_in|". print_r($explode_tcp_in, true) .'|');
  46. $connection->close($send_data);
  47. }
  48. else if($explode_tcp_in[0] != 'Altob')
  49. {
  50. // 判斷 receiver_name
  51. trigger_error(".. unknown receiver_name|". print_r($explode_tcp_in, true) .'|');
  52. }
  53. else if($explode_tcp_in[1] != 'DeductResult')
  54. {
  55. // 判斷 cmd
  56. trigger_error(".. unknown cmd|". print_r($explode_tcp_in, true) .'|');
  57. $connection->close($send_data);
  58. }
  59. else
  60. {
  61. // 回應扣款成功 (MITAC to ALTOB) 目前只有這支
  62. $function_name = 'deduct_result';
  63. $seqno = $explode_tcp_in[2];
  64. $lpr = $explode_tcp_in[3];
  65. $in_time = $explode_tcp_in[4];
  66. $out_time = $explode_tcp_in[5];
  67. $gate_id = $explode_tcp_in[6];
  68. $amt = $explode_tcp_in[7];
  69. $amt_discount = $explode_tcp_in[8];
  70. $amt_real = $explode_tcp_in[9];
  71. // 建立通訊內容
  72. $parms = array(
  73. 'seqno' => $seqno,
  74. 'lpr' => $lpr,
  75. 'in_time' => $in_time,
  76. 'out_time' => $out_time,
  77. 'gate_id' => $gate_id,
  78. 'amt' => $amt,
  79. 'amt_discount' => $amt_discount,
  80. 'amt_real' => $amt_real);
  81. // 加驗証
  82. $parms['ck'] = md5($parms['seqno']. 'a' . date('dmh') . 'l' . $parms['lpr'] . 't'. $parms['amt']. 'o'. $parms['amt_discount'] . 'b'. $parms['amt_real'] . $function_name);
  83. curl_setopt($ch, CURLOPT_URL, "http://localhost/mitac_service.html/{$function_name}/");
  84. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parms));
  85. $send_data = curl_exec($ch);
  86. trigger_error(".. curl {$function_name}|{$send_data} ..".print_r($parms, true));
  87. }
  88. $connection->close($send_data);
  89. };
  90. // 執行worker
  91. Worker::runAll();
  92. // 發生錯誤時集中在此處理
  93. function error_handler($errno, $errstr, $errfile, $errline, $errcontext)
  94. {
  95. $str = date('H:i:s')."|{$errstr}|{$errfile}|{$errline}|{$errno}\n";
  96. error_log($str, 3, LOG_PATH.APP_NAME . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名
  97. }