89 lines
3.5 KiB
PHP
89 lines
3.5 KiB
PHP
|
|
<?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);
|
||
|
|
}
|
||
|
|
}
|