編輯:關於Android編程
弄Rpc有一段時間了,從定義IDL規則,自動生成存根代碼給應用使用,相繼做了c++,java,python,actionscript四個版本,且都都能互相調用,協議是自定義的二進制格式。
公司的項目要求我從事android的開發,編寫一些小的應用,要與平台服務器通信。
與服務器的通信采用xml交換,之前做的二進制編碼便不能使用。
不想很弱智的去重復的編解碼xml消息格式,去編寫socket通信代碼,工作量和繁瑣是自己不喜歡的,那只能讓自己的rpc去支持xml格式。 www.2cto.com
這種支持我稱之為半人工的,因為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: [email protected]
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))
1.相關屬性: android:completionHint:設置下拉菜單中的提示標題 android:completionHintView:定義提示視圖中顯
本文實例講述了Android上下文菜單用法。分享給大家供大家參考。具體如下:上下文菜單不同於選項菜單,選項菜單服務於Activity,而上下文菜單則是注冊到某個View對
1. 概述水平列表展示,設置LayoutManager的方向性 豎直列表展示,設置LayoutManager的方向性 自定義間隔,RecyclerView.addItem
第9節 ListView在應用界面當中,經常需要使用列表來展示內容。Android SDK提供了ListView控件,來實現這種效果。ListView需要和Adapter