socketref,再见!高德

https://github.com/adoggie

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

弄Rpc有一段时间了,从定义IDL规则,自动生成存根代码给应用使用,相继做了c++,java,python,actionscript四个版本,且都都能互相调用,协议是自定义的二进制格式。
公司的项目要求我从事android的开发,编写一些小的应用,要与平台服务器通信。
与服务器的通信采用xml交换,之前做的二进制编码便不能使用。
不想很弱智的去重复的编解码xml消息格式,去编写socket通信代码,工作量和繁琐是自己不喜欢的,那只能让自己的rpc去支持xml格式。
这种支持我称之为半人工的,因为xml格式的tag定义必须在idl中出现

idl定义
 1 struct Ts_heartbeat_p_User_t{
 2     string id;
 3 };
 4 //心跳
 5 
 6 struct Ts_gps_p_GPS_t{
 7     float lon;
 8     float lat;
 9     float speed;
10     float direction;
11     int        time;
12 };
13 
14 struct Ts_gps_p_Properties_t{
15     string senderid;
16     string target_type;
17     string users;
18     string groups;
19 };
20 
21 struct Ts_verify_r_User_t{
22     string id;
23 };
24 
25 struct Ts_verify_r_Group_t{
26     string id;
27     string name;
28     string type;
29 };
30 
31 sequence<Ts_verify_r_Group_t> Ts_verify_r_Groups_t;
32 
33 struct Ts_verify_r_Result_t{
34     int code;
35     string msg;
36     Ts_verify_r_User_t user;
37     Ts_verify_r_Groups_t groups;
38 };
39 
40 
41 struct Ts_verify_p_User_t{
42     string token;
43 };
44 
45 interface Ts{
46     void heartbeat(Ts_heartbeat_p_User_t p);
47     void gps(Ts_gps_p_GPS_t p,Ts_gps_p_Properties_t props);
48     Ts_verify_r_Result_t verify(Ts_verify_p_User_t p);
49 };
50 
idl定义了一个Ts的接口,内部有三个方法:heartbeat(),gps(),verify()
这些方法在服务器端已经实现,其他的struct类型定义了接口调用使用的参数和返回值类型 ,注意他们的格式:
struct Ts_verify_p_User_t{
     string token;
};
这个类型将被解释成 <User token="..."/>

sequence<Ts_verify_r_Group_t> Ts_verify_r_Groups_t;
将被解释成 
<Groups>
   <Group id="" name="" type=""/>
   ...
</Groups>
努力不是白费的,python+ply实现了idl的语法解析,并生成java框架代码,并编写通信代码完成Rpc构造。

必须要注意Android不允许任何阻塞UI线程的操作,所以要实现通信必须在自己的线程中进行,我提供的Rpc调用模式只能是 oneway(单向调用) ,async(异步调用)

