Files
fc/server/tools/gen_proto/php_to_erl/toerl.php
T

89 lines
3.5 KiB
PHP
Raw Normal View History

2026-05-23 22:10:14 +08:00
<?php
/**----------------------------------------------------+
* php协议转换成erl格式
* @author whjing2011@gmail.com
+-----------------------------------------------------*/
class GlobalVar{
private static $vars = array();
public static function get($k){
return self::$vars[$k];
}
public static function set($k, $v){
self::$vars[$k] = $v;
return $v;
}
}
function fun_fields($fields, $sp = "\t\t\t"){
$arr = array();
foreach($fields as $field){
$field['name'] = strtolower($field['name']);
if($field['type'] == 'arr' && isset($field['tuple'])){
if($field['vars']) $arr[] = "\n\t$sp{array, tuple, {$field['name']}, \"{$field['desc']}\", ".fun_fields($field['vars'], "\t\t$sp")."\n\t$sp}";
}else if($field['type'] == 'arr' && isset($field['record'])){
if($field['vars']) $arr[] = "\n\t$sp{array, {$field['record']}, {$field['name']}, \"{$field['desc']}\", ".fun_fields($field['vars'], "\t\t$sp")."\n\t$sp}";
}else if($field['type'] == 'arr' && sizeof($field['vars']) == 1){
if($field['vars']) $arr[] = "\n\t$sp{array, single, {$field['name']}, \"{$field['desc']}\", ".fun_fields($field['vars'], "\t\t$sp")."\n\t$sp}";
}else if($field['type'] == 'arr'){
if($field['vars']) $arr[] = "\n\t$sp{array, list, {$field['name']}, \"{$field['desc']}\", ".fun_fields($field['vars'], "\t\t$sp")."\n\t$sp}";
}else if($field['type'] == 'bytes'){
$arr[] = "\n\t$sp{byte, {$field['name']}, \"{$field['desc']}\"}";
}else{
$arr[] = "\n\t$sp{{$field['type']}, {$field['name']}, \"{$field['desc']}\"}";
}
}
$str = "[" . implode(",", $arr);
$str .= "\n$sp]";
return $str;
}
$dh = opendir("cfg");
while(($file = readdir($dh)) !== false){
if($file != '.' && $file != '..' && substr($file, -3, 3) == "php"){// && strpos($file, "102") != false
$mod = include('cfg/'.$file);
$cmds = $mod['cmds'];
$inc = is_array($mod['info']['inc'])? $mod['info']['inc'] : array();
foreach($inc as $k => $v){
$inc[$k] = "\"$v\"";
}
$p = basename($file, '.php');
echo("doing==>:$p\n");
$rpcs = array();
foreach($mod['cmds'] as $cmd){
$rpc = "\t\t#rpc{";
$rpc .= "\n\t\t\tcode = {$cmd['code']}";
$rpc .= "\n\t\t\t,log_title = \"{$cmd['desc']}\"";
$rpc .= "\n\t\t\t,req_desc = \"{$cmd['desc']}\"";
if($cmd['client']) $rpc .= "\n\t\t\t,req = ".fun_fields($cmd['client']);
$rpc .= "\n\t\t\t,reply_desc = \"{$cmd['desc']}返回结果\"";
if($cmd['server']) $rpc .= "\n\t\t\t,reply = ".fun_fields($cmd['server']);
$rpc .= "\n\t\t}";
$rpcs[] = $rpc;
}
$str = "%%-----------------------------------------";
$str .= "\n%% ";
$str .= "\n%% ";
$str .= "\n%%-----------------------------------------";
$str .= "\n-module($p).";
$str .= "\n-export([";
$str .= "\n\t\tinfo/0";
$str .= "\n\t\t,cfg/0";
$str .= "\n\t]";
$str .= "\n).";
$str .= "\n-include(\"protocol.hrl\").";
$str .= "\n";
$str .= "\ninfo() -> {";
$str .= "\n\t\t\"\"";
$str .= "\n\t\t,[".implode(',',$inc)."]";
$str .= "\n\t}.";
$str .= "\n";
$str .= "\ncfg() -> ";
$str .= "\n\t[\n";
$str .= implode(",\n", $rpcs);
$str .= "\n\t].";
file_put_contents("../cfg/$p.erl", $str);
}
}