UserAccountModel.mm 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. //
  2. // UserAccountModel.m
  3. // MobileVideo
  4. //
  5. // Created by XM on 2018/4/23.
  6. // Copyright © 2018年 XM. All rights reserved.
  7. //
  8. #import "FunSDK/FunSDK.h"
  9. #import "UserAccountModel.h"
  10. #import "DeviceManager.h"
  11. #import "AlarmManager.h"
  12. @implementation UserAccountModel
  13. - (id)init {
  14. self = [super init];
  15. if (self) {
  16. [self loginOut];
  17. }
  18. return self;
  19. }
  20. #pragma mark 用户名登陆
  21. - (void)loginWithName:(NSString *)userName andPassword:(NSString *)psw {
  22. //初始化将要链接的服务器信息(没有回调)
  23. FUN_SysInit("arsp.xmeye.net;arsp1.xmeye.net;arsp2.xmeye.net", 15010);
  24. //初始化底层库Net网络相关(没有回调)
  25. FUN_InitNetSDK();
  26. //账号登陆接口(有回调) self.msgHandle(model句柄,区分是哪一个model)
  27. FUN_SysGetDevList(self.msgHandle, SZSTR(userName) , SZSTR(psw),0);
  28. //暂存登陆模式
  29. [[LoginShowControl getInstance] setLoginType:loginTypeCloud];
  30. //云登陆需要暂存登陆账号密码
  31. [[LoginShowControl getInstance] setLoginUserName:userName password:psw];
  32. [self initLogServer];
  33. }
  34. - (void)loginWithTypeLocal {
  35. //初始化底层库Net网络相关(没有回调)
  36. FUN_InitNetSDK();
  37. FUN_SysInit([[NSString GetDocumentPathWith:@"LocalDB.db"] UTF8String]);
  38. //Fun_SysAddDevByFile(self.msgHandle, [[NSString GetCachesPathWith:@"LocalDB.db"] UTF8String],0);
  39. FUN_SysGetDevList(self.msgHandle,"" ,"",0);
  40. //设置登陆模式
  41. [[LoginShowControl getInstance] setLoginType:loginTypeLocal];
  42. [self initLogServer];
  43. }
  44. - (void)initLogServer{
  45. NSString *serverIP;
  46. NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
  47. serverIP=[userDefault objectForKey:@"LOG_SERVER_IP"];
  48. if (serverIP == nil || [serverIP length] <= 0) {
  49. serverIP = @"123.59.14.61";
  50. [userDefault setObject:serverIP forKey:@"LOG_SERVER_IP"];
  51. }
  52. NSString *serverPort;
  53. serverPort=[userDefault objectForKey:@"LOG_SERVER_PORT"];
  54. if (serverPort == nil || [serverPort length] <= 0) {
  55. serverPort=@"9911";
  56. [userDefault setObject:serverPort forKey:@"LOG_SERVER_PORT"];
  57. }
  58. NSString *nType;
  59. nType=[userDefault objectForKey:@"LOG_SERVER_TYPE"];
  60. if (nType == nil || [nType length]<= 0) {
  61. nType=@"3";
  62. [userDefault setObject:nType forKey:@"LOG_SERVER_TYPE"];
  63. }
  64. NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  65. NSString *path = [pathArray lastObject];
  66. path = [path stringByAppendingPathComponent:@"log.txt"];
  67. const char *logFile = [path UTF8String];
  68. FunMsgListener *listener = [[FunMsgListener alloc]init];
  69. Fun_LogInit(listener.msgHandle, [serverIP UTF8String], [serverPort intValue], logFile, [nType intValue]);
  70. }
  71. - (void)loginWithTypeAP {
  72. FUN_InitNetSDK();
  73. FUN_SysInitAsAPModel([[NSString GetDocumentPathWith:@"SSID"] UTF8String]);
  74. SDBDeviceInfo devInfo = {0};
  75. NSData* gb2312data = [NSString AutoCopyUTF8Str:[NSString getCurrent_SSID]];
  76. [gb2312data getBytes:devInfo.Devname length:sizeof(devInfo.Devname)];
  77. STRNCPY(devInfo.loginName, SZSTR(@"admin"));
  78. STRNCPY(devInfo.loginPsw, SZSTR(@""));
  79. // 判断直连设备的类型
  80. NSString *sid = [NSString getCurrent_SSID];
  81. if ([sid hasPrefix:@"socket"]) {
  82. devInfo.nType = 1;
  83. devInfo.nPort = 9001;
  84. strcpy(devInfo.Devmac, "172.16.10.1:9001");
  85. }
  86. else{
  87. devInfo.nType = 0;
  88. devInfo.nPort = 34567;
  89. strcpy(devInfo.Devmac, "192.168.10.1:34567");
  90. }
  91. FUN_SysAdd_Device(self.msgHandle, &devInfo);
  92. FUN_SysGetDevList(self.msgHandle, "", "",0);
  93. //设置登陆模式
  94. [[LoginShowControl getInstance] setLoginType:loginTypeAP];
  95. }
  96. #pragma mark 登出 login out
  97. - (void)loginOut {
  98. // clean up SDK
  99. FUN_UnInitNetSDK();
  100. }
  101. #pragma mark 通过邮箱或者手机号获取验证码
  102. - (void)getCodeWithPhoneOrEmailNumber:(NSString *)phoneEmail {
  103. if ([phoneEmail containsString:@"@"]) {
  104. //获取邮箱验证码
  105. FUN_SysSendEmailCode(self.msgHandle, [phoneEmail UTF8String], 0);
  106. }else{
  107. //获取手机验证码
  108. FUN_SysSendPhoneMsg(self.msgHandle, [@"" UTF8String], [phoneEmail UTF8String], 0);
  109. }
  110. }
  111. #pragma mark 通过邮箱或者手机号注册,直接注册的话,code和手机号邮箱设置为空""
  112. - (void)registerUserName:(NSString *)username password:(NSString *)psw code:(NSString *)code PhoneOrEmail:(NSString *)phoneEmail {
  113. FUN_SysRegUserToXM(self.msgHandle, [username UTF8String], [psw UTF8String], [code UTF8String], [phoneEmail UTF8String], 0);
  114. }
  115. #pragma mark 忘记密码 获取验证码
  116. -(int)fogetPwdWithPhoneNum:(NSString *)phoneNum{
  117. if ([phoneNum containsString:@"@"]) {
  118. //该邮箱是否已经注册
  119. return FUN_SysSendCodeForEmail(self.msgHandle, [phoneNum UTF8String], 0);
  120. }else{
  121. //该手机号是否已经注册
  122. return FUN_SysForgetPwdXM(self.msgHandle, [phoneNum UTF8String], 0);
  123. }
  124. }
  125. #pragma mark 修改用户密码
  126. - (void)changePassword:(NSString *)userName oldPassword:(NSString *)oldPsw newPsw:(NSString *)newPsw {
  127. FUN_SysPsw_Change(self.msgHandle, [userName UTF8String], [oldPsw UTF8String], [newPsw UTF8String]);
  128. }
  129. #pragma mark 检查验证码的合法性,找回密码之前需要验证
  130. - (void)checkCode:(NSString *)phoneEmail code:(NSString *)code {
  131. if ([phoneEmail containsString:@"@"]) {
  132. //邮箱验证码合法性
  133. FUN_SysCheckCodeForEmail(self.msgHandle, [phoneEmail UTF8String], [code UTF8String], 0);
  134. }else{
  135. //手机验证码合法性
  136. FUN_CheckResetCodeXM(self.msgHandle, [phoneEmail UTF8String], [code UTF8String], 0);
  137. }
  138. }
  139. #pragma mark 找回用户登录密码
  140. - (void)resetPassword:(NSString *)phoneEmail newPassword:(NSString *)psw {
  141. if ([phoneEmail containsString:@"@"]) {
  142. //通过邮箱进行重置
  143. FUN_SysChangePwdByEmail(self.msgHandle, [phoneEmail UTF8String], [psw UTF8String], 0);
  144. }else{
  145. //通过手机进行重置
  146. FUN_ResetPwdXM(self.msgHandle, [phoneEmail UTF8String], [psw UTF8String], 0);
  147. }
  148. }
  149. #pragma mark 请求账户信息(是否绑定手机号或者邮箱)
  150. - (void)requestAccountInfo
  151. {
  152. FUN_SysGetUerInfo(self.msgHandle, "", "", 0);
  153. }
  154. #pragma mark 获取验证码 (绑定手机号或者邮箱需要)
  155. - (void)getBindingPhoneEmailCode:(NSString *)username password:(NSString *)psw PhoneOrEmail:(NSString *)phoneEmail
  156. {
  157. if ([phoneEmail containsString:@"@"]) {
  158. //通过邮箱获取验证码
  159. FUN_SysSendBindingEmailCode(self.msgHandle, [phoneEmail UTF8String], [username UTF8String], [psw UTF8String], 0);
  160. }
  161. else{
  162. //通过手机获取验证码
  163. FUN_SysSendBindingPhoneCode(self.msgHandle,[phoneEmail UTF8String], [username UTF8String], [psw UTF8String], 0);
  164. }
  165. }
  166. #pragma mark 绑定手机或者邮箱
  167. - (void)bindPhoneEmail:(NSString *)username password:(NSString *)psw PhoneOrEmail:(NSString *)phoneEmail code:(NSString *)code
  168. {
  169. if ([phoneEmail containsString:@"@"]) {
  170. //绑定邮箱
  171. FUN_SysBindingEmail(self.msgHandle, [username UTF8String], [psw UTF8String], [phoneEmail UTF8String], [code UTF8String], 0);
  172. }
  173. else{
  174. //绑定手机
  175. FUN_SysBindingPhone(self.msgHandle , [username UTF8String], [psw UTF8String], [phoneEmail UTF8String], [code UTF8String], 0);
  176. }
  177. }
  178. #pragma mark - 网络请求回调接口 有回调信息的所有FUN接口都会回调进这个方法
  179. - (void)OnFunSDKResult:(NSNumber *) pParam {
  180. NSInteger nAddr = [pParam integerValue];
  181. MsgContent *msg = (MsgContent *)nAddr;
  182. switch (msg->id) {
  183. #pragma mark 账号登陆结果回调信息
  184. case EMSG_SYS_GET_DEV_INFO_BY_USER:{
  185. if (msg->param1 < 0){
  186. //用户名登录失败,根据错误信息msg->param1判断错误类型
  187. if (msg->param1 == EE_PASSWORD_NOT_VALID)
  188. {
  189. //密码错误示例
  190. }
  191. }else{
  192. // 初始化报警服务器
  193. [[AlarmManager getInstance] initServer:[[[LoginShowControl getInstance] getPushToken] UTF8String]];
  194. //用户名登录成功,返回用户名下的设备列表信息
  195. [[DeviceManager getInstance] resiveDevicelist:[NSMessage SendMessag:nil obj:msg->pObject p1:msg->param1 p2:0]];
  196. }
  197. //用户登录回调
  198. if ([self.delegate respondsToSelector:@selector(loginWithNameDelegate:)]) {
  199. [self.delegate loginWithNameDelegate:msg->param1];
  200. }
  201. }
  202. break;
  203. case EMSG_SYS_ADD_DEV_BY_FILE:{
  204. //本地登录
  205. FUN_SysGetDevList(self.msgHandle, "", "");
  206. }
  207. #pragma mark 收到通过邮箱注册账户结果消息
  208. case EMSG_SYS_REGISTE_BY_EMAIL:
  209. #pragma mark 收到通过手机注册账户结果消息
  210. case EMSG_SYS_REGISER_USER_XM:
  211. #pragma mark 收到直接注册账户结果消息
  212. case EMSG_SYS_NO_VALIDATED_REGISTER_EXTEND:
  213. {
  214. if (msg->param1 >=0) {
  215. //注册成功
  216. }else{
  217. //注册失败,错误信息msg->param1
  218. }
  219. //用户注册回调
  220. if ([self.delegate respondsToSelector:@selector(registerUserNameDelegateResult:)]) {
  221. [self.delegate registerUserNameDelegateResult:msg->param1];
  222. }
  223. }
  224. break;
  225. #pragma mark 获取验证码结果
  226. case EMSG_SYS_SEND_EMAIL_CODE:
  227. case EMSG_SYS_GET_PHONE_CHECK_CODE:{
  228. if (msg->param1 >= 0) {
  229. //获取验证码成功,手机或者邮箱将会收到验证码
  230. }else{
  231. //获取验证码失败,可以选择是否跳过验证码直接进行注册
  232. if(msg->param1 !=EE_AS_PHONE_CODE2&&msg->param1!=EE_AS_SEND_EMAIL_CODE3){
  233. //手机号或者邮箱已经被注册
  234. }
  235. }
  236. //获取验证码回调
  237. if ([self.delegate respondsToSelector:@selector(getCodeDelegateResult:)]) {
  238. [self.delegate getCodeDelegateResult:msg->param1];
  239. }
  240. }
  241. break;
  242. #pragma mark 忘记密码 收到验证码(邮箱\手机)
  243. case EMSG_SYS_SEND_EMAIL_FOR_CODE:
  244. case EMSG_SYS_FORGET_PWD_XM:
  245. {
  246. if (msg->param1 >= 0) {
  247. //获取验证码成功,手机或者邮箱将会收到验证码
  248. }else{
  249. //获取验证码失败
  250. }
  251. //获取验证码回调
  252. if ([self.delegate respondsToSelector:@selector(forgetPwdGetCodeDelegateResult:userName:)]) {
  253. [self.delegate forgetPwdGetCodeDelegateResult:msg->param1 userName:[NSString stringWithUTF8String:msg->szStr]];
  254. }
  255. }
  256. break;
  257. #pragma mark 手机号和邮箱验证码校验回调
  258. case EMSG_SYS_CHECK_CODE_FOR_EMAIL:
  259. case EMSG_SYS_REST_PWD_CHECK_XM:
  260. {
  261. [SVProgressHUD dismiss];
  262. if (msg->param1 < 0) {
  263. //验证码校验失败
  264. }else{
  265. //验证码校验成功
  266. }
  267. //验证码校验合法性回调
  268. if ([self.delegate respondsToSelector:@selector(checkCodeDelegateResult:)]) {
  269. [self.delegate checkCodeDelegateResult:msg->param1];
  270. }
  271. }
  272. break;
  273. #pragma mark 通过邮箱和手机号找回密码回调
  274. case EMSG_SYS_PSW_CHANGE_BY_EMAIL:
  275. case EMSG_SYS_RESET_PWD_XM:
  276. {
  277. if (msg->param1 < 0) {
  278. //修改密码失败
  279. }else{
  280. //回调成功,找回密码成功,已经修改为新的密码
  281. }
  282. //找回密码重置密码回调
  283. if ([self.delegate respondsToSelector:@selector(resetPasswordDelegateResult:)]) {
  284. [self.delegate resetPasswordDelegateResult:msg->param1];
  285. }
  286. }
  287. break;
  288. #pragma mark 修改密码结果
  289. case EMSG_SYS_PSW_CHANGE:
  290. {
  291. [SVProgressHUD dismiss];
  292. if (msg->param1 < 0){
  293. //修改密码失败
  294. }else{
  295. //修改密码成功
  296. }
  297. //修改密码回调
  298. if ([self.delegate respondsToSelector:@selector(changePasswordDelegateResult:)]) {
  299. [self.delegate changePasswordDelegateResult:msg->param1];
  300. }
  301. }
  302. break;
  303. #pragma mark 请求账户信息(是否绑定手机号或者邮箱)
  304. case EMSG_SYS_GET_USER_INFO:
  305. {
  306. [SVProgressHUD dismiss];
  307. NSMutableDictionary *userInfoDic = [[NSMutableDictionary alloc] init];
  308. if(msg->param1 >= 0)
  309. {
  310. char *result = (char *)msg->szStr;
  311. // 将c的jason字符串转化为NSData
  312. NSData *resultData = [NSData dataWithBytes:result length:strlen(result)];
  313. // 将NSData转化为字典
  314. NSError *error;
  315. userInfoDic = (NSMutableDictionary*)[NSJSONSerialization JSONObjectWithData:resultData options:NSJSONReadingMutableLeaves error:&error];
  316. }
  317. if ([self.delegate respondsToSelector:@selector(getUserInfo:result:)]) {
  318. [self.delegate getUserInfo:userInfoDic result:msg->param1];
  319. }
  320. }
  321. break;
  322. #pragma mark 获取验证码回调(绑定邮箱/手机)
  323. case EMSG_SYS_SEND_BINDING_EMAIL_CODE:
  324. case EMSG_SYS_SEND_BINDING_PHONE_CODE:
  325. {
  326. [SVProgressHUD dismiss];
  327. if (msg->param1 < 0){
  328. //获取验证码失败
  329. }else{
  330. //获取验证码成功
  331. }
  332. //获取验证码回调
  333. if ([self.delegate respondsToSelector:@selector(getCodeForBindPhoneEmailResult:)]) {
  334. [self.delegate getCodeForBindPhoneEmailResult:msg->param1];
  335. }
  336. }
  337. break;
  338. #pragma mark 绑定邮箱/手机回调
  339. case EMSG_SYS_BINDING_EMAIL:
  340. case EMSG_SYS_BINDING_PHONE:
  341. {
  342. [SVProgressHUD dismiss];
  343. if (msg->param1 < 0){
  344. //绑定邮箱/手机失败
  345. }else{
  346. //绑定邮箱/手机成功
  347. }
  348. //修改密码回调
  349. if ([self.delegate respondsToSelector:@selector(bindPhoneEmailResult:)]) {
  350. [self.delegate bindPhoneEmailResult:msg->param1];
  351. }
  352. }
  353. break;
  354. default:
  355. break;
  356. }
  357. }
  358. @end