实例:
  1 package test;
  2 
  3 
  4 import sns_mobile.*;
  5 
  6 import java.util.*;
  7 import tce.*;
  8 
  9 import java.nio.*;
 10 import java.io.*;
 11 
 12 public class SnsTestMain  {
 13     TsProxy tsprx = null;
 14     String token="dBmPPfxxohFmXjx4SUv46BffzmeYitbjmzT2mRHLttGaau4kiTvKEOpW2BJE0IGLEBFZ4lE/KrMKl7qE6pNmaBUfbixMrPEG/1Xfsp36P4lmZHhQfkVgyGWa8yi5g/swbMpg8h2ybC2dQShR18VFtQkXGpEUg8VfV1Fb0UllN6j/umVaBBQX7lgqcf3zkIaGcOpvS7FB6snC/PWU1crCf2gHrgnOmZgIaKmBF14dkJsSoozRGKiIpiCjJ7mRZ05og67ZmFfOaH2EnaCo3G1pmQcez7MOqCtIvNpGo5yivmZ6GyMA2eSIlFmD2Z7ysCrxzAt92UUCNwb9mkKZrUthjA==";
 15     
 16     double locs[]={436914.309600,112259.854800,436914.309600,112259.847600,436914.298800,112259.847600,436914.298800,112259.844000,436914.291600,112259.844000,436914.288000,112259.847600,436914.298800,112259.847600,436914.298800,112259.844000,436914.306000,112259.836800,436914.309600,112259.836800,436914.316800,112259.826000,436914.324000,112259.811600,436914.334800,112259.793600,436914.345600,112259.775600,436914.352800,112259.775600,436914.360000,112259.775600,436914.370800,112259.764800,436914.378000,112259.757600,436914.381600,112259.739600,436914.381600,112259.754000,436914.381600,112259.808000,436914.352800,112259.883600,436914.316800,112260.024000,436914.280800,112260.186000,436914.244800,112260.376800,436914.234000,112260.600000,436914.201600,112260.834000,436914.165600,112261.086000,436914.118800,112261.359600,436914.075600,112261.654800,436914.036000,112261.942800,436914.000000,112262.230800,436913.910000,112262.562000,436913.841600,112262.907600,436913.794800,112263.285600,436913.733600,112263.660000,436913.676000,112264.038000,436913.614800,112264.401600,436913.553600,112264.776000,436913.517600,112265.128800,436913.445600,112265.463600,436913.373600,112265.805600,436913.334000,112266.180000,436913.290800,112266.540000,436913.244000,112266.910800,436913.244000,112266.910800,436913.139600,112267.695600,436913.139600,112267.695600,436913.139600,112267.695600,436913.056800,112268.440800,436913.002800,112268.793600,436912.923600,112269.081600,436912.920000,112269.276000,436912.938000,112269.376800,436912.995600,112269.369600,436913.013600,112269.366000,436913.020800,112269.394800,436913.013600,112269.423600,436913.010000,112269.441600,436913.020800,112269.459600,436913.010000,112269.495600,436913.010000,112269.513600,436913.002800,112269.531600,436912.992000,112269.546000,436912.977600,112269.564000,436912.974000,112269.567600,436912.966800,112269.582000,436912.956000,112269.585600,436912.948800,112269.592800,436912.941600,112269.600000,436912.938000,112269.610800,436912.930800,112269.618000,436912.923600,112269.621600,436912.923600,112269.636000,436912.923600,112269.639600,436912.923600,112269.639600,436912.923600,112269.639600,436912.920000,112269.646800,436912.920000,112269.654000,436912.920000,112269.657600,436912.912800,112269.664800,436912.920000,112269.664800,436912.912800,112269.672000,436912.912800,112269.675600,436912.912800,112269.682800,436912.912800,112269.693600,436912.912800,112269.693600,436912.905600,112269.700800,436912.905600,112269.700800,436912.905600,112269.700800,436912.902000,112269.711600,436912.902000,112269.711600,436912.902000,112269.726000,436912.894800,112269.736800,436912.894800,112269.747600,436912.887600,112269.772800,436912.884000,112269.801600,436912.884000,112269.801600,436912.858800,112269.852000,436912.851600,112269.888000,436912.833600,112269.924000,436912.815600,112269.963600,436912.797600,112270.032000,436912.768800,112270.104000,436912.768800,112270.104000,436912.707600,112270.500000,436912.660800,112270.719600,436912.617600,112270.942800,436912.560000,112271.205600,436912.527600,112271.508000,436912.455600,112271.824800,436912.372800,112272.148800,436912.311600,112272.498000,436912.236000,112272.850800,436912.149600,112273.218000,436912.059600,112273.588800,436911.966000,112273.959600,436911.861600,112274.344800,436911.753600,112274.715600,436911.642000,112275.100800,436911.642000,112275.100800,436911.346800,112275.838800,436911.202800,112276.173600,436911.051600,112276.476000,436910.896800,112276.785600,436910.860800,112277.055600,436910.796000,112277.271600,436910.727600,112277.469600,436910.670000,112277.620800,436910.634000,112277.721600,436910.644800,112277.746800,436910.619600,112277.757600,436910.616000,112277.764800,436910.616000,112277.764800,436910.619600,112277.782800,436910.616000,112277.782800,436910.616000,112277.782800,436910.608800,112277.775600,436910.608800,112277.772000,436910.608800,112277.772000,436910.608800,112277.772000,436910.601600,112277.772000,436910.598000,112277.764800,436910.583600,112277.757600,436910.583600,112277.754000,436910.580000,112277.746800,436910.580000,112277.739600,436910.580000,112277.739600,436910.572800,112277.728800,436910.565600,112277.721600,436910.562000,112277.736000,436910.554800,112277.736000,436910.547600,112277.736000,436910.536800,112277.721600,436910.529600,112277.721600,436910.518800,112277.721600,436910.508000,112277.703600,436910.500800,112277.710800,436910.500800,112277.721600,436910.500800,112277.721600,436910.490000,112277.721600,436910.490000,112277.728800,436910.490000,112277.728800,436910.482800,112277.728800,436910.482800,112277.721600,436910.475600,112277.718000,436910.464800,112277.718000,436910.446800,112277.710800,436910.436000,112277.703600,436910.418000,112277.703600,436910.403600,112277.703600,436910.385600,112277.692800,436910.382000,112277.700000,436910.374800,112277.692800,436910.364000,112277.685600,436910.356800,112277.685600,436910.356800,112277.685600,436910.349600,112277.685600,436910.349600,112277.685600,436910.346000,112277.692800,436910.346000,112277.692800,436910.338800,112277.692800,436910.338800,112277.692800,436910.338800,112277.692800,436910.328000,112277.685600,436910.328000,112277.685600,436910.320800,112277.685600,436910.313600,112277.685600,436910.310000,112277.682000,436910.310000,112277.682000,436910.310000,112277.682000,436910.302800,112277.674800,436910.302800,112277.667600,436910.295600,112277.667600,436910.292000,112277.664000,436910.292000,112277.664000,436910.292000,112277.667600,436910.277600,112277.667600,436910.266800,112277.667600,436910.259600,112277.667600,436910.248800,112277.674800,436910.241600,112277.674800,436910.238000,112277.674800,436910.223600,112277.667600,436910.220000,112277.667600,436910.220000,112277.667600,436910.212800,112277.667600,436910.220000,112277.674800,436910.220000,112277.674800,436910.223600,112277.682000,436910.223600,112277.685600,436910.220000,112277.700000,436910.202000,112277.703600,436910.176800,112277.739600,436910.140800,112277.790000,436910.122800,112277.862000,436910.079600,112277.901600,436910.043600,112277.973600,436910.007600,112278.042000,436909.953600,112278.132000,436909.914000,112278.207600,436909.647600,112278.402000,436909.528800,112278.924000,436909.410000,112279.230000,436909.276800,112279.518000,436909.143600,112279.770000,436909.071600,112279.968000,436908.996000,112280.166000,436908.898800,112280.385600,436908.808800,112280.634000,436908.754800,112280.904000,436908.682800,112281.220800,436908.610800,112281.490800,436908.513600,112281.807600,436908.351600,112282.239600,436908.207600,112282.653600,436908.063600,112283.056800,436907.898000,112283.445600,436907.746800,112283.802000,436907.746800,112283.802000,436907.343600,112284.496800,436907.188800,112284.813600,436907.052000,112285.116000,436906.947600,112285.422000,436906.857600,112285.720800,436906.720800,112286.055600,436906.720800,112286.055600,436906.440000,112286.674800,436906.440000,112286.674800,436906.288800,112287.042000,436906.288800,112287.042000,436906.000800,112287.934800,436905.864000,112288.330800,436905.712800,112288.701600,436905.558000,112289.061600,436905.414000,112289.410800,436905.288000,112289.745600,436905.162000,112290.084000,436905.036000,112290.408000,436905.039600,112290.699600,436905.057600,112291.005600,436905.093600,112291.200000,436905.324000,112291.326000,436905.478800,112291.473600,436905.756000,112291.506000,436906.054800,112291.506000,436906.353600,112291.524000,436906.677600,112291.542000,436907.008800,112291.563600,436907.358000,112291.588800,436907.728800,112291.596000,436908.114000,112291.596000,436908.520800,112291.596000,436908.960000,112291.560000,436908.960000,112291.560000,436909.863600,112291.480800,436909.863600,112291.480800,436910.320800,112291.437600,436910.320800,112291.437600,436911.246000,112291.380000,436911.246000,112291.380000,436911.246000,112291.380000,436912.149600,112291.362000,436912.578000,112291.380000,436912.948800,112291.398000,436913.283600,112291.416000,436913.578800,112291.419600,436913.820000,112291.426800,436914.010800,112291.426800,436914.172800,112291.437600,436914.324000,112291.444800,436914.435600,112291.437600,436914.514800,112291.434000,436914.576000,112291.437600,436914.622800,112291.434000,436914.648000,112291.434000,436914.658800,112291.444800,436914.666000,112291.444800,436914.669600,112291.452000,436914.669600,112291.455600,436914.676800,112291.452000,436914.676800,112291.452000,436914.687600,112291.452000,436914.694800,112291.452000,436914.694800,112291.452000,436914.694800,112291.444800,436914.702000,112291.452000,436914.702000,112291.444800,436914.702000,112291.452000,436914.694800,112291.452000,436914.694800,112291.452000,436914.687600,112291.455600,436914.687600,112291.470000,436914.687600,112291.473600,436914.684000,112291.488000,436914.676800,112291.491600,436914.676800,112291.506000,436914.669600,112291.516800,436914.669600,112291.524000,436914.669600,112291.524000,436914.666000,112291.527600,436914.666000,112291.534800,436914.658800,112291.534800,436914.651600,112291.542000,436914.648000,112291.545600,436914.640800,112291.545600,436914.640800,112291.552800,436914.633600,112291.545600,436914.630000,112291.542000,436914.630000,112291.545600,436914.666000,112291.545600,436914.756000,112291.545600,436914.900000,112291.542000,436914.900000,112291.542000,436915.342800,112291.578000,436915.342800,112291.578000,436915.342800,112291.578000,436915.929600,112291.632000,436916.271600,112291.650000,436916.628000,112291.668000,436916.998800,112291.686000,436917.402000,112291.707600,436917.816000,112291.740000,436918.230000,112291.768800,436918.654800,112291.794000,436919.094000,112291.833600,436919.544000,112291.887600,436919.986800,112291.966800,436920.400800,112292.046000,436920.771600,112292.139600,436921.131600,112292.218800,436921.488000,112292.308800,436921.848000,112292.398800,436922.200800,112292.481600,436922.532000,112292.560800,436922.830800,112292.632800,436923.118800,112292.715600,436923.406800,112292.805600,436923.712800,112292.902800,436924.054800,112292.992800,436924.432800,112293.082800,436924.821600,112293.190800,436925.235600,112293.316800,436925.235600,112293.316800,436926.142800,112293.568800,436926.636000,112293.702000,436927.125600,112293.864000,436927.611600,112294.018800,436928.112000,112294.170000,436928.619600,112294.332000,436928.619600,112294.332000,436929.616800,112294.666800,436930.113600,112294.857600,436930.588800,112295.037600,436931.031600,112295.199600,436931.424000,112295.361600,436931.787600,112295.505600,436932.090000,112295.638800,436932.334800,112295.754000,436932.540000,112295.847600,436932.705600,112295.934000,436932.820800,112295.988000,436932.892800,112296.027600,436932.918000,112296.042000,436932.921600,112296.042000,436932.921600,112296.045600,436932.928800,112296.042000,436932.928800,112296.045600,436932.936000,112296.042000,436932.936000,112296.045600,436932.928800,112296.045600,436932.928800,112296.060000,436932.921600,112296.070800,436932.921600,112296.070800,436932.928800,112296.063600,436932.939600,112296.052800,436932.936000,112296.063600,436932.928800,112296.078000,436932.928800,112296.070800,436932.936000,112296.070800,436932.936000,112296.070800,436932.936000,112296.078000,436932.939600,112296.070800,436932.946800,112296.063600,436932.954000,112296.060000,436932.954000,112296.060000,436932.946800,112296.070800,436932.954000,112296.078000,436932.946800,112296.078000,436932.939600,112296.096000,436932.939600,112296.096000,436932.939600,112296.081600,436932.939600,112296.078000,436932.939600,112296.078000,436932.939600,112296.070800,436932.939600,112296.063600,436932.939600,112296.078000,436932.939600,112296.078000,436932.928800,112296.106800,436932.928800,112296.106800,436932.918000,112296.117600,436932.918000,112296.117600,436932.918000,112296.117600,436932.921600,112296.124800,436932.910800,112296.142800,436932.903600,112296.135600,436932.903600,112296.132000,436932.900000,112296.153600,436932.892800,112296.160800,436932.892800,112296.168000,436932.892800,112296.168000,436932.885600,112296.171600,436932.882000,112296.186000,436932.892800,112296.196800,436932.946800,112296.214800,436933.047600,112296.243600,436933.206000,112296.297600,436933.404000,112296.384000,436933.630800,112296.492000,436933.890000,112296.621600,436934.188800,112296.765600,436934.188800,112296.765600,436934.847600,112297.096800,436935.196800,112297.251600,436935.538800,112297.413600,436935.880800,112297.593600,436936.248000,112297.752000,436936.618800,112297.953600,436937.007600,112298.176800,436937.400000,112298.385600,436937.400000,112298.385600,436938.249600,112298.824800,436938.732000,112299.040800,436939.218000,112299.282000,436939.707600,112299.519600,436940.211600,112299.760800,436940.722800,112300.005600,436941.226800,112300.254000,436941.730800,112300.516800,436942.242000,112300.779600,436942.749600,112301.056800,436943.235600,112301.337600,436943.703600,112301.622000,436944.150000,112301.884800,436944.567600,112302.162000,436944.978000,112302.406800,436945.359600,112302.658800,436945.359600,112302.658800,436946.061600,112303.108800,436946.374800,112303.296000,436946.374800,112303.296000,436946.374800,112303.296000,436946.878800,112303.605600,436947.105600,112303.767600,436947.364800,112303.929600,436947.642000,112304.106000,436947.948000,112304.296800,436948.275600,112304.494800,436948.635600,112304.700000,436948.995600,112304.898000,436949.370000,112305.106800,436949.766000,112305.333600,436950.183600,112305.592800,436950.612000,112305.862800,436951.047600,112306.140000,436951.479600,112306.410000,436951.929600,112306.672800,436952.376000,112306.942800,436952.811600,112307.223600,436952.811600,112307.223600,436953.693600,112307.778000,436954.125600,112308.030000,436954.536000,112308.282000,436954.924800,112308.519600,436955.302800,112308.760800,436955.680800,112308.994800,436956.033600,112309.218000,436956.357600,112309.426800,436956.642000,112309.606800,436956.876000,112309.750800,436957.077600,112309.876800,436957.077600,112309.876800,436957.383600,112310.064000,436957.488000,112310.128800,436957.570800,112310.172000,436957.635600,112310.200800,436957.689600,112310.236800,436957.732800,112310.254800,436957.758000,112310.272800,436957.768800,112310.265600,436957.776000,112310.265600,436957.768800,112310.262000,436957.776000,112310.262000,436957.768800,112310.265600,436957.768800,112310.262000,436957.776000,112310.265600,436957.797600,112310.283600,436957.866000,112310.326800,436957.948800,112310.373600,436958.067600,112310.445600,436958.211600,112310.532000,436958.373600,112310.640000,436958.560800,112310.748000,436958.766000,112310.866800,436959.000000,112311.003600,436959.270000,112311.162000,436959.540000,112311.316800,436959.828000,112311.489600,436960.144800,112311.684000,436960.494000,112311.900000,436960.857600,112312.126800,436961.253600,112312.360800,436961.656800,112312.623600,436962.070800,112312.893600,436962.502800,112313.178000,436962.952800,112313.469600,436963.402800,112313.746800,436963.860000,112314.024000,436964.320800,112314.294000,436964.320800,112314.294000,436965.220800,112314.826800,436965.688800,112315.071600,436966.185600,112315.287600,436966.686000,112315.503600,436967.175600,112315.708800,436967.676000,112315.899600,436968.162000,112316.094000,436968.612000,112316.248800,436969.011600,112316.400000,436969.378800,112316.526000,436969.702800,112316.637600,436969.998000,112316.752800,436970.250000,112316.860800,436970.469600,112316.940000,436970.656800,112317.004800,436970.818800,112317.058800,436970.973600,112317.112800,436971.142800,112317.174000,436971.315600,112317.231600,436971.510000,112317.303600,436971.726000,112317.372000,436971.978000,112317.447600,436972.266000,112317.537600,436972.590000,112317.645600,436972.932000,112317.753600,436973.292000,112317.861600,436973.680800,112317.969600,436974.069600,112318.066800,436974.465600,112318.156800,436974.850800,112318.239600,436975.246800,112318.326000,436975.246800,112318.326000,436976.092800,112318.488000,436976.517600,112318.570800,436976.982000,112318.678800,436977.450000,112318.794000,436977.910800,112318.923600,436978.368000,112319.046000,436978.821600,112319.164800,436979.289600,112319.290800,436979.782800,112319.424000,436980.297600,112319.535600,436980.819600,112319.643600,436981.356000,112319.758800,436981.896000,112319.874000,436982.439600,112320.003600,436983.004800,112320.136800,436983.570000,112320.270000,436984.149600,112320.417600,436984.732800,112320.568800,436985.298000,112320.741600,436985.859600,112320.921600,436986.424800,112321.108800,436986.982800,112321.317600,436987.540800,112321.540800,436988.088000,112321.764000,436988.620800,112322.008800,436989.142800,112322.260800,436989.654000,112322.523600,436990.143600,112322.790000,436990.618800,112323.052800,436991.094000,112323.286800,436991.580000,112323.502800,436992.066000,112323.690000,436992.534000,112323.837600,436992.951600,112323.978000,436993.318800,112324.089600,436993.624800,112324.179600,436993.887600,112324.251600,436993.887600,112324.251600,436994.298000,112324.374000,436994.445600,112324.420800,436994.568000,112324.464000,436994.640000,112324.482000,436994.650800,112324.485600,436994.650800,112324.485600,436994.643600,112324.482000,436994.643600,112324.482000,436994.643600,112324.474800,436994.643600,112324.482000,436994.643600,112324.482000,436994.640000,112324.482000,436994.640000,112324.482000,436994.640000,112324.474800,436994.640000,112324.474800,436994.640000,112324.467600,436994.640000,112324.464000,436994.640000,112324.456800,436994.640000,112324.449600,436994.640000,112324.446000,436994.640000,112324.446000,436994.643600,112324.438800,436994.640000,112324.438800,436994.640000,112324.438800,436994.640000,112324.438800,436994.643600,112324.431600,436994.650800,112324.431600,436994.650800,112324.428000,436994.650800,112324.420800,436994.650800,112324.413600,436994.658000,112324.410000,436994.658000,112324.402800,436994.661600,112324.395600,436994.661600,112324.395600,436994.668800,112324.395600,436994.676000,112324.392000,436994.679600,112324.384800,436994.686800,112324.377600,436994.694000,112324.377600,436994.697600,112324.377600,436994.704800,112324.377600,436994.712000,112324.377600,436994.712000,112324.377600,436994.715600,112324.377600,436994.715600,112324.384800,436994.722800,112324.384800,436994.722800,112324.384800,436994.722800,112324.384800,436994.730000,112324.384800,436994.730000,112324.384800,436994.733600,112324.392000,436994.740800,112324.392000,436994.740800,112324.395600,436994.740800,112324.395600,436994.766000,112324.402800,436994.838000,112324.420800,436994.949600,112324.456800,436995.090000,112324.492800,436995.244800,112324.521600,436995.432000,112324.539600,436995.612000,112324.539600,436995.784800,112324.536000,436995.936000,112324.500000,436996.054800,112324.428000,436996.170000,112324.287600,436996.299600,112324.089600,436996.378800,112323.906000,436996.468800,112323.690000,436996.551600,112323.441600,436996.648800,112323.186000,436996.756800,112322.916000,436996.854000,112322.638800,436996.972800,112322.379600,436997.055600,112322.134800,436997.055600,112322.134800,436997.232000,112321.648800,436997.314800,112321.386000,436997.415600,112321.116000,436997.548800,112320.813600,436997.682000,112320.507600,436997.800800,112320.198000,436997.908800,112319.892000,436997.991600,112319.586000,436998.060000,112319.316000,436998.114000,112319.049600,436998.186000,112318.858800,436998.268800,112318.725600,436998.286800,112318.624800,436998.297600,112318.560000,436998.304800,112318.534800,436998.312000,112318.524000,436998.294000,112318.506000,436998.276000,112318.498800,436998.261600,112318.498800,436998.258000,112318.491600,436998.258000,112318.491600,436998.243600,112318.480800,436998.243600,112318.473600,436998.232800,112318.470000,436998.225600,112318.462800,436998.222000,112318.452000,436998.207600,112318.444800,436998.214800,112318.434000,436998.222000,112318.408800,436998.225600,112318.354800,436998.243600,112318.290000,436998.240000,112318.236000,436998.207600,112318.182000,436998.214800,112318.156800,436998.214800,112318.149600,436998.225600,112318.156800,436998.232800,112318.156800,436998.232800,112318.156800,436998.232800,112318.156800,436998.243600,112318.164000,436998.243600,112318.167600,436998.240000,112318.167600,436998.240000,112318.167600,436998.225600,112318.167600,436998.225600,112318.174800,436998.214800,112318.174800,436998.207600,112318.167600,436998.196800,112318.174800,436998.186000,112318.174800,436998.178800,112318.174800,436998.178800,112318.174800,436998.168000,112318.182000,436998.160800,112318.182000,436998.153600,112318.182000,436998.150000,112318.185600,436998.150000,112318.185600,436998.142800,112318.192800,436998.142800,112318.192800,436998.135600,112318.192800,436998.135600,112318.185600,436998.132000,112318.185600,436998.132000,112318.164000,436998.135600,112318.102800,436998.135600,112318.020000,436998.117600,112317.922800,436998.070800,112317.807600,436998.045600,112317.678000,436998.045600,112317.678000,436998.016800,112317.444000,436998.006000,112317.310800,436997.998800,112317.202800,436998.052800,112317.040800,436998.214800,112316.796000,436998.261600,112316.619600,436998.322800,112316.482800,436998.322800,112316.482800,436998.322800,112316.482800,436998.441600,112316.205600,436998.502800,112316.032800,436998.574800,112315.834800,436998.657600,112315.600800,436998.747600,112315.338000,436998.855600,112315.042800,436998.945600,112314.718800,436999.053600,112314.405600,436999.176000,112314.099600,436999.302000,112313.782800,436999.428000,112313.469600,436999.528800,112313.178000,436999.644000,112312.911600,436999.734000,112312.666800,436999.824000,112312.422000,436999.906800,112312.188000,437000.004000,112311.964800,437000.086800,112311.756000,437000.158800,112311.568800,437000.158800,112311.568800,437000.284800,112311.252000,437000.284800,112311.252000,437000.284800,112311.252000,437000.364000,112311.003600,437000.364000,112311.003600,437000.364000,112311.003600,437000.392800,112310.841600,437000.367600,112310.740800,437000.392800,112310.658000,437000.428800,112310.578800,437000.446800,112310.506800,437000.457600,112310.442000,437000.454000,112310.352000,437000.446800,112310.236800,437000.464800,112310.121600,437000.500800,112310.002800,437000.547600,112309.866000,437000.616000,112309.722000,437000.698800,112309.578000,437000.778000,112309.473600,437000.824800,112309.390800,437000.868000,112309.336800,437000.914800,112309.290000,437000.950800,112309.236000,437000.979600,112309.164000,437001.022800,112309.066800,437001.058800,112308.969600,437001.058800,112308.969600,437001.120000,112308.771600,437001.130800,112308.670800,437001.174000,112308.573600,437001.213600,112308.472800,437001.264000,112308.357600,437001.321600,112308.213600,437001.382800,112308.069600,437001.465600,112307.922000,437001.562800,112307.770800,437001.642000,112307.626800,437001.699600,112307.464800,437001.771600,112307.284800,437001.832800,112307.079600,437001.879600,112306.881600,437001.879600,112306.665600,437001.933600,112306.500000,437001.966000,112306.359600,437002.005600,112306.230000,437002.048800,112306.078800,437002.092000,112305.927600,437002.146000,112305.783600,437002.185600,112305.636000,437002.239600,112305.484800,437002.300800,112305.333600,437002.365600,112305.196800,437002.419600,112305.060000,437002.419600,112305.060000,437002.491600,112304.826000,437002.534800,112304.721600,437002.570800,112304.620800,437002.596000,112304.520000,437002.606800,112304.430000,437002.624800,112304.343600,437002.635600,112304.278800,437002.632000,112304.232000,437002.635600,112304.196000,437002.635600,112304.170800,437002.635600,112304.152800,437002.614000,112304.142000,437002.588800,112304.134800,437002.563600,112304.124000,437002.542000,112304.116800,437002.542000,112304.109600,437002.527600,112304.106000,437002.527600,112304.088000,437002.534800,112304.062800,437002.545600,112304.019600,437002.570800,112303.980000,437002.596000,112303.929600,437002.632000,112303.872000,437002.668000,112303.785600,437002.707600,112303.713600,437002.750800,112303.638000,437002.804800,112303.551600,437002.833600,112303.461600,437002.858800,112303.371600,437002.866000,112303.296000,437002.894800,112303.216800,437002.941600,112303.170000,437003.028000,112303.144800,437003.103600,112303.152000,437003.190000,112303.170000,437003.290800,112303.173600,437003.406000,112303.191600,437003.571600,112303.206000,437003.740800,112303.263600,437003.928000,112303.314000,437004.126000,112303.360800,437004.342000,112303.414800,437004.342000,112303.414800,437004.810000,112303.558800,437004.810000,112303.558800,437005.029600,112303.602000,437005.029600,112303.602000,437005.342800,112303.767600,437005.512000,112303.836000,437005.677600,112303.890000,437005.893600,112303.864800,437006.109600,112303.900800,437006.314800,112303.954800,437006.505600,112304.016000,437006.685600,112304.080800,437006.865600,112304.134800,437007.070800,112304.206800,437007.286800,112304.304000,437007.567600,112304.448000,437007.909600,112304.613600,437008.230000,112304.757600,437008.518000,112304.880000,437008.806000,112304.934000,437009.076000,112304.944800,437009.310000,112304.880000,437009.547600,112304.818800,437009.716800,112304.746800,437009.868000,112304.631600,437010.004800,112304.433600,437010.130800,112304.235600,437010.202800,112304.080800,437010.282000,112303.918800,437010.336000,112303.767600,437010.390000,112303.638000,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800,437010.444000,112303.504800};
 17     public   int  ii=100;
 18     
 19     
 20     Ts_verify_r_Result_t user_ok = null;
 21     
 22     Terminal termthis = null;
 23     RpcCommAdapter adapter = null;
 24     Thread thread;
 25     SnsTestMain(){
 26         
 27         
 28         thread = new Thread(new Runnable(){
 29             public void run(){
 30                 try{
 31                     while(true){
 32                         Thread.sleep(2000);
 33                         if(tsprx!=null){
 34                             heartbeat();
 35                             send_gps();
 36                         }
 37                         
 38                     }
 39                 }catch(Exception e){
 40                     System.out.println(e.toString());
 41                     System.out.println("thread exiting");
 42                 }
 43             }
 44             
 45         });
 46         //thread.start();
 47         
 48         initServant();
 49     }
 50     
 51     void initServant(){
 52         adapter = RpcCommunicator.instance().createAdapter("termimal",  RpcConsts.MSG_ENCODE_XML);
 53         termthis = new Terminal(){
 54             @Override
 55             public void hello(RpcContext ctx){
 56                 
 57             }
 58         };
 59         adapter.addServant(termthis);
 60     }
 61     
 62     void heartbeat(){
 63         Ts_heartbeat_p_User_t user = new Ts_heartbeat_p_User_t();
 64         user.id = user_ok.user.id;
 65         tsprx.heartbeat_oneway(user);
 66     }
 67     
 68 
 69     void send_gps(){
 70         Ts_gps_p_GPS_t gps = new Ts_gps_p_GPS_t();
 71         gps.lon= Float.valueOf((float)121.2004);
 72         gps.lat= Float.valueOf((float)31.1234);
 73         gps.speed = (float)0.0;
 74         gps.direction = (float)35.5;
 75         gps.time = new Date().getSeconds();
 76         Ts_gps_p_Properties_t props = new Ts_gps_p_Properties_t();
 77         props.senderid = user_ok.user.id;
 78         props.target_type="2";
 79         props.users="1001,1002";
 80         props.groups="2001,2001";
 81         tsprx.gps_oneway(gps, props);
 82         
 83     }
 84     
 85     public Tc_redirect_r_Result_t test_redirect(){
 86         
 87         TcProxy tc = TcProxy.createWithXML("172.26.181.193"8881); //8889
 88         Tc_redirect_p_User_t user = new Tc_redirect_p_User_t();
 89         user.token = token;
 90         Tc_redirect_r_Result_t r = null;
 91         try{
 92             tc.redirect_async(user, new Tc_AsyncCallBack(){
 93                 @Override
 94                 public void redirect(Tc_redirect_r_Result_t result,RpcProxyBase proxy){
 95                     System.out.println(String.format("%s %d", result.tc_srv_ip,result.tc_srv_port));
 96                     //到这里重定向调度okay
 97                     test_verify(result.tc_srv_ip,result.tc_srv_port);
 98                 }
 99                 @Override
100                 protected void onError(String name,String msg,RpcProxyBase proxy){
101                     System.out.println(String.format("error: %s msg:%s",name,msg));
102                 }
103             });
104             //tc.destroy();
105         }catch(Exception e){
106             System.out.println(e.toString());
107             return null;
108         }
109         return r;
110     }
111     
112     public Tc_redirect_r_Result_t test_verify(String host,int port){
113         tsprx = TsProxy.createWithXML(host, port);
114         Ts_verify_p_User_t user = new Ts_verify_p_User_t();
115         user.token = token;
116         try{
117             tsprx.verify_async(user, new Ts_AsyncCallBack(){
118                 @Override
119                 public void verify(Ts_verify_r_Result_t result,RpcProxyBase proxy){
120                     System.out.println(String.format("verify back() msg:%s code:%d gourps.length:%d", result.msg,result.code,result.groups.size()));
121                     user_ok = result;
122                     tsprx.conn.attachAdapter(adapter);
123                     send_gps();
124                 }
125             });
126             //ts.destroy();
127         }catch(Exception e){
128             System.out.println(e.toString());
129             return null;
130         }
131         return null;
132     }
133     
134     
135     public static void test(){
136         SnsTestMain sns = new SnsTestMain();
137         sns.test_redirect();
138     }
139     
140     public static void mainxxx(String[] args) {
141         SnsTestMain.test();
142 
143     }
144
145 }
146 


