ConfigControllerBase.mm 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. //
  2. // ConfigControllerBase.mm
  3. // XMFamily
  4. //
  5. // Created by hzjf on 14-8-27.
  6. // Copyright (c) 2014年 hzjf. All rights reserved.
  7. //
  8. #import "ConfigControllerBase.h"
  9. #import "FunSDK/FunSDK.h"
  10. #import "NSString+Extention.h"
  11. #import "Header.h"
  12. @implementation CfgParam
  13. -(instancetype)init
  14. {
  15. id obj = [super init];
  16. _name = @"Unknow";
  17. _devId = @"InvalidId";
  18. _isGet = YES;
  19. _isSet = YES;
  20. _isOnce = NO;
  21. _isSaveLocal = NO;
  22. _channel = -1;
  23. _cfg = NULL;
  24. _autoUJ = nil;
  25. _cmdGet = 0;
  26. _cmdSet = 0;
  27. return obj;
  28. }
  29. -(instancetype)initWithName:(NSString *)name andDevId:(NSString *)devId andChannel:(NSInteger)channel andConfig:(JObject *)cfg andOnce:(BOOL)once andSaveLocal:(BOOL)savalocal
  30. {
  31. id obj = [self init];
  32. _name = name;
  33. _devId = devId;
  34. _channel = channel;
  35. _cfg = cfg;
  36. _isOnce = once;
  37. return obj;
  38. }
  39. +(instancetype)initWithName:(NSString *)devId andConfig:(JObject *)cfg andChannel:(NSInteger)channel andCfgType:(int)nCfgType{
  40. CfgParam *obj = [[CfgParam alloc] init];
  41. obj.name= [NSString stringWithUTF8String:cfg->Name()] ;
  42. obj.devId = devId;
  43. obj.channel = channel;
  44. obj.cfg = cfg;
  45. obj.isGet = (nCfgType & 0x1) != 0;
  46. obj.isSet = (nCfgType & 0x2) != 0;
  47. return obj;
  48. }
  49. -(void)setAutoUJ:(NSMutableArray *)autoUJ{
  50. _autoUJ = autoUJ;
  51. }
  52. -(int)UpdateToUI{
  53. if (_autoUJ == nil) {
  54. return -1;
  55. }
  56. for (int i = 0; i < [_autoUJ count]; i++) {
  57. UJObject *pUJ = (UJObject *)_autoUJ[i];
  58. if (pUJ != nil) {
  59. [pUJ UpdateToUI];
  60. }
  61. }
  62. return 0;
  63. }
  64. -(int)UpdateToJson{
  65. if (_autoUJ == nil) {
  66. return -1;
  67. }
  68. for (int i = 0; i < [_autoUJ count]; i++) {
  69. UJObject *pUJ = (UJObject *)_autoUJ[i];
  70. if (pUJ != nil) {
  71. [pUJ UpdateToJson];
  72. }
  73. }
  74. return 0;
  75. }
  76. @end
  77. @implementation UJObject
  78. - (instancetype)init {
  79. id obj = [super init];
  80. _pJson = NULL;
  81. _pUI = nil;
  82. return obj;
  83. }
  84. +(instancetype)init:(NSObject *)ui JsonObj:(JObject *)json intValueType:(int)type{
  85. return [UJObject init:ui UIType:EUI_Unkown JsonObj:json type:type];
  86. }
  87. +(instancetype)init:(NSObject *)ui JsonObj:(JObject *)json{
  88. return [UJObject init:ui UIType:EUI_Unkown JsonObj:json type:0];
  89. }
  90. @end
  91. @implementation ConfigControllerBase
  92. - (instancetype)init{
  93. _cfgs = [[NSMutableDictionary alloc] initWithCapacity:0];
  94. _cmds = [[NSMutableDictionary alloc] initWithCapacity:0];
  95. return [super init];
  96. }
  97. - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
  98. _cfgs = [[NSMutableDictionary alloc] initWithCapacity:0];
  99. _cmds = [[NSMutableDictionary alloc] initWithCapacity:0];
  100. return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  101. }
  102. - (void)viewDidLoad {
  103. [super viewDidLoad];
  104. _commboxArray = [[NSMutableArray alloc] initWithCapacity:0];
  105. }
  106. - (void)OnFunSDKResult:(NSNumber *) pParam{
  107. NSInteger nAddr = [pParam integerValue];
  108. MsgContent *msg = (MsgContent *)nAddr;
  109. //json回调
  110. if ( EMSG_DEV_GET_CONFIG_JSON == msg->id || EMSG_DEV_SET_CONFIG_JSON == msg->id ) {
  111. NSString* name = [NSString stringWithUTF8String:msg->szStr];
  112. CfgParam* param = _cfgs[name];
  113. param.errorCode = msg->param1;
  114. param.typeInfo = msg->param3;
  115. param.param2 = msg->param2;
  116. if (EMSG_DEV_GET_CONFIG_JSON == msg->id){
  117. if ( param.errorCode >= 0 ) {
  118. if ( param.cfg ) {
  119. NSString* strName;
  120. if ( param.channel >= 0 ) {
  121. strName = [NSString stringWithFormat:@"%@.[%ld]", name, (long)param.channel];
  122. }
  123. else{
  124. strName = name;
  125. }
  126. if (msg->pObject == nil) {
  127. return;
  128. }
  129. param.cfgTmp = [NSString stringWithUTF8String:msg->pObject];
  130. if (param.cfgTmp == nil) {
  131. NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
  132. NSData *data = [NSData dataWithBytes:msg->pObject length:strlen(msg->pObject)];
  133. param.cfgTmp = [[NSString alloc] initWithData:data encoding:enc];
  134. }
  135. NSLog(@"msg->pObject =%s",msg->pObject);
  136. NSString *tmpStr = [param.cfgTmp stringByReplacingOccurrencesOfString:strName withString:param.name];
  137. param.cfgTmp = tmpStr;
  138. int nRet = param.cfg->Parse([param.cfgTmp UTF8String]);
  139. NSLog(@"Parse result[%d]", nRet);
  140. }
  141. }
  142. [self OnGetConfig:param];
  143. }else if ( EMSG_DEV_SET_CONFIG_JSON == msg->id) {
  144. [self OnSetConfig:param];
  145. }
  146. //cmd回调
  147. }else if (msg->id == EMSG_DEV_CMD_EN) {
  148. NSString* name = [NSString stringWithUTF8String:msg->szStr];
  149. CfgParam* param = _cmds[name];
  150. param.errorCode = msg->param1;
  151. param.typeInfo = msg->param3;
  152. param.param2 = msg->param2;
  153. if (param.isGet == YES){
  154. if ( param.errorCode >= 0 ) {
  155. if ( param.cfg ) {
  156. NSString* strName;
  157. if ( param.channel >= 0 ) {
  158. strName= name;
  159. //strName = [NSString stringWithFormat:@"%@.[%ld]", name, (long)param.channel];
  160. }
  161. else{
  162. strName = name;
  163. }
  164. if (msg->pObject == nil) {
  165. return;
  166. }
  167. param.cfgTmp = [NSString stringWithUTF8String:msg->pObject];
  168. if (param.cfgTmp == nil) {
  169. NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
  170. NSData *data = [NSData dataWithBytes:msg->pObject length:strlen(msg->pObject)];
  171. param.cfgTmp = [[NSString alloc] initWithData:data encoding:enc];
  172. }
  173. NSLog(@"msg->pObject =%s",msg->pObject);
  174. NSString *tmpStr = [param.cfgTmp stringByReplacingOccurrencesOfString:strName withString:param.name];
  175. param.cfgTmp = tmpStr;
  176. int nRet = param.cfg->Parse([param.cfgTmp UTF8String]);
  177. NSLog(@"Parse result[%d]", nRet);
  178. }
  179. }
  180. [self OnGetConfig:param];
  181. }else if ( param.isSet == YES) {
  182. [self OnSetConfig:param];
  183. }
  184. }
  185. }
  186. //添加json Config
  187. - (void)AddConfig:(CfgParam *)param{
  188. if ( param ) {
  189. if ([[_cfgs allKeys] containsObject:param.name]) {
  190. _cfgs[param.name] = param;
  191. return;
  192. }
  193. _cfgs[param.name] = param;
  194. if (param.isSet) {
  195. _nSetCfgCount++;
  196. }
  197. if (param.isGet) {
  198. _nGetCfgCount++;
  199. }
  200. }
  201. }
  202. //添加cmdConfig
  203. - (void)AddCmdfig:(CfgParam *)param{
  204. if ( param ) {
  205. if ([[_cmds allKeys] containsObject:param.name]) {
  206. _cmds[param.name] = param;
  207. return;
  208. }
  209. _cmds[param.name] = param;
  210. }
  211. }
  212. //删除json
  213. - (void)RemoveConfig:(NSString *)name{
  214. [_cfgs removeObjectForKey:name];
  215. }
  216. //删除cmd
  217. - (void)RemoveCmdfig:(NSString *)name {
  218. [_cmds removeObjectForKey:name];
  219. }
  220. //删除json
  221. - (void)RemoveAllConfig{
  222. }
  223. //删除cmd
  224. - (void)RemoveAllCmdfig {
  225. [_cmds removeAllObjects];
  226. }
  227. //返回json对象
  228. - (CfgParam *)GetConfigParam:(NSString *)name{
  229. return [_cfgs objectForKey:name];
  230. }
  231. //返回cmd对象
  232. - (CfgParam *)GetCmdfigParam:(NSString *)name {
  233. return [_cmds objectForKey:name];
  234. }
  235. //获取所有json配置,一般界面第一次出现时需要调用。其他需要调用的地方(更新配置时)调用下
  236. - (int)GetConfig{
  237. for( NSString* name in _cfgs ){
  238. [self GetConfig:name];
  239. }
  240. return 0;
  241. }
  242. //获取所有cmd配置,一般界面第一次出现时需要调用。其他需要调用的地方(更新配置时)调用下
  243. - (int)GetCmdfig{
  244. for( NSString* name in _cmds ){
  245. [self GetCmdfig:name];
  246. }
  247. return 0;
  248. }
  249. //获取json配置
  250. - (int)GetConfig:(NSString *)name{
  251. CfgParam* param = _cfgs[name];
  252. if ( param && param.isGet) {
  253. FUN_DevGetConfig_Json(SELF, SZSTR(param.devId), SZSTR(param.name), 0, (int)param.channel);
  254. }
  255. return 0;
  256. }
  257. //获取cmd配置
  258. - (int)GetCmdfig:(NSString *)name{
  259. CfgParam* param = _cmds[name];
  260. if ( param && param.isGet) {
  261. if (param.cmdString == nil) {
  262. FUN_DevCmdGeneral(SELF, SZSTR(param.devId), (int)param.cmdGet, SZSTR(param.name), 0, 5000, NULL, 0, -1, 0);
  263. }else{
  264. char * cmd = (char *)[param.cmdString UTF8String];
  265. FUN_DevCmdGeneral(SELF, SZSTR(param.devId), (int)param.cmdGet, SZSTR(param.name), 0, 5000, cmd, (int)strlen(cmd) + 1, -1, 0);
  266. }
  267. }
  268. return 0;
  269. }
  270. //保存所有json配置
  271. - (int)SetConfig{
  272. for( NSString* name in _cfgs ){
  273. [self SetConfig:name];
  274. }
  275. return 0;
  276. }
  277. //保存所有cmd配置
  278. - (int)SetCmdfig{
  279. for( NSString* name in _cmds ){
  280. [self SetCmdfig:name];
  281. }
  282. return 0;
  283. }
  284. //保存所有json配置
  285. - (int)SetConfig:(NSString *)name{
  286. CfgParam* param = _cfgs[name];
  287. if (param == nil || (param.isGet && param.cfgTmp == nil)) {
  288. return 0;
  289. }
  290. if (param && param.isSet ) {
  291. [param UpdateToJson];
  292. const char * pConfig = param.cfg->ToString();
  293. if ((strlen(pConfig) > 0) && (!param.isGet || strcmp(pConfig, [param.cfgTmp UTF8String]))) {
  294. //配置改变了才需要设置
  295. FUN_DevSetConfig_Json(SELF, SZSTR(param.devId), SZSTR(param.name), pConfig, (int)strlen(pConfig), (int)param.channel);
  296. }
  297. }
  298. return 0;
  299. }
  300. //保存所有cmd配置
  301. - (int)SetCmdfig:(NSString *)name{
  302. CfgParam* param = _cmds[name];
  303. if (param == nil || (param.isGet && param.cfgTmp == nil)) {
  304. return 0;
  305. }
  306. if (param && param.isSet ) {
  307. [param UpdateToJson];
  308. const char * pConfig = param.cfg->ToString();
  309. if ((strlen(pConfig) > 0) && (!param.isGet || strcmp(pConfig, [param.cfgTmp UTF8String]))) {
  310. //配置改变了才需要设置
  311. if (param.cmdString == nil) {
  312. FUN_DevCmdGeneral(SELF, SZSTR(param.devId), (int)param.cmdGet, SZSTR(param.name), 0, 5000, NULL, 0, -1, 0);
  313. }else{
  314. char * cmd = (char *)[param.cmdString UTF8String];
  315. FUN_DevCmdGeneral(SELF, SZSTR(param.devId), (int)param.cmdGet, SZSTR(param.name), 0, 5000, cmd, (int)strlen(cmd) + 1, -1, 0);
  316. }
  317. }
  318. }
  319. return 0;
  320. }
  321. //保存json配置
  322. - (int)SetConfig:(NSString *)name timeOut:(NSInteger)time {
  323. CfgParam* param = _cfgs[name];
  324. if (param == nil || (param.isGet && param.cfgTmp == nil)) {
  325. return 0;
  326. }
  327. if (param && param.isSet ) {
  328. [param UpdateToJson];
  329. const char * pConfig = param.cfg->ToString();
  330. if ((strlen(pConfig) > 0) && (!param.isGet || strcmp(pConfig, [param.cfgTmp UTF8String]))) {
  331. //配置改变了才需要设置
  332. FUN_DevSetConfig_Json(SELF, SZSTR(param.devId), SZSTR(param.name), pConfig, (int)strlen(pConfig), (int)param.channel, (int)time);
  333. }
  334. }
  335. return 0;
  336. }
  337. //保存cmd配置
  338. - (int)SetCmdfig:(NSString *)name timeOut:(NSInteger)time {
  339. CfgParam* param = _cmds[name];
  340. if (param == nil || (param.isGet && param.cfgTmp == nil)) {
  341. return 0;
  342. }
  343. if (param && param.isSet ) {
  344. [param UpdateToJson];
  345. const char * pConfig = param.cfg->ToString();
  346. if ((strlen(pConfig) > 0) && (!param.isGet || strcmp(pConfig, [param.cfgTmp UTF8String]))) {
  347. //配置改变了才需要设置
  348. if (param.cmdString == nil) {
  349. FUN_DevCmdGeneral(SELF, SZSTR(param.devId), (int)param.cmdGet, SZSTR(param.name), 0, (int)time, NULL, 0, -1, 0);
  350. }else{
  351. char * cmd = (char *)[param.cmdString UTF8String];
  352. FUN_DevCmdGeneral(SELF, SZSTR(param.devId), (int)param.cmdGet, SZSTR(param.name), 0, (int)time, cmd, (int)strlen(cmd) + 1, -1, 0);
  353. }
  354. }
  355. }
  356. return 0;
  357. }
  358. //获取到一个配置
  359. //errorCode>=0 为成功 <0 为错误码, 此时errorInfo为错误信息
  360. //this param is readonly !!
  361. - (void)OnGetConfig:(CfgParam *)param {
  362. if (param.autoUJ == nil && param.errorCode > 0) {
  363. [self OnInitAutoUI:param];
  364. }
  365. [param UpdateToUI];
  366. if (param.errorCode <0) {
  367. }
  368. }
  369. - (void)OnInitAutoUI:(CfgParam *)param {
  370. }
  371. //完成设置一个配置
  372. //errorCode>=0 为成功 <0 为错误码, 此时errorInfo为错误信息
  373. //this param is readonly !!
  374. - (void)OnSetConfig:(CfgParam *)param {
  375. [param UpdateToJson];
  376. }
  377. - (id)CMD_Result:(NSNumber *) pParam Name:(NSString*)name {
  378. NSInteger nAddr = [pParam integerValue];
  379. MsgContent *msg = (MsgContent *)nAddr;
  380. //1、先取出数据
  381. char *result = (char *)msg->pObject;
  382. if (result == nil || strlen(result) == 0) {
  383. return nil;
  384. }
  385. // 2.0 将c的jason字符串转化为NSData
  386. NSData *resultData = [NSData dataWithBytes:result length:strlen(result)];
  387. if (resultData == nil) {
  388. return nil;
  389. }
  390. // 3.0 将NSData转化为字典
  391. NSError *error;
  392. NSMutableDictionary *socketInfoDic = (NSMutableDictionary*)[NSJSONSerialization JSONObjectWithData:resultData options:NSJSONReadingMutableLeaves error:&error];
  393. return [socketInfoDic objectForKey:name];
  394. }
  395. @end