IDL 语法树结构 python+ ply
lexical.py
  1 import    sys
  2 
  3 language = 'py'
  4 arch = '32'
  5 
  6 class SyntexTreeNode:
  7     def __init__(self,name):
  8         self.name = None
  9 
 10 class Container:
 11     def __init__(self,name=''):
 12 #        SyntexTreeNode.__init__(self,name)
 13         self.children={}
 14         self.list=[]
 15         
 16     def addChild(self,c):
 17         #self.children.append(c)
 18         self.children[c.getName()] = c
 19         self.list.append(c)
 20     
 21     def createStruct(self,st):
 22         pass
 23         
 24     def createInterface(self,ifc):
 25         pass
 26         
 27     def createSequence(self,seq):
 28         pass
 29         
 30     def createDictionary(self,dict):
 31         pass
 32     
 33     def createEnumeration(self,enm):
 34         pass
 35     
 36     def createUnit(self,unit):
 37         pass
 38     
 39 
 40         
 41     
 42         
 43 class Contained:
 44     def __init__(self,container=None):
 45         self.container =container
 46         
 47 class TypeId:
 48     def __init__(self,type,id): #变量定义  type id;
 49         self.type = type # int name  , <int> is type, <name> is id
 50         self.id = id
 51 
 52 
 53 class TypeBase:
 54     def __init__(self,name):
 55         self.name = name
 56         self.idx = 0 #索引,用于数据序列化时类型识别
 57         #self.type = name
 58 
 59     def getName(self):
 60         return self.name
 61 
 62     def getTypeDefaultValue(self):
 63         if language == 'py':
 64             return '%s()'%self.name
 65         if language =='as':
 66             return 'new %s()'%self.name
 67         if language =='cpp':
 68             return '%s()'%self.name
 69         if language =='java':
 70             return 'new %s()'%self.name
 71 
 72     def getMappingTypeName(self):
 73         r = self.name
 74 
 75         return r
 76         
 77 class DataMember(Contained):
 78     def __init__(self,d,container): # d - type_id
 79         Contained.__init__(self,container)
 80         self.d = d
 81         self.name = d.id
 82         self.type = d.type
 83     
 84 class Sequence(Contained,TypeBase):
 85     def __init__(self,name,type):
 86         TypeBase.__init__(self,name)
 87         self.type = type # sequence<type> name;
 88         self.valuetype = type
 89 
 90     def getTypeDefaultValue(self):
 91         if language == 'py':
 92             return '[]'
 93         if language == 'as':
 94             return 'new Array()'
 95         if language =='cpp':
 96             return 'std::vector< %s >()'%self.type.getMappingTypeName()
 97         if language =='java':
 98             return 'new Vector<%s>()'%self.type.getMappingTypeName()
 99 
100     def getMappingTypeName(self):
101         r = ''
102         if language == 'as':
103             r = 'Array'
104 
105         if language =='cpp':
106             return 'std::vector< %s >'%self.type.getMappingTypeName()
107         if language =='java':
108             return 'Vector<%s>'%self.type.getMappingTypeName()
109 
110         return r
111         
112 class Dictionary(Contained,TypeBase):
113     def __init__(self,name,first,second):
114         TypeBase.__init__(self,name)
115         self.first = first
116         self.second = second
117 
118     def getTypeDefaultValue(self):
119         if language =='py':
120             return '{}'
121         if language == 'as':
122             return 'new HashMap()'
123 
124         if language == 'cpp':
125             #return 'boost::shared_ptr< std::map<%s,%s> >( new std::map<%s,%s>()) '%(self.first.name,self.second.name,self.first.name,self.second.name)
126 #            return '%s::hash_type()'%self.name
127             return 'std::map< %s,%s >()'%(self.first.getMappingTypeName(),self.second.getMappingTypeName())
128         if language =='java':
129             return 'new Hashtable<%s,%s>()'%(self.first.getMappingTypeName(),
130                                              self.second.getMappingTypeName()
131                                             )
132 
133 
134     def getMappingTypeName(self):
135         r = ''
136         if language == 'as':
137             r = 'HashMap'
138         if language =='cpp':
139 #            return 'boost::shared_ptr< std::map<%s,%s> >'%(self.first.name,self.second.name)
140 #            return '%s::hash_type'%(self.name)
141             r = 'std::map< %s,%s >'%(self.first.getMappingTypeName(),self.second.getMappingTypeName() )
142 
143         if language == 'java':
144             r = 'Hashtable< %s,%s >'%(self.first.getMappingTypeName(),self.second.getMappingTypeName() )
145 
146         return r
147 
148 class Enumeration(Contained,TypeBase):
149     def __init__(self,name):
150         TypeBase.__init__(name)
151         
152 class OperateMember(Contained):
153     def __init__(self,name,type,params):
154         self.name = name
155         self.type = type # callreturn  [ type  foo(params) ]
156         self.params = params
157         pass
158         
159 class Struct(Container,Contained,TypeBase):
160     def __init__(self,name):
161         Container.__init__(self)
162         Contained.__init__(self)
163         TypeBase.__init__(self,name)
164         
165     def createDataMember(self,dm):
166         if self.children.has_key(dm.id):
167             return False
168         e = DataMember(dm,self)
169         self.children[dm.id] = e
170         self.list.append(e)
171         return True
172         
173     
174     
175 class Interface(Container,Contained,TypeBase):
176     def __init__(self,name):
177         Container.__init__(self)
178         Contained.__init__(self)
179         TypeBase.__init__(self,name)
180 
181 
182     
183     def createOperateMember(self,opm):
184 
185         if self.children.has_key(opm.name):
186             return False
187         self.children[opm.name] = opm
188         self.list.append(opm)
189 
190         return True
191         
192 class Unit(Container):
193     def __init__(self):
194         Container.__init__(self)
195         pass
196         
197     
198 class Builtin(TypeBase):
199     def __init__(self,type):
200         TypeBase.__init__(self,type)
201         self.type = type
202     
203     tables =[
204             'byte',
205             'bool',
206             'short',
207             'int',
208             'long',
209             'float',
210             'double',
211             'string',
212             ]
213 
214     @staticmethod
215     def isBuiltinType(type):
216         return Builtin.tables.count(type)
217 
218     def getTypeDefaultValue(self):
219         r = 'None'
220         type = self.type
221         if type in ('byte','short','int','long'):
222             r = '0'
223             if language == 'java':
224                 if type == 'byte':
225                     #r= '%s.valueOf( (byte)0)'%self.getMappingTypeName()
226                     r = '0'
227                 else:
228                     r = '%s.valueOf(0)'%self.getMappingTypeName()
229 
230         elif type in ('float','double'):
231             r = '0.0'
232             if language == 'java':
233                 r = '%s.valueOf(0)'%self.getMappingTypeName()
234 
235         elif type in ('bool'):
236             r = 'False'
237             if language in ('as','cpp'):
238                 r = 'false'
239 #            if language == 'cpp':
240 #                r = 'false'
241             if language == 'java':
242                 r = '%s.valueOf(false)'%self.getMappingTypeName()
243 
244         elif type in ('string'):
245             r = "''"
246             if language in ('as','cpp','java'):
247                 r ="\"\""
248 #            if language =='cpp':
249 #                r = "\"\""
250 
251         return r
252 
253     def getMappingTypeName(self):
254         r = '-^|^*'*5
255 
256         if language == 'as':
257             type = self.type
258             if type in ('byte',) : #'bool'):
259                 r ='uint'
260             if type in ('bool',):
261                 r = 'Boolean'
262             if type in ('short','int'):
263                 r = 'int'
264             elif type in ('float','long','double'):
265                 r = 'Number'
266             elif type in ('string'):
267                 r = "String"
268             elif type in ('void'):
269                 r ='void'
270 
271         if language == 'cpp':
272             type = self.type
273 
274             if type in ('byte',) : #'bool'):
275                 r ='unsigned char'
276             if type in ('bool',):
277                 r = 'bool'
278             if type in ('short',):
279                 r ='short'
280             if type in ('int',):
281                 r = 'int'
282             elif type in ('float',):
283                 r = type
284             elif type in ('long',):
285                 r = type
286                 if arch =='32':
287                     r = 'long long'
288             elif type in ('double',):
289                 r = type
290             elif type in ('string'):
291                 r = "std::string"
292             elif type in ('void'):
293                 r ='void'
294 
295         if language == 'java':
296             type = self.type
297 
298             if type in ('byte',) : #'bool'):
299                 r ='Byte'
300             if type in ('bool',):
301                 r = 'Boolean'
302             if type in ('short',):
303                 r ='Short'
304             if type in ('int',):
305                 r = 'Integer'
306             elif type in ('float',):
307                 r = 'Float'
308             elif type in ('long',):
309                 r = 'Long'
310 
311             elif type in ('double',):
312                 r = 'Double'
313             elif type in ('string'):
314                 r = "String"
315             elif type in ('void'):
316                 r ='void'
317 
318         return r
319 
320     @staticmethod
321     def id(name):
322         pass
323 
324     @staticmethod
325     def str(id_):
326         pass
327         
328 types_def={}
329 kwds=['struct',
330       'interface',
331       'sequence',
332       'dictionary',
333       'exception',
334       'void'
335       ]
336 
337 def getTypeDef(type):
338     t = types_def.get(type,None)
339     return t
340 
341 #检测变量名称是否合法
342 def checkVariantName(name,all=True):
343     if kwds.count(name):
344         return False
345     if all:
346         if getTypeDef(name):
347             return False
348     return True
349 
350 def initBuiltinTypes():
351     for t in Builtin.tables:
352         types_def[t] = Builtin(t)
353 
354 types_def['void'= Builtin('void')
355 
356 initBuiltinTypes()
357     
358 unit=None


继续贴 语法代码 grammar.py
  1 #--coding:utf-8--
  2 
  3 
  4 #scott  shanghai china
  5 # qq:24509826 msn: socketref@hotmail.com
  6 #
  7 
  8 import    sys
  9 
 10 
 11 
 12 if    ".."    not    in    sys.path:    sys.path.insert(0,"..")
 13 
 14 import os,sys,os.path,struct,time,traceback,string
 15 
 16 import    ply.lex    as    lex
 17 import ply.yacc as yacc
 18 
 19 from lexparser import *
 20 import lexparser as myparser
 21 
 22 '''
 23 默认是SLR,我们也可以通过参数指定为 LALR(
 24 
 25 idl
 26 interface定义 函数参数保留名称: d,idx,m
 27 '''
 28 
 29 
 30 tokens=(
 31         'IDENTIFIER','STRUCT','NUMBER','INTERFACE',
 32         'SEQUENCE','DICTIONARY','EXCEPTION','COMMENTLINE',
 33 #        'VOID',
 34 
 35     )
 36 
 37 def t_COMMENTLINE(t):
 38     '//.*\n'
 39 
 40 def t_SEQUENCE(t):
 41     'sequence'
 42     return t
 43 
 44 def t_DICTIONARY(t):
 45     'dictionary'
 46     return t
 47 
 48 
 49 def t_STRUCT(t):
 50     'struct'
 51     return t
 52 
 53 
 54 def t_INTERFACE(t):
 55     'interface'
 56     return t
 57 
 58 #def t_VOID(t):
 59 #    'void'
 60 #    return t
 61 
 62 def t_IDENTIFIER(t):
 63     '[A-Za-z_][A-Za-z0-9_]*'
 64     return t
 65 
 66 t_NUMBER=r'\d+([uU]|[lL]|[uU][lL]|[lL][uU])?'
 67 
 68 t_ignore    ="     \t"
 69 
 70 def    t_newline(t):
 71     r'\n+'
 72     t.lexer.lineno    +=    1 #int(t.value) #.count("\n")
 73 
 74 
 75 def    t_error(t):
 76     print("Illegal    character    '%s'"    %    t.value[0])
 77     t.lexer.skip(1)
 78 
 79 literals = [ '{','}',';','(',')','<','>',',' ]
 80 
 81 #    Build    the    lexer
 82 lexer = lex.lex()
 83 
 84 #literals = [ ':',',','(',')' ]
 85 
 86 
 87 
 88 #lexer.input(data)
 89 
 90 #while 1:
 91 #    tok = lexer.token()
 92 #    if not tok: break    
 93     #print tok.type,tok.value
 94 #sys.exit()
 95 
 96 
 97 def p_start(t):
 98     '''start : definations
 99     '''
100 
101     defs = t[1]
102     unit = Unit()
103 
104     defs.reverse()
105 
106 #    print defs
107     for d in defs:
108         unit.addChild( d )
109 
110 
111     t[0] = unit
112 
113     #t[0] = t[1]
114     #print t[0]
115 
116 def p_definations(t):
117     '''definations : defination '''
118 
119     t[0] = [t[1],]
120 
121 def p_definations_2(t):
122     '''definations : defination  definations  '''
123     t[2].append(t[1])
124     t[0]= t[2]
125 
126 def p_defination(t):
127     ''' defination : struct_def ';'
128             | interface_def ';'
129             | sequence_def ';'
130             | dictionary_def ';'
131             |
132     '''
133     t[0]=t[1]
134 
135 
136 def p_sequence_def(t):
137     '''
138         sequence_def : SEQUENCE '<' type '>' IDENTIFIER
139     '''
140 #    print 'sequence..',t[3]
141     name = t[5]
142 
143     if not checkVariantName(name,False):
144         print 'error: sequence<%s>.%s illegal!'%(t[3],name)
145         sys.exit()
146 
147     if getTypeDef(name):
148         print 'error: line %s sequence (%s) has existed!'%(t.lineno(1),name)
149         sys.exit() #sequence的类型名存在
150 
151     type_ = t[3]
152 #    if not getTypeDef(type_):
153 #        print 'error: sequence %s <%s> not defined!'%(name,type_)
154 #        sys.exit()
155 #    print 'xxx.',name,type_
156 
157     seq = Sequence(name,type_)
158     types_def[name] = seq
159     t[0] = seq
160 
161 def p_dictionary_def(t):
162     '''
163         dictionary_def : DICTIONARY '<' type ',' type '>' IDENTIFIER
164     '''
165     first = t[3]
166     second = t[5]
167     name = t[7]
168 #    print first,second,name
169 
170     if not checkVariantName(name,False):
171         print 'error: dictionary < %s > illegal!'%(name)
172         sys.exit()
173 
174     if getTypeDef(name):
175         print 'error: line %s dictionary type (%s) has existed!'%(t.lineno(1),name)
176         sys.exit() #sequence的类型名存在
177 
178 
179 #    if not getTypeDef(first):
180 #        print 'error: dictionary %s.first <%s> not defined!'%(name,first)
181 #        sys.exit()
182 #
183 #    if not getTypeDef(second):
184 #        print 'error: dictionary %s.second <%s> not defined!'%(name,second)
185 #        sys.exit()
186 
187     dict = Dictionary(name,first,second)
188     types_def[name] = dict
189     t[0] = dict
190 
191 def p_interface_def(t):
192     '''
193         interface_def :  INTERFACE IDENTIFIER '{' operatemembers '}'
194     '''
195 #    print t[1],t[2]
196     id = t[2]
197     type_ = getTypeDef(id)
198     if type_:
199         print 'error: interface name(%s) has existed!'%id
200         sys.exit()
201 
202     ifc = Interface(id)
203     opms = t[4]
204     opms.reverse()
205     #检测函数名称是否有重复
206 #    print opms
207     for opm in opms:
208         if not ifc.createOperateMember(opm):
209 
210             print 'error: line %s createOperateMember failed! interface:: %s.%s'%( t.lineno(3),t[2],opm.name)
211             sys.exit()
212 #        print type(ifc.children)
213     types_def[id] = ifc
214     t[0] = ifc # reduce to syntax tree  
215 
216 
217 
218 def p_operatemembers(t):
219     '''
220         operatemembers : operatemember
221     '''
222     #print 'operatemember num:',len(t) # 1 means no operatemebmer
223 #    if len(t) > 1:
224 #        t[0] = t[1]
225 #    else:
226 #        t[0] = []
227     t[0] = [t[1],]
228 
229 
230 def p_operatemembers_2(t):
231     '''
232         operatemembers : operatemember operatemembers
233     '''
234     if type(t[2]) != type([]):
235         t[0] = [t[1],t[2]]
236     else:
237         t[2].append(t[1])
238         t[0] = t[2]
239 
240 def p_operatemember(t):
241     '''
242         operatemember : callreturn IDENTIFIER '(' operateparams ')' ';'
243 
244     '''
245     params = t[4]
246     params.reverse()    # 这里必须进行倒置一下
247     for p in params:
248         if p.id in ('d','p','m','r','idx','size','cr','container','o','prx','m2'):
249             p.id+='_'
250     opm = OperateMember(t[2],t[1],params)
251     t[0] = opm
252 #    print 'x1.',opm
253 
254 def p_operateparams(t):
255     '''
256         operateparams : type_id
257             |
258     '''
259     if len(t) > 1:
260         t[0] = [ t[1],]
261     else:
262         t[0] =[ ]
263 
264 
265 def p_operateparams_2(t):
266     '''
267         operateparams : type_id ',' operateparams
268     '''
269 
270     t[3].append(t[1])
271     t[0] = t[3]
272 
273 def p_callreturn(t):
274     '''
275         callreturn : type
276     '''
277     t[0] = t[1]
278 
279 
280 def p_struct_def(t):
281     ''' struct_def : STRUCT IDENTIFIER '{' datamembers '}' '''
282     id = t[2]
283 
284     type = getTypeDef(id) 
285     if  type:
286         print 'error struct name:%s existed!'%(id)
287         sys.exit()
288 
289     st  = Struct(id)
290 #    print t[4]
291     t[4].reverse()
292     for dm in t[4]:
293         if not st.createDataMember(dm):
294             print 'error: datamember<%s> name<%s> has existed!'%(id,dm.id)
295             sys.exit()
296 
297     types_def[id] = st    #注册数据类型到全局类型表
298     #print types_def
299     t[0] = st
300 
301 
302 
303 def p_datamembers(t):
304     '''
305     datamembers :  datamember 
306     '''
307     #print t[1]
308     #t[0] = t[1]
309     t[0] = [t[1],]
310     #print 'a1..'
311     #print t[0]
312 
313 def p_datamembers_2(t):
314     '''
315     datamembers :     datamember datamembers
316     '''
317     if type(t[2]) != type([]):
318         t[0] = [t[1],t[2]]
319     else:
320         t[2].append(t[1])
321         t[0] = t[2]
322 
323 
324 def p_datamember(t):
325     '''
326     datamember : type_id ';'
327     '''
328     #print 'datamenber..'
329     t[0] =  t[1]
330 
331 def p_type_id(t):
332     '''
333         type_id : type IDENTIFIER
334     '''
335     #print t[1],t[2]
336     id = t[2]
337     if not checkVariantName(id):
338         print 'error: type_id.id<%s> illegal!'%(id)
339         sys.exit()
340 
341     t[0] = TypeId(t[1],t[2])
342 
343 
344 
345 
346 def p_type(t):
347     '''type : IDENTIFIER
348     '''
349     type = getTypeDef(t[1])
350 
351     if type:
352         t[0] = type
353     else:
354         print 'error: line %s'%(t.lineno),' type:%s not existed!'%t[1]
355         sys.exit()
356 
357 
358 def p_error(t):
359     print("Syntax error at '%s'" % t)
360     #print t.lineno,t.lexpos
361 
362 yacc.yacc(debug=True,method="SLR")
363 
364 data='''
365 
366 sequence < int > IntList;
367 
368 struct student { 
369     int x;
370     int y;
371     int z;
372     double fractor;
373     IntList ids;
374 };
375 
376 interface booksystem{
377     int test1(int age);
378     int test2(int age);
379 };
380 
381 struct dog{
382     int name;
383     string dog;
384     int name2;
385     student st1;
386 };
387 
388 
389 
390 '''
391 
392 data='''
393 
394 struct animal{
395     int x;
396 };
397 
398 sequence < animal > IntList;
399 
400 struct student {
401     int x;
402     int y;
403     int z;
404     double fractor;
405     IntList ids;
406 };
407 
408 interface booksystem{
409     int test1(int age);
410     int test2(int age);
411 };
412 
413 sequence<IntList>  XX;
414 
415 dictionary<int,int> int2_t;
416 
417 dictionary<int2_t,string> intstr_t;
418 
419 
420 '''
421 
422 def filterComments(data):
423     return data
424     lines = data.split("\n")
425     result=[]
426     for line in lines:
427         x = line.strip()
428         if x and x[0] =='#':
429             continue
430         result.append(line)
431     data = string.join(result,'\n')
432     return data
433 
434 def syntax_result(data):
435     return yacc.parse( filterComments(data))
436 

以上为词法和语法解析idl的代码,生成了语法树了,这部分如果idl不做扩展,这部分是无需修改

接下来就是各种语言版本的代码mapping了,也就是根据grammar tree的生成对于的框架代码,代码过长,这里就不帖了

posted on 2012-11-22 10:17 放屁阿狗 阅读(2747) 评论(0)  编辑 收藏 引用 所属分类: AndroidRpc

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理