Best JavaScript code snippet using sinon
playerHandler.js
Source:playerHandler.js  
...33	var finishNow = msg.finishNow34	var e = null35	if(!_.isNumber(location) || location % 1 !== 0 || location < 1 || location > 22){36		e = new Error("location ä¸åæ³")37		next(e, ErrorUtils.getError(e))38		return39	}40	if(!_.isBoolean(finishNow)){41		e = new Error("finishNow ä¸åæ³")42		next(e, ErrorUtils.getError(e))43		return44	}45	this.request(session, 'upgradeBuilding', [session.uid, location, finishNow]).then(function(playerData){46		next(null, {code:200, playerData:playerData})47	}).catch(function(e){48		next(null, ErrorUtils.getError(e))49	})50}51/**52 * 转æ¢ç产建çç±»å53 * @param msg54 * @param session55 * @param next56 */57pro.switchBuilding = function(msg, session, next){58	var buildingLocation = msg.buildingLocation59	var newBuildingName = msg.newBuildingName60	var e = null61	if(!_.isNumber(buildingLocation) || buildingLocation % 1 !== 0 || buildingLocation < 1){62		e = new Error("buildingLocation ä¸åæ³")63		next(e, ErrorUtils.getError(e))64		return65	}66	if(!_.contains(_.values(Consts.ResourceBuildingMap), newBuildingName) || _.isEqual("townHall", newBuildingName)){67		e = new Error("newBuildingName ä¸åæ³")68		next(e, ErrorUtils.getError(e))69		return70	}71	this.request(session, 'switchBuilding', [session.uid, buildingLocation, newBuildingName]).then(function(playerData){72		next(null, {code:200, playerData:playerData})73	}).catch(function(e){74		next(null, ErrorUtils.getError(e))75	})76}77/**78 * å建å°å»ºç79 * @param msg80 * @param session81 * @param next82 */83pro.createHouse = function(msg, session, next){84	var buildingLocation = msg.buildingLocation85	var houseType = msg.houseType86	var houseLocation = msg.houseLocation87	var finishNow = msg.finishNow88	var e = null89	if(!_.isNumber(buildingLocation) || buildingLocation % 1 !== 0 || buildingLocation < 1 || buildingLocation > 20){90		e = new Error("buildingLocation ä¸åæ³")91		next(e, ErrorUtils.getError(e))92		return93	}94	if(!_.isString(houseType)){95		e = new Error("houseType ä¸åæ³")96		next(e, ErrorUtils.getError(e))97		return98	}99	if(!_.isNumber(houseLocation) || houseLocation % 1 !== 0 || houseLocation < 1 || houseLocation > 3){100		e = new Error("houseLocation ä¸åæ³")101		next(e, ErrorUtils.getError(e))102		return103	}104	if(!_.isBoolean(finishNow)){105		e = new Error("finishNow ä¸åæ³")106		next(e, ErrorUtils.getError(e))107		return108	}109	this.request(session, 'createHouse', [session.uid, buildingLocation, houseType, houseLocation, finishNow]).then(function(playerData){110		next(null, {code:200, playerData:playerData})111	}).catch(function(e){112		next(null, ErrorUtils.getError(e))113	})114}115/**116 * å级å°å»ºç117 * @param msg118 * @param session119 * @param next120 */121pro.upgradeHouse = function(msg, session, next){122	var buildingLocation = msg.buildingLocation123	var houseLocation = msg.houseLocation124	var finishNow = msg.finishNow125	var e = null126	if(!_.isNumber(buildingLocation) || buildingLocation % 1 !== 0 || buildingLocation < 1 || buildingLocation > 20){127		e = new Error("buildingLocation ä¸åæ³")128		next(e, ErrorUtils.getError(e))129		return130	}131	if(!_.isNumber(houseLocation) || houseLocation % 1 !== 0 || houseLocation < 1 || houseLocation > 3){132		e = new Error("houseLocation ä¸åæ³")133		next(e, ErrorUtils.getError(e))134		return135	}136	if(!_.isBoolean(finishNow)){137		e = new Error("finishNow ä¸åæ³")138		next(e, ErrorUtils.getError(e))139		return140	}141	this.request(session, 'upgradeHouse', [session.uid, buildingLocation, houseLocation, finishNow]).then(function(playerData){142		next(null, {code:200, playerData:playerData})143	}).catch(function(e){144		next(null, ErrorUtils.getError(e))145	})146}147/**148 * å
è´¹å é149 * @param msg150 * @param session151 * @param next152 */153pro.freeSpeedUp = function(msg, session, next){154	var eventType = msg.eventType155	var eventId = msg.eventId156	var e = null157	if(!_.contains(Consts.FreeSpeedUpAbleEventTypes, eventType)){158		e = new Error("eventType ä¸åæ³")159		next(e, ErrorUtils.getError(e))160		return161	}162	if(!_.isString(eventId)){163		e = new Error("eventId ä¸åæ³")164		next(e, ErrorUtils.getError(e))165		return166	}167	this.request(session, 'freeSpeedUp', [session.uid, eventType, eventId]).then(function(playerData){168		next(null, {code:200, playerData:playerData})169	}).catch(function(e){170		next(null, ErrorUtils.getError(e))171	})172}173/**174 * å®ç³å é175 * @param msg176 * @param session177 * @param next178 */179pro.speedUp = function(msg, session, next){180	var eventType = msg.eventType181	var eventId = msg.eventId182	var e = null183	if(!_.contains(Consts.SpeedUpEventTypes, eventType)){184		e = new Error("eventType ä¸åæ³")185		next(e, ErrorUtils.getError(e))186		return187	}188	if(!_.isString(eventId)){189		e = new Error("eventId ä¸åæ³")190		next(e, ErrorUtils.getError(e))191		return192	}193	this.request(session, 'speedUp', [session.uid, eventType, eventId]).then(function(playerData){194		next(null, {code:200, playerData:playerData})195	}).catch(function(e){196		next(null, ErrorUtils.getError(e))197	})198}199/**200 * å¶ä½ææ201 * @param msg202 * @param session203 * @param next204 */205pro.makeMaterial = function(msg, session, next){206	var type = msg.type207	var finishNow = msg.finishNow208	var e = null209	if(!_.contains(Consts.MaterialType, type)){210		e = new Error("type ä¸åæ³")211		next(e, ErrorUtils.getError(e))212		return213	}214	if(!_.isBoolean(finishNow)){215		e = new Error("finishNow ä¸åæ³")216		next(e, ErrorUtils.getError(e))217		return218	}219	this.request(session, 'makeMaterial', [session.uid, type, finishNow]).then(function(playerData){220		next(null, {code:200, playerData:playerData})221	}).catch(function(e){222		next(null, ErrorUtils.getError(e))223	})224}225/**226 * é¢åå¶ä½å®æ227 * @param msg228 * @param session229 * @param next230 */231pro.getMaterials = function(msg, session, next){232	var eventId = msg.eventId233	var e = null234	if(!_.isString(eventId)){235		e = new Error("eventId ä¸åæ³")236		next(e, ErrorUtils.getError(e))237		return238	}239	this.request(session, 'getMaterials', [session.uid, eventId]).then(function(playerData){240		next(null, {code:200, playerData:playerData})241	}).catch(function(e){242		next(null, ErrorUtils.getError(e))243	})244}245/**246 * æåæ®é士å
µ247 * @param msg248 * @param session249 * @param next250 */251pro.recruitNormalSoldier = function(msg, session, next){252	var soldierName = msg.soldierName253	var count = msg.count254	var finishNow = msg.finishNow255	var e = null256	if(!DataUtils.isNormalSoldier(soldierName)){257		e = new Error("soldierName ä¸åæ³")258		next(e, ErrorUtils.getError(e))259		return260	}261	if(!_.isNumber(count) || count % 1 !== 0 || count < 1){262		e = new Error("count ä¸åæ³")263		next(e, ErrorUtils.getError(e))264		return265	}266	if(!_.isBoolean(finishNow)){267		e = new Error("finishNow ä¸åæ³")268		next(e, ErrorUtils.getError(e))269		return270	}271	this.request(session, 'recruitNormalSoldier', [session.uid, soldierName, count, finishNow]).then(function(playerData){272		next(null, {code:200, playerData:playerData})273	}).catch(function(e){274		next(null, ErrorUtils.getError(e))275	})276}277/**278 * æåç¹æ®å£«å
µ279 * @param msg280 * @param session281 * @param next282 */283pro.recruitSpecialSoldier = function(msg, session, next){284	var soldierName = msg.soldierName285	var count = msg.count286	var finishNow = msg.finishNow287	var e = null288	if(!DataUtils.hasSpecialSoldier(soldierName)){289		e = new Error("soldierName ä¸åæ³")290		next(e, ErrorUtils.getError(e))291		return292	}293	if(!_.isNumber(count) || count % 1 !== 0 || count < 1){294		e = new Error("count ä¸åæ³")295		next(e, ErrorUtils.getError(e))296		return297	}298	if(!_.isBoolean(finishNow)){299		e = new Error("finishNow ä¸åæ³")300		next(e, ErrorUtils.getError(e))301		return302	}303	this.request(session, 'recruitSpecialSoldier', [session.uid, soldierName, count, finishNow]).then(function(playerData){304		next(null, {code:200, playerData:playerData})305	}).catch(function(e){306		next(null, ErrorUtils.getError(e))307	})308}309/**310 * å¶ä½é¾è£
å¤311 * @param msg312 * @param session313 * @param next314 */315pro.makeDragonEquipment = function(msg, session, next){316	var equipmentName = msg.equipmentName317	var finishNow = msg.finishNow318	var e = null319	if(!DataUtils.isDragonEquipment(equipmentName)){320		e = new Error("equipmentName ä¸åæ³")321		next(e, ErrorUtils.getError(e))322		return323	}324	if(!_.isBoolean(finishNow)){325		e = new Error("finishNow ä¸åæ³")326		next(e, ErrorUtils.getError(e))327		return328	}329	this.request(session, 'makeDragonEquipment', [session.uid, equipmentName, finishNow]).then(function(playerData){330		next(null, {code:200, playerData:playerData})331	}).catch(function(e){332		next(null, ErrorUtils.getError(e))333	})334}335/**336 * æ²»ç士å
µ337 * @param msg338 * @param session339 * @param next340 */341pro.treatSoldier = function(msg, session, next){342	var soldiers = msg.soldiers343	var finishNow = msg.finishNow344	var e = null345	if(!_.isArray(soldiers)){346		e = new Error("soldiers ä¸åæ³")347		next(e, ErrorUtils.getError(e))348		return349	}350	if(!_.isBoolean(finishNow)){351		e = new Error("finishNow ä¸åæ³")352		next(e, ErrorUtils.getError(e))353		return354	}355	this.request(session, 'treatSoldier', [session.uid, soldiers, finishNow]).then(function(playerData){356		next(null, {code:200, playerData:playerData})357	}).catch(function(e){358		next(null, ErrorUtils.getError(e))359	})360}361/**362 * åµåé¾è363 * @param msg364 * @param session365 * @param next366 */367pro.hatchDragon = function(msg, session, next){368	var dragonType = msg.dragonType369	var e = null370	if(!DataUtils.isDragonTypeExist(dragonType)){371		e = new Error("dragonType ä¸åæ³")372		next(e, ErrorUtils.getError(e))373		return374	}375	this.request(session, 'hatchDragon', [session.uid, dragonType]).then(function(playerData){376		next(null, {code:200, playerData:playerData})377	}).catch(function(e){378		next(null, ErrorUtils.getError(e))379	})380}381/**382 * 设置é¾çè£
å¤383 * @param msg384 * @param session385 * @param next386 */387pro.setDragonEquipment = function(msg, session, next){388	var dragonType = msg.dragonType389	var equipmentCategory = msg.equipmentCategory390	var equipmentName = msg.equipmentName391	var e = null392	if(!DataUtils.isDragonTypeExist(dragonType)){393		e = new Error("dragonType ä¸åæ³")394		next(e, ErrorUtils.getError(e))395		return396	}397	if(!_.contains(Consts.DragonEquipmentCategory, equipmentCategory)){398		e = new Error("equipmentCategory ä¸åæ³")399		next(e, ErrorUtils.getError(e))400		return401	}402	if(!DataUtils.isDragonEquipment(equipmentName)){403		e = new Error("equipmentName ä¸åæ³")404		next(e, ErrorUtils.getError(e))405		return406	}407	if(!DataUtils.isDragonEquipmentLegalAtCategory(equipmentName, equipmentCategory)){408		e = new Error("equipmentName ä¸è½è£
å¤å°equipmentCategory")409		next(e, ErrorUtils.getError(e))410		return411	}412	if(!DataUtils.isDragonEquipmentLegalOnDragon(equipmentName, dragonType)){413		e = new Error("equipmentName ä¸è½è£
å¤å°dragonType")414		next(e, ErrorUtils.getError(e))415		return416	}417	this.request(session, 'setDragonEquipment', [session.uid, dragonType, equipmentCategory, equipmentName]).then(function(playerData){418		next(null, {code:200, playerData:playerData})419	}).catch(function(e){420		next(null, ErrorUtils.getError(e))421	})422}423/**424 * 强åé¾çè£
å¤425 * @param msg426 * @param session427 * @param next428 */429pro.enhanceDragonEquipment = function(msg, session, next){430	var dragonType = msg.dragonType431	var equipmentCategory = msg.equipmentCategory432	var equipments = msg.equipments433	var e = null434	if(!DataUtils.isDragonTypeExist(dragonType)){435		e = new Error("dragonType ä¸åæ³")436		next(e, ErrorUtils.getError(e))437		return438	}439	if(!_.contains(Consts.DragonEquipmentCategory, equipmentCategory)){440		e = new Error("equipmentCategory ä¸åæ³")441		next(e, ErrorUtils.getError(e))442		return443	}444	if(!_.isArray(equipments)){445		e = new Error("equipments ä¸åæ³")446		next(e, ErrorUtils.getError(e))447		return448	}449	this.request(session, 'enhanceDragonEquipment', [session.uid, dragonType, equipmentCategory, equipments]).then(function(playerData){450		next(null, {code:200, playerData:playerData})451	}).catch(function(e){452		next(null, ErrorUtils.getError(e))453	})454}455/**456 * éç½®é¾çè£
å¤çéæºBuff457 * @param msg458 * @param session459 * @param next460 */461pro.resetDragonEquipment = function(msg, session, next){462	var dragonType = msg.dragonType463	var equipmentCategory = msg.equipmentCategory464	var e = null465	if(!DataUtils.isDragonTypeExist(dragonType)){466		e = new Error("dragonType ä¸åæ³")467		next(e, ErrorUtils.getError(e))468		return469	}470	if(!_.contains(Consts.DragonEquipmentCategory, equipmentCategory)){471		e = new Error("equipmentCategory ä¸åæ³")472		next(e, ErrorUtils.getError(e))473		return474	}475	this.request(session, 'resetDragonEquipment', [session.uid, dragonType, equipmentCategory]).then(function(playerData){476		next(null, {code:200, playerData:playerData})477	}).catch(function(e){478		next(null, ErrorUtils.getError(e))479	})480}481/**482 * å级é¾çæè½483 * @param msg484 * @param session485 * @param next486 */487pro.upgradeDragonSkill = function(msg, session, next){488	var dragonType = msg.dragonType489	var skillKey = msg.skillKey490	var e = null491	if(!DataUtils.isDragonTypeExist(dragonType)){492		e = new Error("dragonType ä¸åæ³")493		next(e, ErrorUtils.getError(e))494		return495	}496	if(!_.isString(skillKey) || skillKey.trim().length === 0 || skillKey.trim().length > Define.InputLength.DragonSkillKey){497		e = new Error("skillKey ä¸åæ³")498		next(e, ErrorUtils.getError(e))499		return500	}501	this.request(session, 'upgradeDragonSkill', [session.uid, dragonType, skillKey]).then(function(playerData){502		next(null, {code:200, playerData:playerData})503	}).catch(function(e){504		next(null, ErrorUtils.getError(e))505	})506}507/**508 * å级é¾çæçº§509 * @param msg510 * @param session511 * @param next512 */513pro.upgradeDragonStar = function(msg, session, next){514	var dragonType = msg.dragonType515	var e = null516	if(!DataUtils.isDragonTypeExist(dragonType)){517		e = new Error("dragonType ä¸åæ³")518		next(e, ErrorUtils.getError(e))519		return520	}521	this.request(session, 'upgradeDragonStar', [session.uid, dragonType]).then(function(playerData){522		next(null, {code:200, playerData:playerData})523	}).catch(function(e){524		next(null, ErrorUtils.getError(e))525	})526}527/**528 * è·åæ¯æ¥ä»»å¡å表529 * @param msg530 * @param session531 * @param next532 */533pro.getDailyQuests = function(msg, session, next){534	this.request(session, 'getDailyQuests', [session.uid]).then(function(playerData){535		next(null, {code:200, playerData:playerData})536	}).catch(function(e){537		next(null, ErrorUtils.getError(e))538	})539}540/**541 * ä¸ºæ¯æ¥ä»»å¡ä¸æä¸ªä»»å¡å¢å æçº§542 * @param msg543 * @param session544 * @param next545 */546pro.addDailyQuestStar = function(msg, session, next){547	var questId = msg.questId548	var e = null549	if(!_.isString(questId) || !ShortId.isValid(questId)){550		e = new Error("questId ä¸åæ³")551		next(e, ErrorUtils.getError(e))552		return553	}554	this.request(session, 'addDailyQuestStar', [session.uid, questId]).then(function(playerData){555		next(null, {code:200, playerData:playerData})556	}).catch(function(e){557		next(null, ErrorUtils.getError(e))558	})559}560/**561 * å¼å§ä¸ä¸ªæ¯æ¥ä»»å¡562 * @param msg563 * @param session564 * @param next565 */566pro.startDailyQuest = function(msg, session, next){567	var questId = msg.questId568	var e = null569	if(!_.isString(questId) || !ShortId.isValid(questId)){570		e = new Error("questId ä¸åæ³")571		next(e, ErrorUtils.getError(e))572		return573	}574	this.request(session, 'startDailyQuest', [session.uid, questId]).then(function(playerData){575		next(null, {code:200, playerData:playerData})576	}).catch(function(e){577		next(null, ErrorUtils.getError(e))578	})579}580/**581 * é¢åæ¯æ¥ä»»å¡å¥å±582 * @param msg583 * @param session584 * @param next585 */586pro.getDailyQeustReward = function(msg, session, next){587	var questEventId = msg.questEventId588	var e = null589	if(!_.isString(questEventId) || !ShortId.isValid(questEventId)){590		e = new Error("questEventId ä¸åæ³")591		next(e, ErrorUtils.getError(e))592		return593	}594	this.request(session, 'getDailyQeustReward', [session.uid, questEventId]).then(function(playerData){595		next(null, {code:200, playerData:playerData})596	}).catch(function(e){597		next(null, ErrorUtils.getError(e))598	})599}600/**601 * 设置ç©å®¶è¯è¨602 * @param msg603 * @param session604 * @param next605 */606pro.setPlayerLanguage = function(msg, session, next){607	var language = msg.language608	var e = null609	if(!_.contains(Consts.PlayerLanguage, language)){610		e = new Error("language ä¸åæ³")611		next(e, ErrorUtils.getError(e))612		return613	}614	this.request(session, 'setPlayerLanguage', [session.uid, language]).then(function(playerData){615		next(null, {code:200, playerData:playerData})616	}).catch(function(e){617		next(null, ErrorUtils.getError(e))618	})619}620/**621 * è·åç©å®¶ä¸ªäººä¿¡æ¯622 * @param msg623 * @param session624 * @param next625 */626pro.getPlayerInfo = function(msg, session, next){627	var self = this;628	var memberId = msg.memberId;629	var e = null630	if(!_.isString(memberId) || !ShortId.isValid(memberId)){631		e = new Error("memberId ä¸åæ³")632		next(e, ErrorUtils.getError(e))633		return634	}635	self.app.get('Player').findById(memberId, 'serverId').then(function(doc){636		if(!_.isObject(doc)){637			return Promise.reject(ErrorUtils.playerNotExist(session.uid, memberId));638		}639		return self.request(session, 'getPlayerInfo', [session.uid, memberId], doc.serverId);640	}).then(function(playerViewData){641		next(null, {code:200, playerViewData:playerViewData})642	}).catch(function(e){643		next(null, ErrorUtils.getError(e))644	})645}646/**647 * åé个人é®ä»¶648 * @param msg649 * @param session650 * @param next651 */652pro.sendMail = function(msg, session, next){653	var self = this;654	var memberId = msg.memberId;655	var title = msg.title;656	var content = msg.content;657	var sendAsMod = msg.sendAsMod;658	var replyMod = msg.replyMod;659	var e = null660	if(!_.isString(memberId) || !ShortId.isValid(memberId)){661		e = new Error("memberId ä¸åæ³")662		return next(e, ErrorUtils.getError(e))663	}664	if(_.isEqual(session.uid, memberId)){665		e = new Error("ä¸è½ç»èªå·±åé®ä»¶")666		return next(e, ErrorUtils.getError(e))667	}668	if(!_.isString(title) || title.trim().length === 0 || title.trim().length > Define.InputLength.MailTitle){669		e = new Error("title ä¸åæ³")670		return next(e, ErrorUtils.getError(e))671	}672	if(!_.isString(content) || content.trim().length === 0 || content.trim().length > Define.InputLength.MailContent){673		e = new Error("content ä¸åæ³")674		return next(e, ErrorUtils.getError(e))675	}676	var amModDoc = null;677	var targetModDoc = null;678	var memberDoc = null;679	var Player = this.app.get('Player');680	Player.findById(memberId, 'serverId basicInfo.name').then(function(doc){681		if(!_.isObject(doc)){682			return Promise.reject(ErrorUtils.playerNotExist(session.uid, memberId));683		}684		memberDoc = doc;685	}).then(function(){686		if(!!sendAsMod){687			return self.app.get('Mod').findById(session.uid).then(function(doc){688				if(!doc){689					return Promise.reject(ErrorUtils.youAreNotTheMod(session.uid));690				}691				amModDoc = doc;692			})693		}694	}).then(function(){695		if(!!replyMod){696			return self.app.get('Mod').findById(memberId).then(function(doc){697				if(!doc){698					return Promise.reject(ErrorUtils.targetNotModNowCanNotReply(session.uid, memberId));699				}700				targetModDoc = doc;701			})702		}703	}).then(function(){704		var playerId = session.uid;705		var fromName = !!sendAsMod ? amModDoc.name : session.get('name');706		var fromIcon = !!sendAsMod ? -1 : session.get('icon');707		var fromAllianceTag = !!sendAsMod ? '' : session.get('allianceTag');708		var toName = !!replyMod ? targetModDoc.name : memberDoc.basicInfo.name;709		var toIcon = !!replyMod ? -1 : memberDoc.basicInfo.icon;710		var mailToMember = {711			id:ShortId.generate(),712			title:title,713			fromId:playerId,714			fromName:fromName,715			fromIcon:fromIcon,716			fromAllianceTag:fromAllianceTag,717			toIcon:toIcon,718			content:content,719			sendTime:Date.now(),720			rewards:[],721			rewardGetted:false,722			isRead:false,723			isSaved:false724		}725		var mailToPlayer = {726			id:ShortId.generate(),727			title:title,728			fromName:fromName,729			fromIcon:fromIcon,730			fromAllianceTag:fromAllianceTag,731			toId:memberId,732			toName:toName,733			toIcon:toIcon,734			content:content,735			sendTime:Date.now()736		}737		return self.request(session, 'addMail', [memberId, mailToMember], memberDoc.serverId).then(function(){738			return self.request(session, 'addSendMail', [playerId, mailToPlayer])739		})740	}).then(function(){741		next(null, {code:200})742	}).catch(function(e){743		console.error(e)744		next(null, ErrorUtils.getError(e))745	})746}747/**748 * é
读é®ä»¶749 * @param msg750 * @param session751 * @param next752 */753pro.readMails = function(msg, session, next){754	var mailIds = msg.mailIds755	var e = null756	if(!_.isArray(mailIds) || mailIds.length == 0){757		e = new Error("mailIds ä¸åæ³")758		next(e, ErrorUtils.getError(e))759		return760	}761	for(var i = 0; i < mailIds.length; i++){762		if(!ShortId.isValid(mailIds[i])){763			e = new Error("mailIds ä¸åæ³")764			next(e, ErrorUtils.getError(e))765			return766		}767	}768	this.request(session, 'readMails', [session.uid, mailIds]).then(function(playerData){769		next(null, {code:200, playerData:playerData})770	}).catch(function(e){771		next(null, ErrorUtils.getError(e))772	})773}774/**775 * æ¶èé®ä»¶776 * @param msg777 * @param session778 * @param next779 */780pro.saveMail = function(msg, session, next){781	var mailId = msg.mailId782	var e = null783	if(!_.isString(mailId) || !ShortId.isValid(mailId)){784		e = new Error("mailId ä¸åæ³")785		next(e, ErrorUtils.getError(e))786		return787	}788	this.request(session, 'saveMail', [session.uid, mailId]).then(function(playerData){789		next(null, {code:200, playerData:playerData})790	}).catch(function(e){791		next(null, ErrorUtils.getError(e))792	})793}794/**795 * åæ¶æ¶èé®ä»¶796 * @param msg797 * @param session798 * @param next799 */800pro.unSaveMail = function(msg, session, next){801	var mailId = msg.mailId802	var e = null803	if(!_.isString(mailId) || !ShortId.isValid(mailId)){804		e = new Error("mailId ä¸åæ³")805		next(e, ErrorUtils.getError(e))806		return807	}808	this.request(session, 'unSaveMail', [session.uid, mailId]).then(function(playerData){809		next(null, {code:200, playerData:playerData})810	}).catch(function(e){811		next(null, ErrorUtils.getError(e))812	})813}814/**815 * è·åç©å®¶é®ä»¶816 * @param msg817 * @param session818 * @param next819 */820pro.getMails = function(msg, session, next){821	var fromIndex = msg.fromIndex822	var e = null823	if(!_.isNumber(fromIndex) || fromIndex % 1 !== 0 || fromIndex < 0){824		e = new Error("fromIndex ä¸åæ³")825		next(e, ErrorUtils.getError(e))826		return827	}828	this.request(session, 'getMails', [session.uid, fromIndex]).then(function(mails){829		next(null, {code:200, mails:mails})830	}).catch(function(e){831		next(null, ErrorUtils.getError(e))832	})833}834/**835 * è·åç©å®¶å·²åé®ä»¶836 * @param msg837 * @param session838 * @param next839 */840pro.getSendMails = function(msg, session, next){841	var fromIndex = msg.fromIndex842	var e = null843	if(!_.isNumber(fromIndex) || fromIndex % 1 !== 0 || fromIndex < 0){844		e = new Error("fromIndex ä¸åæ³")845		next(e, ErrorUtils.getError(e))846		return847	}848	this.request(session, 'getSendMails', [session.uid, fromIndex]).then(function(mails){849		next(null, {code:200, mails:mails})850	}).catch(function(e){851		next(null, ErrorUtils.getError(e))852	})853}854/**855 * è·åç©å®¶å·²åé®ä»¶856 * @param msg857 * @param session858 * @param next859 */860pro.getSavedMails = function(msg, session, next){861	var fromIndex = msg.fromIndex862	var e = null863	if(!_.isNumber(fromIndex) || fromIndex % 10 !== 0 || fromIndex < 0){864		e = new Error("fromIndex ä¸åæ³")865		next(e, ErrorUtils.getError(e))866		return867	}868	this.request(session, 'getSavedMails', [session.uid, fromIndex]).then(function(mails){869		next(null, {code:200, mails:mails})870	}).catch(function(e){871		next(null, ErrorUtils.getError(e))872	})873}874/**875 * å é¤é®ä»¶876 * @param msg877 * @param session878 * @param next879 */880pro.deleteMails = function(msg, session, next){881	var mailIds = msg.mailIds882	var e = null883	if(!_.isArray(mailIds) || mailIds.length == 0){884		e = new Error("mailIds ä¸åæ³")885		next(e, ErrorUtils.getError(e))886		return887	}888	for(var i = 0; i < mailIds.length; i++){889		if(!ShortId.isValid(mailIds[i])){890			e = new Error("mailIds ä¸åæ³")891			next(e, ErrorUtils.getError(e))892			return893		}894	}895	this.request(session, 'deleteMails', [session.uid, mailIds]).then(function(playerData){896		next(null, {code:200, playerData:playerData})897	}).catch(function(e){898		next(null, ErrorUtils.getError(e))899	})900}901/**902 * å é¤å·²åé®ä»¶903 * @param msg904 * @param session905 * @param next906 */907pro.deleteSendMails = function(msg, session, next){908	var mailIds = msg.mailIds909	var e = null910	if(!_.isArray(mailIds) || mailIds.length == 0){911		e = new Error("mailIds ä¸åæ³")912		next(e, ErrorUtils.getError(e))913		return914	}915	for(var i = 0; i < mailIds.length; i++){916		if(!ShortId.isValid(mailIds[i])){917			e = new Error("mailIds ä¸åæ³")918			next(e, ErrorUtils.getError(e))919			return920		}921	}922	this.request(session, 'deleteSendMails', [session.uid, mailIds]).then(function(playerData){923		next(null, {code:200, playerData:playerData})924	}).catch(function(e){925		next(null, ErrorUtils.getError(e))926	})927}928/**929 * ä»é®ä»¶è·åå¥å±930 * @param msg931 * @param session932 * @param next933 */934pro.getMailRewards = function(msg, session, next){935	var mailId = msg.mailId936	var e = null937	if(!ShortId.isValid(mailId)){938		e = new Error("mailId ä¸åæ³")939		next(e, ErrorUtils.getError(e))940		return941	}942	this.request(session, 'getMailRewards', [session.uid, mailId]).then(function(playerData){943		next(null, {code:200, playerData:playerData})944	}).catch(function(e){945		next(null, ErrorUtils.getError(e))946	})947}948/**949 * é
è¯»ææ¥950 * @param msg951 * @param session952 * @param next953 */954pro.readReports = function(msg, session, next){955	var reportIds = msg.reportIds956	var e = null957	if(!_.isArray(reportIds) || reportIds.length == 0){958		e = new Error("reportIds ä¸åæ³")959		next(e, ErrorUtils.getError(e))960		return961	}962	for(var i = 0; i < reportIds.length; i++){963		if(!ShortId.isValid(reportIds[i])){964			e = new Error("reportIds ä¸åæ³")965			next(e, ErrorUtils.getError(e))966			return967		}968	}969	this.request(session, 'readReports', [session.uid, reportIds]).then(function(playerData){970		next(null, {code:200, playerData:playerData})971	}).catch(function(e){972		next(null, ErrorUtils.getError(e))973	})974}975/**976 * æ¶èææ¥977 * @param msg978 * @param session979 * @param next980 */981pro.saveReport = function(msg, session, next){982	var reportId = msg.reportId983	var e = null984	if(!_.isString(reportId) || !ShortId.isValid(reportId)){985		e = new Error("reportId ä¸åæ³")986		next(e, ErrorUtils.getError(e))987		return988	}989	this.request(session, 'saveReport', [session.uid, reportId]).then(function(playerData){990		next(null, {code:200, playerData:playerData})991	}).catch(function(e){992		next(null, ErrorUtils.getError(e))993	})994}995/**996 * åæ¶æ¶èææ¥997 * @param msg998 * @param session999 * @param next1000 */1001pro.unSaveReport = function(msg, session, next){1002	var reportId = msg.reportId1003	var e = null1004	if(!_.isString(reportId) || !ShortId.isValid(reportId)){1005		e = new Error("reportId ä¸åæ³")1006		next(e, ErrorUtils.getError(e))1007		return1008	}1009	this.request(session, 'unSaveReport', [session.uid, reportId]).then(function(playerData){1010		next(null, {code:200, playerData:playerData})1011	}).catch(function(e){1012		next(null, ErrorUtils.getError(e))1013	})1014}1015/**1016 * è·åç©å®¶ææ¥1017 * @param msg1018 * @param session1019 * @param next1020 */1021pro.getReports = function(msg, session, next){1022	var fromIndex = msg.fromIndex1023	var e = null1024	if(!_.isNumber(fromIndex) || fromIndex % 1 !== 0 || fromIndex < 0){1025		e = new Error("fromIndex ä¸åæ³")1026		next(e, ErrorUtils.getError(e))1027		return1028	}1029	this.request(session, 'getReports', [session.uid, fromIndex]).then(function(reports){1030		next(null, {code:200, reports:reports})1031	}).catch(function(e){1032		next(null, ErrorUtils.getError(e))1033	})1034}1035/**1036 * è·åç©å®¶å·²åææ¥1037 * @param msg1038 * @param session1039 * @param next1040 */1041pro.getSavedReports = function(msg, session, next){1042	var fromIndex = msg.fromIndex1043	var e = null1044	if(!_.isNumber(fromIndex) || fromIndex % 1 !== 0 || fromIndex < 0){1045		e = new Error("fromIndex ä¸åæ³")1046		next(e, ErrorUtils.getError(e))1047		return1048	}1049	this.request(session, 'getSavedReports', [session.uid, fromIndex]).then(function(reports){1050		next(null, {code:200, reports:reports})1051	}).catch(function(e){1052		next(null, ErrorUtils.getError(e))1053	})1054}1055/**1056 * å é¤ææ¥1057 * @param msg1058 * @param session1059 * @param next1060 */1061pro.deleteReports = function(msg, session, next){1062	var reportIds = msg.reportIds1063	var e = null1064	if(!_.isArray(reportIds) || reportIds.length == 0){1065		e = new Error("reportIds ä¸åæ³")1066		next(e, ErrorUtils.getError(e))1067		return1068	}1069	for(var i = 0; i < reportIds.length; i++){1070		if(!ShortId.isValid(reportIds[i])){1071			e = new Error("reportIds ä¸åæ³")1072			next(e, ErrorUtils.getError(e))1073			return1074		}1075	}1076	this.request(session, 'deleteReports', [session.uid, reportIds]).then(function(playerData){1077		next(null, {code:200, playerData:playerData})1078	}).catch(function(e){1079		next(null, ErrorUtils.getError(e))1080	})1081}1082/**1083 * è·åç©å®¶å¯è§åæ°æ®æ°æ®1084 * @param msg1085 * @param session1086 * @param next1087 */1088pro.getPlayerViewData = function(msg, session, next){1089	var targetPlayerId = msg.targetPlayerId1090	var e = null1091	if(!_.isString(targetPlayerId) || !ShortId.isValid(targetPlayerId)){1092		e = new Error("targetPlayerId ä¸åæ³")1093		next(e, ErrorUtils.getError(e))1094		return1095	}1096	this.request(session, 'getPlayerViewData', [session.uid, targetPlayerId]).then(function(playerViewData){1097		next(null, {code:200, playerViewData:playerViewData})1098	}).catch(function(e){1099		next(null, ErrorUtils.getError(e))1100	})1101}1102/**1103 * 设置驻é²ä½¿ç¨çé¨é1104 * @param msg1105 * @param session1106 * @param next1107 */1108pro.setDefenceTroop = function(msg, session, next){1109	var dragonType = msg.dragonType;1110	var soldiers = msg.soldiers;1111	var e = null1112	if(!DataUtils.isDragonTypeExist(dragonType)){1113		e = new Error("dragonType ä¸åæ³")1114		next(e, ErrorUtils.getError(e))1115		return1116	}1117	if(!_.isArray(soldiers)){1118		e = new Error("soldiers ä¸åæ³")1119		next(e, ErrorUtils.getError(e))1120		return1121	}1122	this.request(session, 'setDefenceTroop', [session.uid, dragonType, soldiers]).then(function(playerData){1123		next(null, {code:200, playerData:playerData})1124	}).catch(function(e){1125		next(null, ErrorUtils.getError(e))1126	})1127}1128/**1129 * åæ¶é©»é²1130 * @param msg1131 * @param session1132 * @param next1133 */1134pro.cancelDefenceTroop = function(msg, session, next){1135	this.request(session, 'cancelDefenceTroop', [session.uid]).then(function(playerData){1136		next(null, {code:200, playerData:playerData})1137	}).catch(function(e){1138		next(null, ErrorUtils.getError(e))1139	})1140}1141/**1142 * åºå®åå1143 * @param msg1144 * @param session1145 * @param next1146 */1147pro.sellItem = function(msg, session, next){1148	var type = msg.type1149	var name = msg.name1150	var count = msg.count1151	var price = msg.price1152	var e = null1153	if(!_.contains(_.values(_.keys(Consts.ResourcesCanDeal)), type)){1154		e = new Error("type ä¸åæ³")1155		next(e, ErrorUtils.getError(e))1156		return1157	}1158	if(!_.contains(Consts.ResourcesCanDeal[type], name)){1159		e = new Error("name ä¸åæ³")1160		next(e, ErrorUtils.getError(e))1161		return1162	}1163	if(!_.isString(name)){1164		e = new Error("name ä¸åæ³")1165		next(e, ErrorUtils.getError(e))1166		return1167	}1168	if(!_.isNumber(count) || count % 1 !== 0 || count <= 0){1169		e = new Error("count ä¸åæ³")1170		next(e, ErrorUtils.getError(e))1171		return1172	}1173	if(!_.isNumber(price) || price % 1 !== 0 || price <= 0){1174		e = new Error("price ä¸åæ³")1175		next(e, ErrorUtils.getError(e))1176		return1177	}1178	this.request(session, 'sellItem', [session.uid, type, name, count, price]).then(function(playerData){1179		next(null, {code:200, playerData:playerData})1180	}).catch(function(e){1181		next(null, ErrorUtils.getError(e))1182	})1183}1184/**1185 * è·åååå表1186 * @param msg1187 * @param session1188 * @param next1189 */1190pro.getSellItems = function(msg, session, next){1191	var type = msg.type1192	var name = msg.name1193	var e = null1194	if(!_.contains(_.values(_.keys(Consts.ResourcesCanDeal)), type)){1195		e = new Error("type ä¸åæ³")1196		next(e, ErrorUtils.getError(e))1197		return1198	}1199	if(!_.contains(Consts.ResourcesCanDeal[type], name)){1200		e = new Error("name ä¸åæ³")1201		next(e, ErrorUtils.getError(e))1202		return1203	}1204	if(!_.isString(name)){1205		e = new Error("name ä¸åæ³")1206		next(e, ErrorUtils.getError(e))1207		return1208	}1209	this.request(session, 'getSellItems', [session.uid, type, name]).then(function(itemDocs){1210		next(null, {code:200, itemDocs:itemDocs})1211	}).catch(function(e){1212		next(null, ErrorUtils.getError(e))1213	})1214}1215/**1216 * è´ä¹°åºå®çåå1217 * @param msg1218 * @param session1219 * @param next1220 */1221pro.buySellItem = function(msg, session, next){1222	var itemId = msg.itemId1223	var e = null1224	if(!_.isString(itemId) || !ShortId.isValid(itemId)){1225		e = new Error("itemId ä¸åæ³")1226		next(e, ErrorUtils.getError(e))1227		return1228	}1229	this.request(session, 'buySellItem', [session.uid, itemId]).then(function(playerData){1230		next(null, {code:200, playerData:playerData})1231	}).catch(function(e){1232		next(null, ErrorUtils.getError(e))1233	})1234}1235/**1236 * è·ååºå®åèµåçé¶å¸1237 * @param msg1238 * @param session1239 * @param next1240 */1241pro.getMyItemSoldMoney = function(msg, session, next){1242	var itemId = msg.itemId1243	var e = null1244	if(!_.isString(itemId) || !ShortId.isValid(itemId)){1245		e = new Error("itemId ä¸åæ³")1246		next(e, ErrorUtils.getError(e))1247		return1248	}1249	this.request(session, 'getMyItemSoldMoney', [session.uid, itemId]).then(function(playerData){1250		next(null, {code:200, playerData:playerData})1251	}).catch(function(e){1252		next(null, ErrorUtils.getError(e))1253	})1254}1255/**1256 * 䏿¶åå1257 * @param msg1258 * @param session1259 * @param next1260 */1261pro.removeMySellItem = function(msg, session, next){1262	var itemId = msg.itemId1263	var e = null1264	if(!_.isString(itemId) || !ShortId.isValid(itemId)){1265		e = new Error("itemId ä¸åæ³")1266		next(e, ErrorUtils.getError(e))1267		return1268	}1269	this.request(session, 'removeMySellItem', [session.uid, itemId]).then(function(playerData){1270		next(null, {code:200, playerData:playerData})1271	}).catch(function(e){1272		next(null, ErrorUtils.getError(e))1273	})1274}1275/**1276 * 设置ç©å®¶Push Notification Id1277 * @param msg1278 * @param session1279 * @param next1280 */1281pro.setPushId = function(msg, session, next){1282	var pushId = msg.pushId1283	var e = null1284	if(!_.isString(pushId)){1285		e = new Error("pushId ä¸åæ³")1286		next(e, ErrorUtils.getError(e))1287		return1288	}1289	this.request(session, 'setPushId', [session.uid, pushId]).then(function(playerData){1290		next(null, {code:200, playerData:playerData})1291	}).catch(function(e){1292		next(null, ErrorUtils.getError(e))1293	})1294}1295/**1296 * å级çäº§ç§æ1297 * @param msg1298 * @param session1299 * @param next1300 */1301pro.upgradeProductionTech = function(msg, session, next){1302	var techName = msg.techName1303	var finishNow = msg.finishNow1304	var e = null1305	if(!DataUtils.isProductionTechNameLegal(techName)){1306		e = new Error("techName ä¸åæ³")1307		next(e, ErrorUtils.getError(e))1308		return1309	}1310	if(!_.isBoolean(finishNow)){1311		e = new Error("finishNow ä¸åæ³")1312		next(e, ErrorUtils.getError(e))1313		return1314	}1315	this.request(session, 'upgradeProductionTech', [session.uid, techName, finishNow]).then(function(playerData){1316		next(null, {code:200, playerData:playerData})1317	}).catch(function(e){1318		next(null, ErrorUtils.getError(e))1319	})1320}1321/**1322 * å级åäºç§æ1323 * @param msg1324 * @param session1325 * @param next1326 */1327pro.upgradeMilitaryTech = function(msg, session, next){1328	var techName = msg.techName1329	var finishNow = msg.finishNow1330	var e = null1331	if(!DataUtils.isMilitaryTechNameLegal(techName)){1332		e = new Error("techName ä¸åæ³")1333		next(e, ErrorUtils.getError(e))1334		return1335	}1336	if(!_.isBoolean(finishNow)){1337		e = new Error("finishNow ä¸åæ³")1338		next(e, ErrorUtils.getError(e))1339		return1340	}1341	this.request(session, 'upgradeMilitaryTech', [session.uid, techName, finishNow]).then(function(playerData){1342		next(null, {code:200, playerData:playerData})1343	}).catch(function(e){1344		next(null, ErrorUtils.getError(e))1345	})1346}1347/**1348 * å级士å
µæçº§1349 * @param msg1350 * @param session1351 * @param next1352 */1353pro.upgradeSoldierStar = function(msg, session, next){1354	var soldierName = msg.soldierName1355	var finishNow = msg.finishNow1356	var e = null1357	if(!DataUtils.isNormalSoldier(soldierName)){1358		e = new Error("soldierName ä¸åæ³")1359		next(e, ErrorUtils.getError(e))1360		return1361	}1362	if(!_.isBoolean(finishNow)){1363		e = new Error("finishNow ä¸åæ³")1364		next(e, ErrorUtils.getError(e))1365		return1366	}1367	this.request(session, 'upgradeSoldierStar', [session.uid, soldierName, finishNow]).then(function(playerData){1368		next(null, {code:200, playerData:playerData})1369	}).catch(function(e){1370		next(null, ErrorUtils.getError(e))1371	})1372}1373/**1374 * 设置ç©å®¶å°å½¢1375 * @param msg1376 * @param session1377 * @param next1378 */1379pro.setTerrain = function(msg, session, next){1380	var terrain = msg.terrain1381	var e = null1382	if(!_.contains(_.values(Consts.AllianceTerrain), terrain)){1383		e = new Error("terrain ä¸åæ³")1384		next(e, ErrorUtils.getError(e))1385		return1386	}1387	this.request(session, 'setTerrain', [session.uid, terrain]).then(function(playerData){1388		next(null, {code:200, playerData:playerData})1389	}).catch(function(e){1390		next(null, ErrorUtils.getError(e))1391	})1392}1393/**1394 * è´ä¹°éå
·1395 * @param msg1396 * @param session1397 * @param next1398 */1399pro.buyItem = function(msg, session, next){1400	var itemName = msg.itemName1401	var count = msg.count1402	var e = null1403	if(!DataUtils.isItemNameExist(itemName)){1404		e = new Error("itemName ä¸åæ³")1405		next(e, ErrorUtils.getError(e))1406		return1407	}1408	if(!_.isNumber(count) || count % 1 !== 0 || count <= 0){1409		e = new Error("count ä¸åæ³")1410		next(e, ErrorUtils.getError(e))1411		return1412	}1413	this.request(session, 'buyItem', [session.uid, itemName, count]).then(function(playerData){1414		next(null, {code:200, playerData:playerData})1415	}).catch(function(e){1416		next(null, ErrorUtils.getError(e))1417	})1418}1419/**1420 * 使ç¨éå
·1421 * @param msg1422 * @param session1423 * @param next1424 */1425pro.useItem = function(msg, session, next){1426	var itemName = msg.itemName1427	var params = msg.params1428	var e = null1429	if(!DataUtils.isItemNameExist(itemName)){1430		e = new Error("itemName ä¸åæ³")1431		next(e, ErrorUtils.getError(e))1432		return1433	}1434	if(!_.isObject(params) || !ItemUtils.isParamsLegal(itemName, params)){1435		e = new Error("params ä¸åæ³")1436		next(e, ErrorUtils.getError(e))1437		return1438	}1439	this.request(session, 'useItem', [session.uid, itemName, params]).then(function(playerData){1440		next(null, {code:200, playerData:playerData})1441	}).catch(function(e){1442		next(null, ErrorUtils.getError(e))1443	})1444}1445/**1446 * è´ä¹°å¹¶ä½¿ç¨éå
·1447 * @param msg1448 * @param session1449 * @param next1450 */1451pro.buyAndUseItem = function(msg, session, next){1452	var itemName = msg.itemName1453	var params = msg.params1454	var e = null1455	if(!DataUtils.isItemNameExist(itemName)){1456		e = new Error("itemName ä¸åæ³")1457		next(e, ErrorUtils.getError(e))1458		return1459	}1460	if(!_.isObject(params) || !ItemUtils.isParamsLegal(itemName, params)){1461		e = new Error("params ä¸åæ³")1462		next(e, ErrorUtils.getError(e))1463		return1464	}1465	this.request(session, 'buyAndUseItem', [session.uid, itemName, params]).then(function(playerData){1466		next(null, {code:200, playerData:playerData})1467	}).catch(function(e){1468		next(null, ErrorUtils.getError(e))1469	})1470}1471/**1472 * gacha1473 * @param msg1474 * @param session1475 * @param next1476 */1477pro.gacha = function(msg, session, next){1478	var type = msg.type1479	var e = null1480	if(!_.contains(_.values(Consts.GachaType), type)){1481		e = new Error("type ä¸åæ³")1482		next(e, ErrorUtils.getError(e))1483		return1484	}1485	this.request(session, 'gacha', [session.uid, type]).then(function(playerData){1486		next(null, {code:200, playerData:playerData})1487	}).catch(function(e){1488		next(null, ErrorUtils.getError(e))1489	})1490}1491/**1492 * 设置GameCenter Id1493 * @param msg1494 * @param session1495 * @param next1496 */1497pro.bindGc = function(msg, session, next){1498	var type = msg.type;1499	var gcId = msg.gcId;1500	var gcName = msg.gcName;1501	var e = null1502	if(!_.isString(gcId)){1503		e = new Error("gcId ä¸åæ³")1504		return next(e, ErrorUtils.getError(e))1505	}1506	if(!_.contains(Consts.GcTypes, type)){1507		e = new Error("type ä¸åæ³")1508		return next(e, ErrorUtils.getError(e))1509	}1510	if(!_.isString(gcName)){1511		e = new Error("gcName ä¸åæ³")1512		return next(e, ErrorUtils.getError(e))1513	}1514	this.request(session, 'bindGc', [session.uid, type, gcId, gcName]).then(function(playerData){1515		next(null, {code:200, playerData:playerData})1516	}).catch(function(e){1517		next(null, ErrorUtils.getError(e))1518	})1519}1520/**1521 * æ´æ°GcName1522 * @param msg1523 * @param session1524 * @param next1525 */1526pro.updateGcName = function(msg, session, next){1527	var gcName = msg.gcName;1528	var e = null1529	if(!_.isString(gcName)){1530		e = new Error("gcName ä¸åæ³")1531		return next(e, ErrorUtils.getError(e))1532	}1533	this.request(session, 'updateGcName', [session.uid, gcName]).then(function(playerData){1534		next(null, {code:200, playerData:playerData})1535	}).catch(function(e){1536		next(null, ErrorUtils.getError(e))1537	})1538}1539/**1540 * 忢GameCenterè´¦å·1541 * @param msg1542 * @param session1543 * @param next1544 */1545pro.switchGc = function(msg, session, next){1546	var gcId = msg.gcId1547	var e = null1548	if(!_.isString(gcId)){1549		e = new Error("gcId ä¸åæ³")1550		next(e, ErrorUtils.getError(e))1551		return1552	}1553	this.request(session, 'switchGc', [session.uid, session.get("deviceId"), gcId]).then(function(){1554		next(null, {code:200})1555	}).catch(function(e){1556		next(null, ErrorUtils.getError(e))1557	})1558}1559/**1560 * è·åæ¯æ¥ç»éå¥å±1561 * @param msg1562 * @param session1563 * @param next1564 */1565pro.getDay60Reward = function(msg, session, next){1566	this.request(session, 'getDay60Reward', [session.uid]).then(function(playerData){1567		next(null, {code:200, playerData:playerData})1568	}).catch(function(e){1569		next(null, ErrorUtils.getError(e))1570	})1571}1572/**1573 * è·åæ¯æ¥å¨çº¿å¥å±1574 * @param msg1575 * @param session1576 * @param next1577 */1578pro.getOnlineReward = function(msg, session, next){1579	var timePoint = msg.timePoint1580	var e = null1581	if(!DataUtils.isOnLineTimePointExist(timePoint)){1582		e = new Error("timePoint ä¸åæ³")1583		next(e, ErrorUtils.getError(e))1584	}1585	this.request(session, 'getOnlineReward', [session.uid, timePoint]).then(function(playerData){1586		next(null, {code:200, playerData:playerData})1587	}).catch(function(e){1588		next(null, ErrorUtils.getError(e))1589	})1590}1591/**1592 * è·å14æ¥ç»éå¥å±1593 * @param msg1594 * @param session1595 * @param next1596 */1597pro.getDay14Reward = function(msg, session, next){1598	this.request(session, 'getDay14Reward', [session.uid]).then(function(playerData){1599		next(null, {code:200, playerData:playerData})1600	}).catch(function(e){1601		next(null, ErrorUtils.getError(e))1602	})1603}1604/**1605 * è·åæ°ç©å®¶å²çº§å¥å±1606 * @param msg1607 * @param session1608 * @param next1609 */1610pro.getLevelupReward = function(msg, session, next){1611	var levelupIndex = msg.levelupIndex1612	var e = null1613	if(!DataUtils.isLevelupIndexExist(levelupIndex)){1614		e = new Error("levelupIndex ä¸åæ³")1615		next(e, ErrorUtils.getError(e))1616		return1617	}1618	this.request(session, 'getLevelupReward', [session.uid, levelupIndex]).then(function(playerData){1619		next(null, {code:200, playerData:playerData})1620	}).catch(function(e){1621		next(null, ErrorUtils.getError(e))1622	})1623}1624/**1625 * ä¸ä¼ IosIAPä¿¡æ¯1626 * @param msg1627 * @param session1628 * @param next1629 */1630pro.addIosPlayerBillingData = function(msg, session, next){1631	var receiptData = msg.receiptData1632	var e = null1633	if(!_.isString(receiptData) || _.isEmpty(receiptData.trim())){1634		e = new Error("receiptData ä¸åæ³")1635		next(e, ErrorUtils.getError(e))1636		return1637	}1638	var jsonString = new Buffer(receiptData, 'base64').toString();1639	var productIdMathResult = jsonString.match(/"product-id" = "(.*)";/)1640	var transactionIdMathResult = jsonString.match(/"transaction-id" = "(.*)";/)1641	if(!_.isArray(productIdMathResult) || productIdMathResult.length < 2){1642		e = new Error("receiptData ä¸åæ³")1643		next(e, ErrorUtils.getError(e))1644		return1645	}1646	if(!_.isArray(transactionIdMathResult) || transactionIdMathResult.length < 2){1647		e = new Error("receiptData ä¸åæ³")1648		next(e, ErrorUtils.getError(e))1649		return1650	}1651	var productId = productIdMathResult[1];1652	var transactionId = transactionIdMathResult[1];1653	this.request(session, 'addIosPlayerBillingData', [session.uid, productId, transactionId, receiptData]).then(function(playerData){1654		next(null, {code:200, playerData:playerData, transactionId:transactionId})1655	}).catch(function(e){1656		next(null, ErrorUtils.getError(e))1657	})1658}1659/**1660 * ä¸ä¼ Wp宿¹IAPä¿¡æ¯1661 * @param msg1662 * @param session1663 * @param next1664 */1665pro.addWpOfficialPlayerBillingData = function(msg, session, next){1666	var receiptData = msg.receiptData1667	var e = null1668	if(!_.isString(receiptData) || _.isEmpty(receiptData.trim())){1669		e = new Error("receiptData ä¸åæ³")1670		next(e, ErrorUtils.getError(e))1671		return1672	}1673	var doc = new DOMParser().parseFromString(receiptData);1674	if(!doc){1675		e = new Error("receiptData ä¸åæ³")1676		return next(e, ErrorUtils.getError(e))1677	}1678	var receipt = doc.getElementsByTagName('Receipt')[0];1679	if(!receipt){1680		e = new Error("receiptData ä¸åæ³")1681		return next(e, ErrorUtils.getError(e))1682	}1683	var productReceipt = receipt.getElementsByTagName('ProductReceipt')[0];1684	if(!productReceipt){1685		e = new Error("receiptData ä¸åæ³")1686		return next(e, ErrorUtils.getError(e))1687	}1688	var productId = productReceipt.getAttribute('ProductId');1689	if(!productId){1690		e = new Error("receiptData ä¸åæ³")1691		return next(e, ErrorUtils.getError(e))1692	}1693	var transactionId = productReceipt.getAttribute('Id');1694	if(!transactionId){1695		e = new Error("receiptData ä¸åæ³")1696		return next(e, ErrorUtils.getError(e))1697	}1698	this.request(session, 'addWpOfficialPlayerBillingData', [session.uid, productId, transactionId, receiptData]).then(function(playerData){1699		next(null, {code:200, playerData:playerData, productId:productId, transactionId:transactionId})1700	}).catch(function(e){1701		next(null, ErrorUtils.getError(e))1702	})1703}1704/**1705 * ä¸ä¼ Wp Adeasygo IAPä¿¡æ¯1706 * @param msg1707 * @param session1708 * @param next1709 */1710pro.addWpAdeasygoPlayerBillingData = function(msg, session, next){1711	var uid = msg.uid;1712	var transactionId = msg.transactionId;1713	var e = null1714	if(!_.isString(uid) || _.isEmpty(uid.trim())){1715		e = new Error("uid ä¸åæ³")1716		return next(e, ErrorUtils.getError(e))1717	}1718	if(!_.isString(transactionId) || _.isEmpty(transactionId.trim())){1719		e = new Error("transactionId ä¸åæ³")1720		return next(e, ErrorUtils.getError(e))1721	}1722	this.request(session, 'addWpAdeasygoPlayerBillingData', [session.uid, uid, transactionId]).spread(function(playerData, productId){1723		next(null, {code:200, playerData:playerData, productId:productId})1724	}).catch(function(e){1725		next(null, ErrorUtils.getError(e))1726	})1727}1728/**1729 * ä¸ä¼ Android宿¹IAPä¿¡æ¯1730 * @param msg1731 * @param session1732 * @param next1733 */1734pro.addAndroidOfficialPlayerBillingData = function(msg, session, next){1735	var receiptData = msg.receiptData1736	var receiptSignature = msg.receiptSignature1737	var e = null1738	if(!_.isString(receiptSignature) || _.isEmpty(receiptSignature.trim())){1739		e = new Error("receiptSignature ä¸åæ³")1740		next(e, ErrorUtils.getError(e))1741		return1742	}1743	if(!_.isString(receiptData) || _.isEmpty(receiptData.trim())){1744		e = new Error("receiptData ä¸åæ³")1745		next(e, ErrorUtils.getError(e))1746		return1747	}1748	var receiptObj = null;1749	try{1750		receiptObj = JSON.parse(receiptData);1751	}catch(e){1752		e = new Error("receiptData ä¸åæ³")1753		return next(e, ErrorUtils.getError(e))1754	}1755	var productId = receiptObj.productId1756	if(!productId){1757		e = new Error("receiptData ä¸åæ³")1758		return next(e, ErrorUtils.getError(e))1759	}1760	var transactionId = receiptObj.orderId1761	if(!transactionId){1762		e = new Error("receiptData ä¸åæ³")1763		return next(e, ErrorUtils.getError(e))1764	}1765	this.request(session, 'addAndroidOfficialPlayerBillingData', [session.uid, productId, transactionId, receiptData, receiptSignature]).then(function(playerData){1766		next(null, {code:200, playerData:playerData, productId:productId, transactionId:transactionId})1767	}).catch(function(e){1768		next(null, ErrorUtils.getError(e))1769	})1770}1771/**1772 * ä¸ä¼ Iosæå¡IAPä¿¡æ¯1773 * @param msg1774 * @param session1775 * @param next1776 */1777pro.addIosMonthcardBillingData = function(msg, session, next){1778	var receiptData = msg.receiptData1779	var e = null1780	if(!_.isString(receiptData) || _.isEmpty(receiptData.trim())){1781		e = new Error("receiptData ä¸åæ³")1782		next(e, ErrorUtils.getError(e))1783		return1784	}1785	var jsonString = new Buffer(receiptData, 'base64').toString();1786	var productIdMathResult = jsonString.match(/"product-id" = "(.*)";/)1787	var transactionIdMathResult = jsonString.match(/"transaction-id" = "(.*)";/)1788	if(!_.isArray(productIdMathResult) || productIdMathResult.length < 2){1789		e = new Error("receiptData ä¸åæ³")1790		next(e, ErrorUtils.getError(e))1791		return1792	}1793	if(!_.isArray(transactionIdMathResult) || transactionIdMathResult.length < 2){1794		e = new Error("receiptData ä¸åæ³")1795		next(e, ErrorUtils.getError(e))1796		return1797	}1798	var productId = productIdMathResult[1];1799	var transactionId = transactionIdMathResult[1];1800	this.request(session, 'addIosMonthcardBillingData', [session.uid, productId, transactionId, receiptData]).then(function(playerData){1801		next(null, {code:200, playerData:playerData, transactionId:transactionId})1802	}).catch(function(e){1803		next(null, ErrorUtils.getError(e))1804	})1805}1806/**1807 * ä¸ä¼ Wpæå¡å®æ¹IAPä¿¡æ¯1808 * @param msg1809 * @param session1810 * @param next1811 */1812pro.addWpOfficialMonthcardBillingData = function(msg, session, next){1813	var receiptData = msg.receiptData1814	var e = null1815	if(!_.isString(receiptData) || _.isEmpty(receiptData.trim())){1816		e = new Error("receiptData ä¸åæ³")1817		next(e, ErrorUtils.getError(e))1818		return1819	}1820	var doc = new DOMParser().parseFromString(receiptData);1821	if(!doc){1822		e = new Error("receiptData ä¸åæ³")1823		return next(e, ErrorUtils.getError(e))1824	}1825	var receipt = doc.getElementsByTagName('Receipt')[0];1826	if(!receipt){1827		e = new Error("receiptData ä¸åæ³")1828		return next(e, ErrorUtils.getError(e))1829	}1830	var productReceipt = receipt.getElementsByTagName('ProductReceipt')[0];1831	if(!productReceipt){1832		e = new Error("receiptData ä¸åæ³")1833		return next(e, ErrorUtils.getError(e))1834	}1835	var productId = productReceipt.getAttribute('ProductId');1836	if(!productId){1837		e = new Error("receiptData ä¸åæ³")1838		return next(e, ErrorUtils.getError(e))1839	}1840	var transactionId = productReceipt.getAttribute('Id');1841	if(!transactionId){1842		e = new Error("receiptData ä¸åæ³")1843		return next(e, ErrorUtils.getError(e))1844	}1845	this.request(session, 'addWpOfficialMonthcardBillingData', [session.uid, productId, transactionId, receiptData]).then(function(playerData){1846		next(null, {code:200, playerData:playerData, productId:productId, transactionId:transactionId})1847	}).catch(function(e){1848		next(null, ErrorUtils.getError(e))1849	})1850}1851/**1852 * ä¸ä¼ Wpæå¡Adeasygo IAPä¿¡æ¯1853 * @param msg1854 * @param session1855 * @param next1856 */1857pro.addWpAdeasygoMonthcardBillingData = function(msg, session, next){1858	var uid = msg.uid;1859	var transactionId = msg.transactionId;1860	var e = null1861	if(!_.isString(uid) || _.isEmpty(uid.trim())){1862		e = new Error("uid ä¸åæ³")1863		return next(e, ErrorUtils.getError(e))1864	}1865	if(!_.isString(transactionId) || _.isEmpty(transactionId.trim())){1866		e = new Error("transactionId ä¸åæ³")1867		return next(e, ErrorUtils.getError(e))1868	}1869	this.request(session, 'addWpAdeasygoMonthcardBillingData', [session.uid, uid, transactionId]).spread(function(playerData, productId){1870		next(null, {code:200, playerData:playerData, productId:productId})1871	}).catch(function(e){1872		next(null, ErrorUtils.getError(e))1873	})1874}1875/**1876 * ä¸ä¼ Androidæå¡å®æ¹IAPä¿¡æ¯1877 * @param msg1878 * @param session1879 * @param next1880 */1881pro.addAndroidOfficialMonthcardBillingData = function(msg, session, next){1882	var receiptData = msg.receiptData1883	var receiptSignature = msg.receiptSignature1884	var e = null1885	if(!_.isString(receiptSignature) || _.isEmpty(receiptSignature.trim())){1886		e = new Error("receiptSignature ä¸åæ³")1887		next(e, ErrorUtils.getError(e))1888		return1889	}1890	if(!_.isString(receiptData) || _.isEmpty(receiptData.trim())){1891		e = new Error("receiptData ä¸åæ³")1892		next(e, ErrorUtils.getError(e))1893		return1894	}1895	var receiptObj = null;1896	try{1897		receiptObj = JSON.parse(receiptData);1898	}catch(e){1899		e = new Error("receiptData ä¸åæ³")1900		return next(e, ErrorUtils.getError(e))1901	}1902	var productId = receiptObj.productId1903	if(!productId){1904		e = new Error("receiptData ä¸åæ³")1905		return next(e, ErrorUtils.getError(e))1906	}1907	var transactionId = receiptObj.orderId1908	if(!transactionId){1909		e = new Error("receiptData ä¸åæ³")1910		return next(e, ErrorUtils.getError(e))1911	}1912	this.request(session, 'addAndroidOfficialMonthcardBillingData', [session.uid, productId, transactionId, receiptData, receiptSignature]).then(function(playerData){1913		next(null, {code:200, playerData:playerData, productId:productId, transactionId:transactionId})1914	}).catch(function(e){1915		next(null, ErrorUtils.getError(e))1916	})1917}1918/**1919 * è·åæ°ç©å®¶å²çº§å¥å±1920 * @param msg1921 * @param session1922 * @param next1923 */1924pro.getFirstIAPRewards = function(msg, session, next){1925	this.request(session, 'getFirstIAPRewards', [session.uid]).then(function(playerData){1926		next(null, {code:200, playerData:playerData})1927	}).catch(function(e){1928		next(null, ErrorUtils.getError(e))1929	})1930}1931/**1932 * é¢åæ¥å¸¸ä»»å¡å¥å±1933 * @param msg1934 * @param session1935 * @param next1936 */1937pro.getDailyTaskRewards = function(msg, session, next){1938	this.request(session, 'getDailyTaskRewards', [session.uid]).then(function(playerData){1939		next(null, {code:200, playerData:playerData})1940	}).catch(function(e){1941		next(null, ErrorUtils.getError(e))1942	})1943}1944/**1945 * é¢åæå°±ä»»å¡å¥å±1946 * @param msg1947 * @param session1948 * @param next1949 */1950pro.getGrowUpTaskRewards = function(msg, session, next){1951	var taskType = msg.taskType1952	var taskId = msg.taskId1953	var e = null1954	if(!_.contains(Consts.GrowUpTaskTypes, taskType)){1955		e = new Error("taskType ä¸åæ³")1956		next(e, ErrorUtils.getError(e))1957		return1958	}1959	if(!_.isNumber(taskId) || taskId % 1 !== 0 || taskId < 0){1960		e = new Error("taskId ä¸åæ³")1961		next(e, ErrorUtils.getError(e))1962		return1963	}1964	this.request(session, 'getGrowUpTaskRewards', [session.uid, taskType, taskId]).then(function(playerData){1965		next(null, {code:200, playerData:playerData})1966	}).catch(function(e){1967		next(null, ErrorUtils.getError(e))1968	})1969}1970/**1971 * è·åèçå
¶ä»ç©å®¶èµ éç礼å1972 * @param msg1973 * @param session1974 * @param next1975 */1976pro.getIapGift = function(msg, session, next){1977	var giftId = msg.giftId1978	var e = null1979	if(!_.isString(giftId) || !ShortId.isValid(giftId)){1980		e = new Error("giftId ä¸åæ³")1981		next(e, ErrorUtils.getError(e))1982		return1983	}1984	this.request(session, 'getIapGift', [session.uid, giftId]).then(function(playerData){1985		next(null, {code:200, playerData:playerData})1986	}).catch(function(e){1987		next(null, ErrorUtils.getError(e))1988	})1989}1990/**1991 * è·åæå¡å¨å表1992 * @param msg1993 * @param session1994 * @param next1995 */1996pro.getServers = function(msg, session, next){1997	this.request(session, 'getServers', [session.uid]).then(function(servers){1998		next(null, {code:200, servers:servers})1999	}).catch(function(e){2000		next(null, ErrorUtils.getError(e))2001	})2002}2003/**2004 * 忢æå¡å¨2005 * @param msg2006 * @param session2007 * @param next2008 */2009pro.switchServer = function(msg, session, next){2010	var serverId = msg.serverId2011	var e = null2012	if(!_.isString(serverId)){2013		e = new Error("serverId ä¸åæ³")2014		next(e, ErrorUtils.getError(e))2015		return2016	}2017	this.request(session, 'switchServer', [session.uid, serverId]).then(function(){2018		next(null, {code:200})2019	}).catch(function(e){2020		next(null, ErrorUtils.getError(e))2021	})2022}2023/**2024 * 设置ç©å®¶å¤´å2025 * @param msg2026 * @param session2027 * @param next2028 */2029pro.setPlayerIcon = function(msg, session, next){2030	var icon = msg.icon2031	var e = null2032	if(!_.isNumber(icon) || icon % 1 !== 0 || icon < 1 || icon > 11){2033		e = new Error("icon ä¸åæ³")2034		next(e, ErrorUtils.getError(e))2035		return2036	}2037	this.request(session, 'setPlayerIcon', [session.uid, icon]).then(function(playerData){2038		next(null, {code:200, playerData:playerData})2039	}).catch(function(e){2040		next(null, ErrorUtils.getError(e))2041	})2042}2043/**2044 * è§£éç©å®¶ç¬¬äºæ¡éå2045 * @param msg2046 * @param session2047 * @param next2048 */2049pro.unlockPlayerSecondMarchQueue = function(msg, session, next){2050	this.request(session, 'unlockPlayerSecondMarchQueue', [session.uid]).then(function(playerData){2051		next(null, {code:200, playerData:playerData})2052	}).catch(function(e){2053		next(null, ErrorUtils.getError(e))2054	})2055}2056/**2057 * åå§åç©å®¶æ°æ®2058 * @param msg2059 * @param session2060 * @param next2061 */2062pro.initPlayerData = function(msg, session, next){2063	var terrain = msg.terrain2064	var language = msg.language2065	var e = null2066	if(!_.contains(_.values(Consts.AllianceTerrain), terrain)){2067		e = new Error("terrain ä¸åæ³")2068		next(e, ErrorUtils.getError(e))2069		return2070	}2071	if(!_.contains(Consts.PlayerLanguage, language)){2072		e = new Error("language ä¸åæ³")2073		next(e, ErrorUtils.getError(e))2074		return2075	}2076	this.request(session, 'initPlayerData', [session.uid, terrain, language]).then(function(playerData){2077		next(null, {code:200, playerData:playerData})2078	}).catch(function(e){2079		next(null, ErrorUtils.getError(e))2080	})2081}2082/**2083 * é¢å馿¬¡å å
¥èçå¥å±2084 * @param msg2085 * @param session2086 * @param next2087 */2088pro.getFirstJoinAllianceReward = function(msg, session, next){2089	var allianceId = session.get('allianceId');2090	var e = null2091	if(_.isEmpty(allianceId)){2092		e = ErrorUtils.playerNotJoinAlliance(session.uid)2093		next(e, ErrorUtils.getError(e))2094		return2095	}2096	this.request(session, 'getFirstJoinAllianceReward', [session.uid, allianceId]).then(function(playerData){2097		next(null, {code:200, playerData:playerData})2098	}).catch(function(e){2099		next(null, ErrorUtils.getError(e))2100	})2101}2102/**2103 * è·åç©å®¶åå¢è¡é2104 * @param msg2105 * @param session2106 * @param next2107 */2108pro.getPlayerWallInfo = function(msg, session, next){2109	var memberId = msg.memberId2110	var e = null2111	if(!ShortId.isValid(memberId)){2112		e = new Error("questId ä¸åæ³")2113		next(e, ErrorUtils.getError(e))2114		return2115	}2116	this.request(session, 'getPlayerWallInfo', [session.uid, memberId]).then(function(wallInfo){2117		next(null, {code:200, wallInfo:wallInfo})2118	}).catch(function(e){2119		next(null, ErrorUtils.getError(e))2120	})2121}2122/**2123 * 设置è¿ç¨æ¨éç¶æ2124 * @param msg2125 * @param session2126 * @param next2127 */2128pro.setPushStatus = function(msg, session, next){2129	var type = msg.type2130	var status = msg.status2131	var e = null2132	if(!_.contains(Consts.PushTypes, type)){2133		e = new Error("type ä¸åæ³")2134		next(e, ErrorUtils.getError(e))2135		return2136	}2137	if(!_.isBoolean(status)){2138		e = new Error("status ä¸åæ³")2139		next(e, ErrorUtils.getError(e))2140		return2141	}2142	this.request(session, 'setPushStatus', [session.uid, type, status]).then(function(playerData){2143		next(null, {code:200, playerData:playerData})2144	}).catch(function(e){2145		next(null, ErrorUtils.getError(e))2146	})2147}2148/**2149 * è¿æ»PvEå
³å¡2150 * @param msg2151 * @param session2152 * @param next2153 */2154pro.attackPveSection = function(msg, session, next){2155	var sectionName = msg.sectionName;2156	var dragonType = msg.dragonType;2157	var soldiers = msg.soldiers;2158	var e = null2159	if(!DataUtils.isPvESectionExist(sectionName)){2160		e = new Error("sectionName ä¸åæ³")2161		next(e, ErrorUtils.getError(e))2162		return2163	}2164	if(!DataUtils.isDragonTypeExist(dragonType)){2165		e = new Error("dragonType ä¸åæ³")2166		next(e, ErrorUtils.getError(e))2167		return2168	}2169	if(!_.isArray(soldiers)){2170		e = new Error("soldiers ä¸åæ³")2171		next(e, ErrorUtils.getError(e))2172		return2173	}2174	if(soldiers.length > DataUtils.getAllianceIntInit('maxTroopPerDragon')){2175		e = new Error("soldiers ä¸åæ³")2176		next(e, ErrorUtils.getError(e))2177		return2178	}2179	this.request(session, 'attackPveSection', [session.uid, sectionName, dragonType, soldiers]).spread(function(playerData, fightReport){2180		next(null, {code:200, playerData:playerData, fightReport:fightReport})2181	}).catch(function(e){2182		next(null, ErrorUtils.getError(e))2183	})2184}2185/**2186 * è·åå
³å¡æçº§å¥å±2187 * @param msg2188 * @param session2189 * @param next2190 */2191pro.getPveStageReward = function(msg, session, next){2192	var stageName = msg.stageName;2193	var e = null2194	if(!DataUtils.isPvEStageExist(stageName)){2195		e = new Error("stageName ä¸åæ³")2196		next(e, ErrorUtils.getError(e))2197		return2198	}2199	this.request(session, 'getPveStageReward', [session.uid, stageName]).then(function(playerData){2200		next(null, {code:200, playerData:playerData})2201	}).catch(function(e){2202		next(null, ErrorUtils.getError(e))2203	})2204}2205/**2206 * è·åææ¥è¯¦æ
2207 * @param msg2208 * @param session2209 * @param next2210 */2211pro.getReportDetail = function(msg, session, next){2212	var self = this;2213	var memberId = msg.memberId;2214	var reportId = msg.reportId;2215	var e = null2216	if(!ShortId.isValid(memberId)){2217		e = new Error("memberId ä¸åæ³")2218		next(e, ErrorUtils.getError(e))2219		return2220	}2221	if(!ShortId.isValid(reportId)){2222		e = new Error("reportId ä¸åæ³")2223		next(e, ErrorUtils.getError(e))2224		return2225	}2226	self.app.get('Player').findById(memberId, 'serverId').then(function(doc){2227		if(!_.isObject(doc)){2228			return Promise.reject(ErrorUtils.playerNotExist(session.uid, memberId));2229		}2230		return self.request(session, 'getReportDetail', [session.uid, memberId, reportId], doc.serverId);2231	}).then(function(report){2232		next(null, {code:200, report:report})2233	}).catch(function(e){2234		next(null, ErrorUtils.getError(e))2235	})2236}2237/**2238 * æ ¹æ®æµç§°æç´¢ç©å®¶2239 * @param msg2240 * @param session2241 * @param next2242 */2243pro.searchPlayerByName = function(msg, session, next){2244	var name = msg.name;2245	var fromIndex = msg.fromIndex;2246	var e = null;2247	if(!_.isString(name) || name.trim().length === 0 || name.trim().length > Define.InputLength.PlayerName){2248		e = new Error("name ä¸åæ³")2249		next(e, ErrorUtils.getError(e))2250		return2251	}2252	if(!_.isNumber(fromIndex) || fromIndex % 1 !== 0 || fromIndex < 0){2253		e = new Error("fromIndex ä¸åæ³")2254		next(e, ErrorUtils.getError(e))2255		return2256	}2257	this.request(session, 'searchPlayerByName', [session.uid, name, fromIndex]).spread(function(limit, playerDatas){2258		next(null, {code:200, limit:limit, playerDatas:playerDatas})2259	}).catch(function(e){2260		next(null, ErrorUtils.getError(e))2261	})2262}2263/**2264 * è·åæå¡å¨å
¬åå表2265 * @param msg2266 * @param session2267 * @param next2268 */2269pro.getServerNotices = function(msg, session, next){2270	this.request(session, 'getServerNotices', []).then(function(notices){2271		next(null, {code:200, notices:notices})2272	}).catch(function(e){2273		next(null, ErrorUtils.getError(e))2274	})2275}2276/**2277 * è·åæ´»å¨ä¿¡æ¯2278 * @param msg2279 * @param session2280 * @param next2281 */2282pro.getActivities = function(msg, session, next){2283	this.request(session, 'getActivities', []).then(function(activities){2284		next(null, {code:200, activities:activities})2285	}).catch(function(e){2286		next(null, ErrorUtils.getError(e))2287	})2288}2289/**2290 * è·åç©å®¶æ´»å¨ç§¯åå¥å±2291 * @param msg2292 * @param session2293 * @param next2294 */2295pro.getPlayerActivityScoreRewards = function(msg, session, next){2296	var rankType = msg.rankType;2297	if(!_.contains(DataUtils.getActivityTypes(), rankType)){2298		var e = new Error("rankType ä¸åæ³");2299		return next(e, ErrorUtils.getError(e));2300	}2301	this.request(session, 'getPlayerActivityScoreRewards', [session.uid, rankType]).then(function(playerData){2302		next(null, {code:200, playerData:playerData})2303	}).catch(function(e){2304		next(null, ErrorUtils.getError(e))2305	})2306}2307/**2308 * è·åç©å®¶æ´»å¨æåå¥å±2309 * @param msg2310 * @param session2311 * @param next2312 */2313pro.getPlayerActivityRankRewards = function(msg, session, next){2314	var rankType = msg.rankType;2315	if(!_.contains(DataUtils.getActivityTypes(), rankType)){2316		var e = new Error("rankType ä¸åæ³");2317		return next(e, ErrorUtils.getError(e));2318	}2319	this.request(session, 'getPlayerActivityRankRewards', [session.uid, rankType]).then(function(playerData){2320		next(null, {code:200, playerData:playerData})2321	}).catch(function(e){2322		next(null, ErrorUtils.getError(e))2323	})2324}2325/**2326 * è·åæç墨åä¿¡æ¯2327 * @param msg2328 * @param session2329 * @param next2330 * @returns {*}2331 */2332pro.getMyModData = function(msg, session, next){2333	this.request(session, 'getMyModData', [session.uid]).then(function(modData){2334		next(null, {code:200, modData:modData})2335	}).catch(function(e){2336		next(null, ErrorUtils.getError(e))2337	})2338}2339/**2340 * è·å被ç¦è¨å表2341 * @param msg2342 * @param session2343 * @param next2344 * @returns {*}2345 */2346pro.getMutedPlayerList = function(msg, session, next){2347	this.request(session, 'getMutedPlayerList', [session.uid]).then(function(docs){2348		next(null, {code:200, datas:docs})2349	}).catch(function(e){2350		next(null, ErrorUtils.getError(e))2351	})2352}2353/**2354 * ç¦è¨ç©å®¶2355 * @param msg2356 * @param session2357 * @param next2358 * @returns {*}2359 */2360pro.mutePlayer = function(msg, session, next){2361	var self = this;2362	var targetPlayerId = msg.targetPlayerId;2363	var muteMinutes = msg.muteMinutes;2364	var muteReason = msg.muteReason;2365	var e = null2366	if(!_.isString(targetPlayerId) || !ShortId.isValid(targetPlayerId)){2367		e = new Error("targetPlayerId ä¸åæ³")2368		return next(e, ErrorUtils.getError(e))2369	}2370	if(!_.isNumber(muteMinutes) || muteMinutes % 1 !== 0 || muteMinutes < 5 || muteMinutes > (60 * 6)){2371		e = new Error("muteMinutes ä¸åæ³")2372		return next(e, ErrorUtils.getError(e))2373	}2374	if(!_.isString(muteReason) || muteReason.trim().length === 0){2375		e = new Error("muteReason ä¸åæ³")2376		return next(e, ErrorUtils.getError(e))2377	}2378	self.app.get('Player').findById(targetPlayerId, 'serverId').then(function(doc){2379		if(!_.isObject(doc)){2380			return Promise.reject(ErrorUtils.playerNotExist(session.uid, targetPlayerId));2381		}2382		return self.request(session, 'mutePlayer', [session.uid, targetPlayerId, muteMinutes, muteReason], doc.serverId);2383	}).then(function(){2384		next(null, {code:200});2385	}).catch(function(e){2386		next(null, ErrorUtils.getError(e))2387	})2388}2389/**2390 * æåè§£ç¦ç©å®¶2391 * @param msg2392 * @param session2393 * @param next2394 * @returns {*}2395 */2396pro.unMutePlayer = function(msg, session, next){2397	var self = this;2398	var targetPlayerId = msg.targetPlayerId;2399	var e = null2400	if(!_.isString(targetPlayerId) || !ShortId.isValid(targetPlayerId)){2401		e = new Error("targetPlayerId ä¸åæ³")2402		return next(e, ErrorUtils.getError(e))2403	}2404	self.app.get('Player').findById(targetPlayerId, 'serverId').then(function(doc){2405		if(!_.isObject(doc)){2406			return Promise.reject(ErrorUtils.playerNotExist(session.uid, targetPlayerId));2407		}2408		return self.request(session, 'unMutePlayer', [session.uid, targetPlayerId], doc.serverId);2409	}).then(function(){2410		next(null, {code:200})2411	}).catch(function(e){2412		next(null, ErrorUtils.getError(e))2413	})2414}2415/**2416 * æ·»å é»åå2417 * @param msg2418 * @param session2419 * @param next2420 * @returns {*}2421 */2422pro.addBlocked = function(msg, session, next){2423	var memberId = msg.memberId;2424	var memberName = msg.memberName;2425	var memberIcon = msg.memberIcon;2426	var e = null2427	if(!_.isString(memberId) || !ShortId.isValid(memberId)){2428		e = new Error("memberId ä¸åæ³")2429		return next(e, ErrorUtils.getError(e))2430	}2431	if(!_.isString(memberName) || memberName.trim().length === 0){2432		e = new Error("memberName ä¸åæ³")2433		return next(e, ErrorUtils.getError(e))2434	}2435	if(!_.isNumber(memberIcon) || memberIcon % 1 !== 0 || memberIcon < 1 || memberIcon > 11){2436		e = new Error("icon ä¸åæ³")2437		next(e, ErrorUtils.getError(e))2438		return2439	}2440	this.request(session, 'addBlocked', [session.uid, memberId, memberName, memberIcon]).then(function(playerData){2441		next(null, {code:200, playerData:playerData});2442	}).catch(function(e){2443		next(null, ErrorUtils.getError(e))2444	})2445}2446/**2447 * ç¦è¨ç©å®¶2448 * @param msg2449 * @param session2450 * @param next2451 * @returns {*}2452 */2453pro.removeBlocked = function(msg, session, next){2454	var memberId = msg.memberId;2455	var e = null2456	if(!_.isString(memberId) || !ShortId.isValid(memberId)){2457		e = new Error("memberId ä¸åæ³")2458		return next(e, ErrorUtils.getError(e))2459	}2460	this.request(session, 'removeBlocked', [session.uid, memberId]).then(function(playerData){2461		next(null, {code:200, playerData:playerData});2462	}).catch(function(e){2463		next(null, ErrorUtils.getError(e))2464	})2465}2466/**2467 * è·å游æç¶æä¿¡æ¯2468 * @param msg2469 * @param session2470 * @param next2471 */2472pro.getGameInfo = function(msg, session, next){2473	this.request(session, 'getGameInfo', [session.uid]).then(function(serverInfo){2474		next(null, {code:200, serverInfo:serverInfo});2475	}).catch(function(e){2476		next(null, ErrorUtils.getError(e))2477	})2478}2479/**2480 * è·å累计å
å¼å¥å±2481 * @param msg2482 * @param session2483 * @param next2484 */2485pro.getTotalIAPRewards = function(msg, session, next){2486	this.request(session, 'getTotalIAPRewards', [session.uid]).then(function(playerData){2487		next(null, {code:200, playerData:playerData});2488	}).catch(function(e){2489		next(null, ErrorUtils.getError(e))2490	})2491}2492/**2493 * é¢åæå¡æ¯æ¥å¥å±2494 * @param msg2495 * @param session2496 * @param next2497 */2498pro.getMothcardRewards = function(msg, session, next){2499	this.request(session, 'getMothcardRewards', [session.uid]).then(function(playerData){2500		next(null, {code:200, playerData:playerData});2501	}).catch(function(e){2502		next(null, ErrorUtils.getError(e))2503	})...allianceHandler.js
Source:allianceHandler.js  
...34	var flag = msg.flag35	var e = null36	if(!_.isString(name) || name.trim().length === 0 || name.trim().length > Define.InputLength.AllianceName){37		e = new Error("name ä¸åæ³")38		next(e, ErrorUtils.getError(e))39		return40	}41	if(!_.isString(tag) || tag.trim().length === 0 || tag.trim().length > Define.InputLength.AllianceTag){42		e = new Error("tag ä¸åæ³")43		next(e, ErrorUtils.getError(e))44		return45	}46	if(!_.contains(Consts.AllianceCountry, country)){47		e = new Error("country ä¸åæ³")48		next(e, ErrorUtils.getError(e))49		return50	}51	if(!_.contains(Consts.AllianceTerrain, terrain)){52		e = new Error("terrain ä¸åæ³")53		next(e, ErrorUtils.getError(e))54		return55	}56	if(!_.isString(flag)){57		e = new Error("flag ä¸åæ³")58		next(e, ErrorUtils.getError(e))59		return60	}61	this.request(session, 'createAlliance', [session.uid, name, tag, country, terrain, flag]).spread(function(playerData, allianceData, mapData, mapIndexData){62		next(null, {code:200, playerData:playerData, allianceData:allianceData, mapData:mapData, mapIndexData:mapIndexData})63	}).catch(function(e){64		next(null, ErrorUtils.getError(e))65	})66}67/**68 * åéèçé®ä»¶69 * @param msg70 * @param session71 * @param next72 */73pro.sendAllianceMail = function(msg, session, next){74	var allianceId = session.get('allianceId');75	var title = msg.title76	var content = msg.content77	var e = null78	if(_.isEmpty(allianceId)){79		e = ErrorUtils.playerNotJoinAlliance(session.uid)80		next(e, ErrorUtils.getError(e))81		return82	}83	if(!_.isString(title)){84		e = new Error("title ä¸åæ³")85		next(e, ErrorUtils.getError(e))86		return87	}88	if(!_.isString(content)){89		e = new Error("content ä¸åæ³")90		next(e, ErrorUtils.getError(e))91		return92	}93	this.request(session, 'sendAllianceMail', [session.uid, allianceId, title, content]).then(function(){94		next(null, {code:200})95	}).catch(function(e){96		next(null, ErrorUtils.getError(e))97	})98}99/**100 * 主å¨è·åç©å®¶èççä¿¡æ¯101 * @param msg102 * @param session103 * @param next104 */105pro.getMyAllianceData = function(msg, session, next){106	var allianceId = session.get('allianceId');107	var e = null108	if(_.isEmpty(allianceId)){109		e = ErrorUtils.playerNotJoinAlliance(session.uid)110		next(e, ErrorUtils.getError(e))111		return112	}113	this.request(session, 'getMyAllianceData', [session.uid, allianceId]).then(function(allianceData){114		next(null, {code:200, allianceData:allianceData})115	}).catch(function(e){116		next(null, ErrorUtils.getError(e))117	})118}119/**120 * æ ¹æ®Tagæç´¢èç121 * @param msg122 * @param session123 * @param next124 */125pro.getCanDirectJoinAlliances = function(msg, session, next){126	var fromIndex = msg.fromIndex127	var e = null128	if(!_.isNumber(fromIndex) || fromIndex < 0 || fromIndex % 10 != 0){129		e = new Error("fromIndex ä¸åæ³")130		next(e, ErrorUtils.getError(e))131		return132	}133	this.request(session, 'getCanDirectJoinAlliances', [session.uid, fromIndex]).then(function(allianceDatas){134		next(null, {code:200, allianceDatas:allianceDatas})135	}).catch(function(e){136		next(null, ErrorUtils.getError(e))137	})138}139/**140 * æ ¹æ®Tagæç´¢èç141 * @param msg142 * @param session143 * @param next144 */145pro.searchAllianceByTag = function(msg, session, next){146	var tag = msg.tag147	var e = null148	if(!_.isString(tag) || tag.trim().length === 0 || tag.trim().length > Define.InputLength.AllianceTag){149		e = new Error("tag ä¸åæ³")150		next(e, ErrorUtils.getError(e))151		return152	}153	this.request(session, 'searchAllianceByTag', [session.uid, tag]).then(function(allianceDatas){154		next(null, {code:200, allianceDatas:allianceDatas})155	}).catch(function(e){156		next(null, ErrorUtils.getError(e))157	})158}159/**160 * ç¼è¾èçåºç¡ä¿¡æ¯161 * @param msg162 * @param session163 * @param next164 */165pro.editAllianceBasicInfo = function(msg, session, next){166	var allianceId = session.get('allianceId');167	var name = msg.name168	var tag = msg.tag169	var country = msg.country170	var flag = msg.flag171	var e = null172	if(_.isEmpty(allianceId)){173		e = ErrorUtils.playerNotJoinAlliance(session.uid)174		next(e, ErrorUtils.getError(e))175		return176	}177	if(!_.isString(name) || name.trim().length === 0 || name.trim().length > Define.InputLength.AllianceName){178		e = new Error("name ä¸åæ³")179		next(e, ErrorUtils.getError(e))180		return181	}182	if(!_.isString(tag) || tag.trim().length === 0 || tag.trim().length > Define.InputLength.AllianceTag){183		e = new Error("tag ä¸åæ³")184		next(e, ErrorUtils.getError(e))185		return186	}187	if(!_.contains(Consts.AllianceCountry, country)){188		e = new Error("country ä¸åæ³")189		next(e, ErrorUtils.getError(e))190		return191	}192	if(!_.isString(flag) || flag.trim().length === 0 || flag.trim().length > Define.InputLength.AllianceFlag){193		e = new Error("flag ä¸åæ³")194		next(e, ErrorUtils.getError(e))195		return196	}197	this.request(session, 'editAllianceBasicInfo', [session.uid, allianceId, name, tag, country, flag]).then(function(playerData){198		next(null, {code:200, playerData:playerData})199	}).catch(function(e){200		next(null, ErrorUtils.getError(e))201	})202}203/**204 * ç¼è¾èçå°å½¢205 * @param msg206 * @param session207 * @param next208 */209pro.editAllianceTerrian = function(msg, session, next){210	var allianceId = session.get('allianceId');211	var playerName = session.get("name")212	var terrain = msg.terrain213	var e = null214	if(_.isEmpty(allianceId)){215		e = ErrorUtils.playerNotJoinAlliance(session.uid)216		next(e, ErrorUtils.getError(e))217		return218	}219	if(!_.contains(Consts.AllianceTerrain, terrain)){220		e = new Error("terrain ä¸åæ³")221		next(e, ErrorUtils.getError(e))222		return223	}224	this.request(session, 'editAllianceTerrian', [session.uid, playerName, allianceId, terrain]).then(function(){225		next(null, {code:200})226	}).catch(function(e){227		next(null, ErrorUtils.getError(e))228	})229}230/**231 * ç¼è¾èçå
¬å232 * @param msg233 * @param session234 * @param next235 */236pro.editAllianceNotice = function(msg, session, next){237	var allianceId = session.get('allianceId');238	var playerName = session.get("name")239	var notice = msg.notice240	var e = null241	if(_.isEmpty(allianceId)){242		e = ErrorUtils.playerNotJoinAlliance(session.uid)243		next(e, ErrorUtils.getError(e))244		return245	}246	if(!_.isString(notice) || notice.trim().length > Define.InputLength.AllianceNotice){247		e = new Error("notice ä¸åæ³")248		next(e, ErrorUtils.getError(e))249		return250	}251	this.request(session, 'editAllianceNotice', [session.uid, playerName, allianceId, notice]).then(function(){252		next(null, {code:200})253	}).catch(function(e){254		next(null, ErrorUtils.getError(e))255	})256}257/**258 * ç¼è¾èçæè¿°259 * @param msg260 * @param session261 * @param next262 */263pro.editAllianceDescription = function(msg, session, next){264	var allianceId = session.get('allianceId');265	var playerName = session.get('name')266	var description = msg.description267	var e = null268	if(_.isEmpty(allianceId)){269		e = ErrorUtils.playerNotJoinAlliance(session.uid)270		next(e, ErrorUtils.getError(e))271		return272	}273	if(!_.isString(description) || description.trim().length > Define.InputLength.AllianceDesc){274		e = new Error("description ä¸åæ³")275		next(e, ErrorUtils.getError(e))276		return277	}278	this.request(session, 'editAllianceDescription', [session.uid, playerName, allianceId, description]).then(function(){279		next(null, {code:200})280	}).catch(function(e){281		next(null, ErrorUtils.getError(e))282	})283}284/**285 * ç¼è¾èçå å
¥æ¹å¼286 * @param msg287 * @param session288 * @param next289 */290pro.editAllianceJoinType = function(msg, session, next){291	var allianceId = session.get('allianceId');292	var joinType = msg.joinType293	var e = null294	if(_.isEmpty(allianceId)){295		e = ErrorUtils.playerNotJoinAlliance(session.uid)296		next(e, ErrorUtils.getError(e))297		return298	}299	if(!_.contains(Consts.AllianceJoinType, joinType)){300		e = new Error("joinType ä¸åæ³")301		next(e, ErrorUtils.getError(e))302		return303	}304	this.request(session, 'editAllianceJoinType', [session.uid, allianceId, joinType]).then(function(){305		next(null, {code:200})306	}).catch(function(e){307		next(null, ErrorUtils.getError(e))308	})309}310/**311 * ä¿®æ¹èçæä¸ªç©å®¶çèä½312 * @param msg313 * @param session314 * @param next315 */316pro.editAllianceMemberTitle = function(msg, session, next){317	var allianceId = session.get('allianceId');318	var memberId = msg.memberId319	var title = msg.title320	var e = null321	if(_.isEmpty(allianceId)){322		e = ErrorUtils.playerNotJoinAlliance(session.uid)323		next(e, ErrorUtils.getError(e))324		return325	}326	if(!_.isString(memberId) || !ShortId.isValid(memberId)){327		e = new Error("memberId ä¸åæ³")328		next(e, ErrorUtils.getError(e))329		return330	}331	if(!_.contains(Consts.AllianceTitle, title)){332		e = new Error("title ä¸åæ³")333		next(e, ErrorUtils.getError(e))334		return335	}336	if(_.isEqual(session.uid, memberId)){337		e = new Error("ä¸è½ä¿®æ¹ç©å®¶èªå·±çèä½")338		next(e, ErrorUtils.getError(e))339		return340	}341	this.request(session, 'editAllianceMemberTitle', [session.uid, allianceId, memberId, title]).then(function(){342		next(null, {code:200})343	}).catch(function(e){344		next(null, ErrorUtils.getError(e))345	})346}347/**348 * å°ç©å®¶è¸¢åºèç349 * @param msg350 * @param session351 * @param next352 */353pro.kickAllianceMemberOff = function(msg, session, next){354	var allianceId = session.get('allianceId');355	var memberId = msg.memberId356	var e = null357	if(_.isEmpty(allianceId)){358		e = ErrorUtils.playerNotJoinAlliance(session.uid)359		next(e, ErrorUtils.getError(e))360		return361	}362	if(!_.isString(memberId) || !ShortId.isValid(memberId)){363		e = new Error("memberId ä¸åæ³")364		next(e, ErrorUtils.getError(e))365		return366	}367	if(_.isEqual(session.uid, memberId)){368		e = new Error("ä¸è½å°èªå·±è¸¢åºèç")369		next(e, ErrorUtils.getError(e))370		return371	}372	this.request(session, 'kickAllianceMemberOff', [session.uid, allianceId, memberId]).then(function(){373		next(null, {code:200})374	}).catch(function(e){375		next(null, ErrorUtils.getError(e))376	})377}378/**379 * 移交ç主èä½380 * @param msg381 * @param session382 * @param next383 */384pro.handOverAllianceArchon = function(msg, session, next){385	var allianceId = session.get('allianceId');386	var memberId = msg.memberId387	var e = null388	if(_.isEmpty(allianceId)){389		e = ErrorUtils.playerNotJoinAlliance(session.uid)390		next(e, ErrorUtils.getError(e))391		return392	}393	if(!_.isString(memberId) || !ShortId.isValid(memberId)){394		e = new Error("memberId ä¸åæ³")395		next(e, ErrorUtils.getError(e))396		return397	}398	if(_.isEqual(session.uid, memberId)){399		e = new Error("ä¸è½å°ç主èä½ç§»äº¤ç»èªå·±")400		next(e, ErrorUtils.getError(e))401		return402	}403	this.request(session, 'handOverAllianceArchon', [session.uid, allianceId, memberId]).then(function(){404		next(null, {code:200})405	}).catch(function(e){406		next(null, ErrorUtils.getError(e))407	})408}409/**410 * éåºèç411 * @param msg412 * @param session413 * @param next414 */415pro.quitAlliance = function(msg, session, next){416	var allianceId = session.get('allianceId');417	var e = null418	if(_.isEmpty(allianceId)){419		e = ErrorUtils.playerNotJoinAlliance(session.uid)420		next(e, ErrorUtils.getError(e))421		return422	}423	this.request(session, 'quitAlliance', [session.uid, allianceId]).then(function(playerData){424		next(null, {code:200, playerData:playerData})425	}).catch(function(e){426		next(null, ErrorUtils.getError(e))427	})428}429/**430 * ç´æ¥å å
¥æèç431 * @param msg432 * @param session433 * @param next434 */435pro.joinAllianceDirectly = function(msg, session, next){436	var allianceId = msg.allianceId437	var e = null438	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){439		e = new Error("allianceId ä¸åæ³")440		next(e, ErrorUtils.getError(e))441		return442	}443	this.request(session, 'joinAllianceDirectly', [session.uid, allianceId]).spread(function(playerData, allianceData, mapData, mapIndexData){444		next(null, {code:200, playerData:playerData, allianceData:allianceData, mapData:mapData, mapIndexData:mapIndexData})445	}).catch(function(e){446		next(null, ErrorUtils.getError(e))447	})448}449/**450 * ç³è¯·å å
¥èç451 * @param msg452 * @param session453 * @param next454 */455pro.requestToJoinAlliance = function(msg, session, next){456	var allianceId = msg.allianceId457	var e = null458	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){459		e = new Error("allianceId ä¸åæ³")460		next(e, ErrorUtils.getError(e))461		return462	}463	this.request(session, 'requestToJoinAlliance', [session.uid, allianceId]).then(function(playerData){464		next(null, {code:200, playerData:playerData})465	}).catch(function(e){466		next(null, ErrorUtils.getError(e))467	})468}469/**470 * 忶坹æèççç³è¯·471 * @param msg472 * @param session473 * @param next474 */475pro.cancelJoinAllianceRequest = function(msg, session, next){476	var allianceId = msg.allianceId477	var e = null478	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){479		e = new Error("allianceId ä¸åæ³")480		next(e, ErrorUtils.getError(e))481		return482	}483	this.request(session, 'cancelJoinAllianceRequest', [session.uid, allianceId]).then(function(playerData){484		next(null, {code:200, playerData:playerData})485	}).catch(function(e){486		next(null, ErrorUtils.getError(e))487	})488}489/**490 * åæå å
¥èçç³è¯·491 * @param msg492 * @param session493 * @param next494 */495pro.approveJoinAllianceRequest = function(msg, session, next){496	var allianceId = session.get('allianceId');497	var requestEventId = msg.requestEventId498	var e = null499	if(_.isEmpty(allianceId)){500		e = ErrorUtils.playerNotJoinAlliance(session.uid)501		next(e, ErrorUtils.getError(e))502		return503	}504	if(!_.isString(requestEventId) || !ShortId.isValid(requestEventId)){505		e = new Error("requestEventId ä¸åæ³")506		next(e, ErrorUtils.getError(e))507		return508	}509	this.request(session, 'approveJoinAllianceRequest', [session.uid, allianceId, requestEventId]).then(function(){510		next(null, {code:200})511	}).catch(function(e){512		next(null, ErrorUtils.getError(e))513	})514}515/**516 * å é¤å å
¥èçç³è¯·äºä»¶517 * @param msg518 * @param session519 * @param next520 */521pro.removeJoinAllianceReqeusts = function(msg, session, next){522	var allianceId = session.get('allianceId');523	var requestEventIds = msg.requestEventIds524	var e = null525	if(_.isEmpty(allianceId)){526		e = ErrorUtils.playerNotJoinAlliance(session.uid)527		next(e, ErrorUtils.getError(e))528		return529	}530	if(!_.isArray(requestEventIds) || requestEventIds.length == 0){531		e = new Error("requestEventIds ä¸åæ³")532		next(e, ErrorUtils.getError(e))533		return534	}535	for(var i = 0; i < requestEventIds; i++){536		if(!ShortId.isValid(requestEventIds[i])){537			e = new Error("requestEventIds ä¸åæ³")538			next(e, ErrorUtils.getError(e))539			return540		}541	}542	this.request(session, 'removeJoinAllianceReqeusts', [session.uid, allianceId, requestEventIds]).then(function(){543		next(null, {code:200})544	}).catch(function(e){545		next(null, ErrorUtils.getError(e))546	})547}548/**549 * é请ç©å®¶å å
¥èç550 * @param msg551 * @param session552 * @param next553 */554pro.inviteToJoinAlliance = function(msg, session, next){555	var allianceId = session.get('allianceId');556	var memberId = msg.memberId557	var e = null558	if(_.isEmpty(allianceId)){559		e = ErrorUtils.playerNotJoinAlliance(session.uid)560		next(e, ErrorUtils.getError(e))561		return562	}563	if(!_.isString(memberId) || !ShortId.isValid(memberId)){564		e = new Error("memberId ä¸åæ³")565		next(e, ErrorUtils.getError(e))566		return567	}568	if(_.isEqual(session.uid, memberId)){569		e = new Error("ä¸è½é请èªå·±å å
¥èç")570		next(e, ErrorUtils.getError(e))571		return572	}573	this.request(session, 'inviteToJoinAlliance', [session.uid, allianceId, memberId]).then(function(){574		next(null, {code:200})575	}).catch(function(e){576		next(null, ErrorUtils.getError(e))577	})578}579/**580 * å¤çå å
¥èçé请581 * @param msg582 * @param session583 * @param next584 */585pro.handleJoinAllianceInvite = function(msg, session, next){586	var allianceId = msg.allianceId587	var agree = msg.agree588	var e = null589	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){590		e = new Error("allianceId ä¸åæ³")591		next(e, ErrorUtils.getError(e))592		return593	}594	if(!_.isBoolean(agree)){595		e = new Error("agree ä¸åæ³")596		next(e, ErrorUtils.getError(e))597		return598	}599	this.request(session, 'handleJoinAllianceInvite', [session.uid, allianceId, agree]).spread(function(playerData, allianceData, mapData, mapIndexData){600		next(null, {code:200, playerData:playerData, allianceData:allianceData, mapData:mapData, mapIndexData:mapIndexData})601	}).catch(function(e){602		next(null, ErrorUtils.getError(e))603	})604}605/**606 * è´ä¹°èçç主èä½607 * @param msg608 * @param session609 * @param next610 */611pro.buyAllianceArchon = function(msg, session, next){612	var allianceId = session.get('allianceId');613	var e = null614	if(_.isEmpty(allianceId)){615		e = ErrorUtils.playerNotJoinAlliance(session.uid)616		next(e, ErrorUtils.getError(e))617		return618	}619	this.request(session, 'buyAllianceArchon', [session.uid, allianceId]).then(function(playerData){620		next(null, {code:200, playerData:playerData})621	}).catch(function(e){622		next(null, ErrorUtils.getError(e))623	})624}625/**626 * 请æ±å é627 * @param msg628 * @param session629 * @param next630 */631pro.requestAllianceToSpeedUp = function(msg, session, next){632	var allianceId = session.get('allianceId');633	var eventType = msg.eventType634	var eventId = msg.eventId635	var e = null636	if(_.isEmpty(allianceId)){637		e = ErrorUtils.playerNotJoinAlliance(session.uid)638		next(e, ErrorUtils.getError(e))639		return640	}641	if(!_.contains(Consts.AllianceHelpEventType, eventType)){642		e = new Error("eventType ä¸åæ³")643		next(e, ErrorUtils.getError(e))644		return645	}646	if(!_.isString(eventId) || !ShortId.isValid(eventId)){647		e = new Error("eventId ä¸åæ³")648		next(e, ErrorUtils.getError(e))649		return650	}651	this.request(session, 'requestAllianceToSpeedUp', [session.uid, allianceId, eventType, eventId]).spread(function(playerData, allianceData){652		next(null, {code:200, playerData:playerData, allianceData:allianceData})653	}).catch(function(e){654		next(null, ErrorUtils.getError(e))655	})656}657/**658 * åå©ç©å®¶å é659 * @param msg660 * @param session661 * @param next662 */663pro.helpAllianceMemberSpeedUp = function(msg, session, next){664	var allianceId = session.get('allianceId');665	var eventId = msg.eventId666	var e = null667	if(_.isEmpty(allianceId)){668		e = ErrorUtils.playerNotJoinAlliance(session.uid)669		next(e, ErrorUtils.getError(e))670		return671	}672	if(!_.isString(eventId) || !ShortId.isValid(eventId)){673		e = new Error("eventId ä¸åæ³")674		next(e, ErrorUtils.getError(e))675		return676	}677	this.request(session, 'helpAllianceMemberSpeedUp', [session.uid, allianceId, eventId]).spread(function(playerData, allianceData){678		next(null, {code:200, playerData:playerData, allianceData:allianceData})679	}).catch(function(e){680		next(null, ErrorUtils.getError(e))681	})682}683/**684 * å婿æç©å®¶å é685 * @param msg686 * @param session687 * @param next688 */689pro.helpAllAllianceMemberSpeedUp = function(msg, session, next){690	var allianceId = session.get('allianceId');691	var e = null692	if(_.isEmpty(allianceId)){693		e = ErrorUtils.playerNotJoinAlliance(session.uid)694		next(e, ErrorUtils.getError(e))695		return696	}697	this.request(session, 'helpAllAllianceMemberSpeedUp', [session.uid, allianceId]).spread(function(playerData, allianceData){698		next(null, {code:200, playerData:playerData, allianceData:allianceData})699	}).catch(function(e){700		next(null, ErrorUtils.getError(e))701	})702}703/**704 * èçæèµ 705 * @param msg706 * @param session707 * @param next708 */709pro.donateToAlliance = function(msg, session, next){710	var allianceId = session.get('allianceId');711	var donateType = msg.donateType712	var e = null713	if(_.isEmpty(allianceId)){714		e = ErrorUtils.playerNotJoinAlliance(session.uid)715		next(e, ErrorUtils.getError(e))716		return717	}718	if(!DataUtils.hasAllianceDonateType(donateType)){719		e = new Error("donateType ä¸åæ³")720		next(e, ErrorUtils.getError(e))721		return722	}723	this.request(session, 'donateToAlliance', [session.uid, allianceId, donateType]).then(function(playerData){724		next(null, {code:200, playerData:playerData})725	}).catch(function(e){726		next(null, ErrorUtils.getError(e))727	})728}729/**730 * å级èç建ç731 * @param msg732 * @param session733 * @param next734 */735pro.upgradeAllianceBuilding = function(msg, session, next){736	var allianceId = session.get('allianceId');737	var buildingName = msg.buildingName738	var e = null739	if(_.isEmpty(allianceId)){740		e = ErrorUtils.playerNotJoinAlliance(session.uid)741		next(e, ErrorUtils.getError(e))742		return743	}744	if(!_.contains(Consts.AllianceBuildingNames, buildingName)){745		e = new Error("buildingName ä¸åæ³")746		next(e, ErrorUtils.getError(e))747		return748	}749	this.request(session, 'upgradeAllianceBuilding', [session.uid, allianceId, buildingName]).then(function(){750		next(null, {code:200})751	}).catch(function(e){752		next(null, ErrorUtils.getError(e))753	})754}755/**756 * å级èçæè½757 * @param msg758 * @param session759 * @param next760 */761pro.upgradeAllianceVillage = function(msg, session, next){762	var allianceId = session.get('allianceId');763	var villageType = msg.villageType764	var e = null765	if(_.isEmpty(allianceId)){766		e = ErrorUtils.playerNotJoinAlliance(session.uid)767		next(e, ErrorUtils.getError(e))768		return769	}770	if(!DataUtils.isAllianceVillageTypeLegal(villageType)){771		e = new Error("villageType ä¸åæ³")772		next(e, ErrorUtils.getError(e))773		return774	}775	this.request(session, 'upgradeAllianceVillage', [session.uid, allianceId, villageType]).then(function(){776		next(null, {code:200})777	}).catch(function(e){778		next(null, ErrorUtils.getError(e))779	})780}781/**782 * æ¿æ´»èçå£å°äºä»¶783 * @param msg784 * @param session785 * @param next786 */787pro.activateAllianceShrineStage = function(msg, session, next){788	var allianceId = session.get('allianceId');789	var stageName = msg.stageName790	var e = null791	if(_.isEmpty(allianceId)){792		e = ErrorUtils.playerNotJoinAlliance(session.uid)793		next(e, ErrorUtils.getError(e))794		return795	}796	if(!DataUtils.isAllianceShrineStageNameLegal(stageName)){797		e = new Error("stageName ä¸åæ³")798		next(e, ErrorUtils.getError(e))799		return800	}801	this.request(session, 'activateAllianceShrineStage', [session.uid, allianceId, stageName]).then(function(){802		next(null, {code:200})803	}).catch(function(e){804		next(null, ErrorUtils.getError(e))805	})806}807/**808 * è¿æ»èçå£å°809 * @param msg810 * @param session811 * @param next812 */813pro.attackAllianceShrine = function(msg, session, next){814	var allianceId = session.get('allianceId');815	var shrineEventId = msg.shrineEventId816	var dragonType = msg.dragonType817	var soldiers = msg.soldiers818	var e = null819	if(_.isEmpty(allianceId)){820		e = ErrorUtils.playerNotJoinAlliance(session.uid)821		next(e, ErrorUtils.getError(e))822		return823	}824	if(!_.isString(shrineEventId)){825		e = new Error("shrineEventId ä¸åæ³")826		next(e, ErrorUtils.getError(e))827		return828	}829	if(!DataUtils.isDragonTypeExist(dragonType)){830		e = new Error("dragonType ä¸åæ³")831		next(e, ErrorUtils.getError(e))832		return833	}834	if(!_.isArray(soldiers)){835		e = new Error("soldiers ä¸åæ³")836		next(e, ErrorUtils.getError(e))837		return838	}839	this.request(session, 'attackAllianceShrine', [session.uid, allianceId, shrineEventId, dragonType, soldiers]).then(function(playerData){840		next(null, {code:200, playerData:playerData})841	}).catch(function(e){842		next(null, ErrorUtils.getError(e))843	})844}845/**846 * æ¥æ¾åéçèçè¿è¡ææ847 * @param msg848 * @param session849 * @param next850 */851pro.attackAlliance = function(msg, session, next){852	var allianceId = session.get('allianceId');853	var targetAllianceId = msg.targetAllianceId;854	var e = null855	if(_.isEmpty(allianceId)){856		e = ErrorUtils.playerNotJoinAlliance(session.uid)857		next(e, ErrorUtils.getError(e))858		return859	}860	if(!_.isString(targetAllianceId) || !ShortId.isValid(targetAllianceId) || allianceId === targetAllianceId){861		e = new Error("targetAllianceId ä¸åæ³")862		next(e, ErrorUtils.getError(e))863		return864	}865	this.request(session, 'attackAlliance', [session.uid, allianceId, targetAllianceId]).then(function(){866		next(null, {code:200})867	}).catch(function(e){868		next(null, ErrorUtils.getError(e))869	})870}871/**872 * è·åèçå¯è§åæ°æ®873 * @param msg874 * @param session875 * @param next876 */877pro.getAllianceViewData = function(msg, session, next){878	var targetAllianceId = msg.targetAllianceId879	var e = null880	if(!_.isString(targetAllianceId)){881		e = new Error("targetAllianceId ä¸åæ³")882		next(e, ErrorUtils.getError(e))883		return884	}885	this.request(session, 'getAllianceViewData', [session.uid, targetAllianceId]).then(function(allianceViewData){886		next(null, {code:200, allianceViewData:allianceViewData})887	}).catch(function(e){888		next(null, ErrorUtils.getError(e))889	})890}891/**892 * æ ¹æ®Tagæç´¢èçæææ°æ®893 * @param msg894 * @param session895 * @param next896 */897pro.searchAllianceInfoByTag = function(msg, session, next){898	var tag = msg.tag899	var e = null900	if(!_.isString(tag)){901		e = new Error("tag ä¸åæ³")902		next(e, ErrorUtils.getError(e))903		return904	}905	this.request(session, 'searchAllianceInfoByTag', [session.uid, tag]).then(function(allianceInfos){906		next(null, {code:200, allianceInfos:allianceInfos})907	}).catch(function(e){908		next(null, ErrorUtils.getError(e))909	})910}911/**912 * åå©èçå
¶ä»ç©å®¶é²å¾¡913 * @param msg914 * @param session915 * @param next916 */917pro.helpAllianceMemberDefence = function(msg, session, next){918	var allianceId = session.get('allianceId');919	var dragonType = msg.dragonType920	var soldiers = msg.soldiers921	var targetPlayerId = msg.targetPlayerId922	var e = null923	if(_.isEmpty(allianceId)){924		e = ErrorUtils.playerNotJoinAlliance(session.uid)925		next(e, ErrorUtils.getError(e))926		return927	}928	if(!DataUtils.isDragonTypeExist(dragonType)){929		e = new Error("dragonType ä¸åæ³")930		next(e, ErrorUtils.getError(e))931		return932	}933	if(!_.isArray(soldiers)){934		e = new Error("soldiers ä¸åæ³")935		next(e, ErrorUtils.getError(e))936		return937	}938	if(!_.isString(targetPlayerId) || !ShortId.isValid(targetPlayerId)){939		e = new Error("targetPlayerId ä¸åæ³")940		next(e, ErrorUtils.getError(e))941		return942	}943	if(_.isEqual(session.uid, targetPlayerId)){944		e = new Error("ä¸è½å¯¹èªå·±åé²")945		next(e, ErrorUtils.getError(e))946		return947	}948	this.request(session, 'helpAllianceMemberDefence', [session.uid, allianceId, dragonType, soldiers, targetPlayerId]).then(function(playerData){949		next(null, {code:200, playerData:playerData})950	}).catch(function(e){951		next(null, ErrorUtils.getError(e))952	})953}954/**955 * ä»è¢«åé²çèçæåå叿¤å
µ956 * @param msg957 * @param session958 * @param next959 */960pro.retreatFromBeHelpedAllianceMember = function(msg, session, next){961	var allianceId = session.get('allianceId');962	var beHelpedPlayerId = msg.beHelpedPlayerId963	var e = null964	if(_.isEmpty(allianceId)){965		e = ErrorUtils.playerNotJoinAlliance(session.uid)966		next(e, ErrorUtils.getError(e))967		return968	}969	if(!_.isString(beHelpedPlayerId) || !ShortId.isValid(beHelpedPlayerId)){970		e = new Error("beHelpedPlayerId ä¸åæ³")971		next(e, ErrorUtils.getError(e))972		return973	}974	if(_.isEqual(session.uid, beHelpedPlayerId)){975		e = new Error("ä¸è½ä»èªå·±çå叿¤éåé²é¨é")976		next(e, ErrorUtils.getError(e))977		return978	}979	this.request(session, 'retreatFromBeHelpedAllianceMember', [session.uid, allianceId, beHelpedPlayerId]).then(function(playerData){980		next(null, {code:200, playerData:playerData})981	}).catch(function(e){982		next(null, ErrorUtils.getError(e))983	})984}985/**986 * çªè¢ç©å®¶åå¸987 * @param msg988 * @param session989 * @param next990 */991pro.strikePlayerCity = function(msg, session, next){992	var allianceId = session.get('allianceId');993	var dragonType = msg.dragonType994	var defenceAllianceId = msg.defenceAllianceId;995	var defencePlayerId = msg.defencePlayerId;996	var e = null997	if(_.isEmpty(allianceId)){998		e = ErrorUtils.playerNotJoinAlliance(session.uid)999		next(e, ErrorUtils.getError(e))1000		return1001	}1002	if(!DataUtils.isDragonTypeExist(dragonType)){1003		e = new Error("dragonType ä¸åæ³")1004		next(e, ErrorUtils.getError(e))1005		return1006	}1007	if(!_.isString(defenceAllianceId) || !ShortId.isValid(defenceAllianceId)){1008		e = new Error("defenceAllianceId ä¸åæ³")1009		next(e, ErrorUtils.getError(e))1010		return1011	}1012	if(!_.isString(defencePlayerId) || !ShortId.isValid(defencePlayerId)){1013		e = new Error("defencePlayerId ä¸åæ³")1014		next(e, ErrorUtils.getError(e))1015		return1016	}1017	this.request(session, 'strikePlayerCity', [session.uid, allianceId, dragonType, defenceAllianceId, defencePlayerId]).then(function(playerData){1018		next(null, {code:200, playerData:playerData})1019	}).catch(function(e){1020		next(null, ErrorUtils.getError(e))1021	})1022}1023/**1024 * è¿æ»ç©å®¶åå¸1025 * @param msg1026 * @param session1027 * @param next1028 */1029pro.attackPlayerCity = function(msg, session, next){1030	var allianceId = session.get('allianceId');1031	var dragonType = msg.dragonType1032	var soldiers = msg.soldiers1033	var defenceAllianceId = msg.defenceAllianceId;1034	var defencePlayerId = msg.defencePlayerId;1035	var e = null1036	if(_.isEmpty(allianceId)){1037		e = ErrorUtils.playerNotJoinAlliance(session.uid)1038		next(e, ErrorUtils.getError(e))1039		return1040	}1041	if(!DataUtils.isDragonTypeExist(dragonType)){1042		e = new Error("dragonType ä¸åæ³")1043		next(e, ErrorUtils.getError(e))1044		return1045	}1046	if(!_.isArray(soldiers)){1047		e = new Error("soldiers ä¸åæ³")1048		next(e, ErrorUtils.getError(e))1049		return1050	}1051	if(!_.isString(defenceAllianceId) || !ShortId.isValid(defenceAllianceId)){1052		e = new Error("defenceAllianceId ä¸åæ³")1053		next(e, ErrorUtils.getError(e))1054		return1055	}1056	if(!_.isString(defencePlayerId) || !ShortId.isValid(defencePlayerId)){1057		e = new Error("defencePlayerId ä¸åæ³")1058		next(e, ErrorUtils.getError(e))1059		return1060	}1061	this.request(session, 'attackPlayerCity', [session.uid, allianceId, dragonType, soldiers, defenceAllianceId, defencePlayerId]).then(function(playerData){1062		next(null, {code:200, playerData:playerData})1063	}).catch(function(e){1064		next(null, ErrorUtils.getError(e))1065	})1066}1067/**1068 * è¿æ»æè½1069 * @param msg1070 * @param session1071 * @param next1072 */1073pro.attackVillage = function(msg, session, next){1074	var allianceId = session.get('allianceId');1075	var dragonType = msg.dragonType1076	var soldiers = msg.soldiers1077	var defenceAllianceId = msg.defenceAllianceId1078	var defenceVillageId = msg.defenceVillageId1079	var e = null1080	if(_.isEmpty(allianceId)){1081		e = ErrorUtils.playerNotJoinAlliance(session.uid)1082		next(e, ErrorUtils.getError(e))1083		return1084	}1085	if(!DataUtils.isDragonTypeExist(dragonType)){1086		e = new Error("dragonType ä¸åæ³")1087		next(e, ErrorUtils.getError(e))1088		return1089	}1090	if(!_.isArray(soldiers)){1091		e = new Error("soldiers ä¸åæ³")1092		next(e, ErrorUtils.getError(e))1093		return1094	}1095	if(!_.isString(defenceAllianceId) || !ShortId.isValid(defenceAllianceId)){1096		e = new Error("defenceAllianceId ä¸åæ³")1097		next(e, ErrorUtils.getError(e))1098		return1099	}1100	if(!_.isString(defenceVillageId) || !ShortId.isValid(defenceVillageId)){1101		e = new Error("defenceVillageId ä¸åæ³")1102		next(e, ErrorUtils.getError(e))1103		return1104	}1105	this.request(session, 'attackVillage', [session.uid, allianceId, dragonType, soldiers, defenceAllianceId, defenceVillageId]).then(function(playerData){1106		next(null, {code:200, playerData:playerData})1107	}).catch(function(e){1108		next(null, ErrorUtils.getError(e))1109	})1110}1111/**1112 * è¿æ»éæª1113 * @param msg1114 * @param session1115 * @param next1116 */1117pro.attackMonster = function(msg, session, next){1118	var allianceId = session.get('allianceId');1119	var dragonType = msg.dragonType1120	var soldiers = msg.soldiers1121	var defenceAllianceId = msg.defenceAllianceId1122	var defenceMonsterId = msg.defenceMonsterId1123	var e = null1124	if(_.isEmpty(allianceId)){1125		e = ErrorUtils.playerNotJoinAlliance(session.uid)1126		next(e, ErrorUtils.getError(e))1127		return1128	}1129	if(!DataUtils.isDragonTypeExist(dragonType)){1130		e = new Error("dragonType ä¸åæ³")1131		next(e, ErrorUtils.getError(e))1132		return1133	}1134	if(!_.isArray(soldiers)){1135		e = new Error("soldiers ä¸åæ³")1136		next(e, ErrorUtils.getError(e))1137		return1138	}1139	if(!_.isString(defenceAllianceId) || !ShortId.isValid(defenceAllianceId)){1140		e = new Error("defenceAllianceId ä¸åæ³")1141		next(e, ErrorUtils.getError(e))1142		return1143	}1144	if(!_.isString(defenceMonsterId) || !ShortId.isValid(defenceMonsterId)){1145		e = new Error("defenceMonsterId ä¸åæ³")1146		next(e, ErrorUtils.getError(e))1147		return1148	}1149	this.request(session, 'attackMonster', [session.uid, allianceId, dragonType, soldiers, defenceAllianceId, defenceMonsterId]).then(function(playerData){1150		next(null, {code:200, playerData:playerData})1151	}).catch(function(e){1152		next(null, ErrorUtils.getError(e))1153	})1154}1155/**1156 * ä»æè½æ¤å
µ1157 * @param msg1158 * @param session1159 * @param next1160 */1161pro.retreatFromVillage = function(msg, session, next){1162	var allianceId = session.get('allianceId');1163	var villageEventId = msg.villageEventId1164	var e = null1165	if(_.isEmpty(allianceId)){1166		e = ErrorUtils.playerNotJoinAlliance(session.uid)1167		next(e, ErrorUtils.getError(e))1168		return1169	}1170	if(!_.isString(villageEventId) || !ShortId.isValid(villageEventId)){1171		e = new Error("villageEventId ä¸åæ³")1172		next(e, ErrorUtils.getError(e))1173		return1174	}1175	this.request(session, 'retreatFromVillage', [session.uid, allianceId, villageEventId]).then(function(playerData){1176		next(null, {code:200, playerData:playerData})1177	}).catch(function(e){1178		next(null, ErrorUtils.getError(e))1179	})1180}1181/**1182 * çªè¢æè½1183 * @param msg1184 * @param session1185 * @param next1186 */1187pro.strikeVillage = function(msg, session, next){1188	var allianceId = session.get('allianceId');1189	var dragonType = msg.dragonType1190	var defenceAllianceId = msg.defenceAllianceId1191	var defenceVillageId = msg.defenceVillageId1192	var e = null1193	if(_.isEmpty(allianceId)){1194		e = ErrorUtils.playerNotJoinAlliance(session.uid)1195		next(e, ErrorUtils.getError(e))1196		return1197	}1198	if(!DataUtils.isDragonTypeExist(dragonType)){1199		e = new Error("dragonType ä¸åæ³")1200		next(e, ErrorUtils.getError(e))1201		return1202	}1203	if(!_.isString(defenceAllianceId) || !ShortId.isValid(defenceAllianceId)){1204		e = new Error("defenceAllianceId ä¸åæ³")1205		next(e, ErrorUtils.getError(e))1206		return1207	}1208	if(!_.isString(defenceVillageId) || !ShortId.isValid(defenceVillageId)){1209		e = new Error("defenceVillageId ä¸åæ³")1210		next(e, ErrorUtils.getError(e))1211		return1212	}1213	this.request(session, 'strikeVillage', [session.uid, allianceId, dragonType, defenceAllianceId, defenceVillageId]).then(function(playerData){1214		next(null, {code:200, playerData:playerData})1215	}).catch(function(e){1216		next(null, ErrorUtils.getError(e))1217	})1218}1219/**1220 * æ¥çææ¹è¿æ»è¡åäºä»¶è¯¦ç»ä¿¡æ¯1221 * @param msg1222 * @param session1223 * @param next1224 */1225pro.getAttackMarchEventDetail = function(msg, session, next){1226	var allianceId = session.get('allianceId');1227	var targetAllianceId = msg.targetAllianceId1228	var eventId = msg.eventId1229	var e = null1230	if(_.isEmpty(allianceId)){1231		e = ErrorUtils.playerNotJoinAlliance(session.uid)1232		next(e, ErrorUtils.getError(e))1233		return1234	}1235	if(!_.isString(targetAllianceId) || !ShortId.isValid(targetAllianceId)){1236		e = new Error("targetAllianceId ä¸åæ³")1237		next(e, ErrorUtils.getError(e))1238		return1239	}1240	if(!_.isString(eventId) || !ShortId.isValid(eventId)){1241		e = new Error("eventId ä¸åæ³")1242		next(e, ErrorUtils.getError(e))1243		return1244	}1245	this.request(session, 'getAttackMarchEventDetail', [session.uid, allianceId, targetAllianceId, eventId]).then(function(eventDetail){1246		next(null, {code:200, eventDetail:eventDetail})1247	}).catch(function(e){1248		next(null, ErrorUtils.getError(e))1249	})1250}1251/**1252 * æ¥çææ¹çªè¢è¡åäºä»¶è¯¦ç»ä¿¡æ¯1253 * @param msg1254 * @param session1255 * @param next1256 */1257pro.getStrikeMarchEventDetail = function(msg, session, next){1258	var allianceId = session.get('allianceId');1259	var targetAllianceId = msg.targetAllianceId1260	var eventId = msg.eventId1261	var e = null1262	if(_.isEmpty(allianceId)){1263		e = ErrorUtils.playerNotJoinAlliance(session.uid)1264		next(e, ErrorUtils.getError(e))1265		return1266	}1267	if(!_.isString(targetAllianceId) || !ShortId.isValid(targetAllianceId)){1268		e = new Error("targetAllianceId ä¸åæ³")1269		next(e, ErrorUtils.getError(e))1270		return1271	}1272	if(!_.isString(eventId) || !ShortId.isValid(eventId)){1273		e = new Error("eventId ä¸åæ³")1274		next(e, ErrorUtils.getError(e))1275		return1276	}1277	this.request(session, 'getStrikeMarchEventDetail', [session.uid, allianceId, targetAllianceId, eventId]).then(function(eventDetail){1278		next(null, {code:200, eventDetail:eventDetail})1279	}).catch(function(e){1280		next(null, ErrorUtils.getError(e))1281	})1282}1283/**1284 * æ¥çåå©é¨éè¡åäºä»¶è¯¦ç»ä¿¡æ¯1285 * @param msg1286 * @param session1287 * @param next1288 */1289pro.getHelpDefenceMarchEventDetail = function(msg, session, next){1290	var allianceId = session.get('allianceId');1291	var eventId = msg.eventId1292	var e = null1293	if(_.isEmpty(allianceId)){1294		e = ErrorUtils.playerNotJoinAlliance(session.uid)1295		next(e, ErrorUtils.getError(e))1296		return1297	}1298	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){1299		e = new Error("allianceId ä¸åæ³")1300		next(e, ErrorUtils.getError(e))1301		return1302	}1303	if(!_.isString(eventId) || !ShortId.isValid(eventId)){1304		e = new Error("eventId ä¸åæ³")1305		next(e, ErrorUtils.getError(e))1306		return1307	}1308	this.request(session, 'getHelpDefenceMarchEventDetail', [session.uid, allianceId, eventId]).then(function(eventDetail){1309		next(null, {code:200, eventDetail:eventDetail})1310	}).catch(function(e){1311		next(null, ErrorUtils.getError(e))1312	})1313}1314/**1315 * æ¥çåé²é¨é详ç»ä¿¡æ¯1316 * @param msg1317 * @param session1318 * @param next1319 */1320pro.getHelpDefenceTroopDetail = function(msg, session, next){1321	var allianceId = session.get('allianceId');1322	var playerId = msg.playerId1323	var e = null1324	if(_.isEmpty(allianceId)){1325		e = ErrorUtils.playerNotJoinAlliance(session.uid)1326		next(e, ErrorUtils.getError(e))1327		return1328	}1329	this.request(session, 'getHelpDefenceTroopDetail', [session.uid, allianceId, playerId]).then(function(troopDetail){1330		next(null, {code:200, troopDetail:troopDetail})1331	}).catch(function(e){1332		next(null, ErrorUtils.getError(e))1333	})1334}1335/**1336 * èçååºè¡¥å
éå
·1337 * @param msg1338 * @param session1339 * @param next1340 */1341pro.addShopItem = function(msg, session, next){1342	var allianceId = session.get('allianceId');1343	var playerName = session.get('name')1344	var itemName = msg.itemName1345	var count = msg.count1346	var e = null1347	if(_.isEmpty(allianceId)){1348		e = ErrorUtils.playerNotJoinAlliance(session.uid)1349		next(e, ErrorUtils.getError(e))1350		return1351	}1352	if(!DataUtils.isItemNameExist(itemName)){1353		e = new Error("itemName ä¸åæ³")1354		next(e, ErrorUtils.getError(e))1355		return1356	}1357	if(!_.isNumber(count) || count % 1 !== 0 || count <= 0){1358		e = new Error("count ä¸åæ³")1359		next(e, ErrorUtils.getError(e))1360		return1361	}1362	this.request(session, 'addShopItem', [session.uid, playerName, allianceId, itemName, count]).then(function(){1363		next(null, {code:200})1364	}).catch(function(e){1365		next(null, ErrorUtils.getError(e))1366	})1367}1368/**1369 * è´ä¹°èçååºçéå
·1370 * @param msg1371 * @param session1372 * @param next1373 */1374pro.buyShopItem = function(msg, session, next){1375	var allianceId = session.get('allianceId');1376	var itemName = msg.itemName1377	var count = msg.count1378	var e = null1379	if(_.isEmpty(allianceId)){1380		e = ErrorUtils.playerNotJoinAlliance(session.uid)1381		next(e, ErrorUtils.getError(e))1382		return1383	}1384	if(!DataUtils.isItemNameExist(itemName)){1385		e = new Error("itemName ä¸åæ³")1386		next(e, ErrorUtils.getError(e))1387		return1388	}1389	if(!_.isNumber(count) || count % 1 !== 0 || count <= 0){1390		e = new Error("count ä¸åæ³")1391		next(e, ErrorUtils.getError(e))1392		return1393	}1394	this.request(session, 'buyShopItem', [session.uid, allianceId, itemName, count]).then(function(playerData){1395		next(null, {code:200, playerData:playerData})1396	}).catch(function(e){1397		next(null, ErrorUtils.getError(e))1398	})1399}1400//1401///**1402// * 为èçæåæ·»å è£èå¼1403// * @param msg1404// * @param session1405// * @param next1406// */1407//pro.giveLoyaltyToAllianceMember = function(msg, session, next){1408//	var allianceId = session.get('allianceId');1409//	var memberId = msg.memberId1410//	var count = msg.count1411//	var e = null1412//	if(_.isEmpty(allianceId)){1413//		e = ErrorUtils.playerNotJoinAlliance(session.uid)1414//		next(e, ErrorUtils.getError(e))1415//		return1416//	}1417//	if(!_.isString(memberId) || !ShortId.isValid(memberId)){1418//		e = new Error("memberId ä¸åæ³")1419//		next(e, ErrorUtils.getError(e))1420//		return1421//	}1422//	if(!_.isNumber(count) || count % 1 !== 0 || count <= 0){1423//		e = new Error("count ä¸åæ³")1424//		next(e, ErrorUtils.getError(e))1425//		return1426//	}1427//1428//	this.request(session, 'giveLoyaltyToAllianceMember', [session.uid, allianceId, memberId, count]).then(function(){1429//		next(null, {code:200})1430//	}).catch(function(e){1431//		next(null, ErrorUtils.getError(e))1432//	})1433//}1434/**1435 * æ¥çèçä¿¡æ¯1436 * @param msg1437 * @param session1438 * @param next1439 */1440pro.getAllianceInfo = function(msg, session, next){1441	var allianceId = msg.allianceId;1442	var serverId = msg.serverId;1443	var e = null1444	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){1445		e = new Error("allianceId ä¸åæ³")1446		next(e, ErrorUtils.getError(e))1447		return1448	}1449	if(!_.contains(this.app.get('cacheServerIds'), serverId)){1450		e = new Error("serverId ä¸åæ³")1451		next(e, ErrorUtils.getError(e))1452		return1453	}1454	this.request(session, 'getAllianceInfo', [session.uid, allianceId], serverId).then(function(allianceData){1455		next(null, {code:200, allianceData:allianceData})1456	}).catch(function(e){1457		next(null, ErrorUtils.getError(e))1458	})1459}1460/**1461 * æ¥çèçåºç¡ä¿¡æ¯1462 * @param msg1463 * @param session1464 * @param next1465 */1466pro.getAllianceBasicInfo = function(msg, session, next){1467	var allianceId = msg.allianceId;1468	var serverId = msg.serverId;1469	var e = null1470	if(!_.isString(allianceId) || !ShortId.isValid(allianceId)){1471		e = new Error("allianceId ä¸åæ³")1472		next(e, ErrorUtils.getError(e))1473		return1474	}1475	if(!_.contains(this.app.get('cacheServerIds'), serverId)){1476		e = new Error("serverId ä¸åæ³")1477		next(e, ErrorUtils.getError(e))1478		return1479	}1480	this.request(session, 'getAllianceBasicInfo', [session.uid, allianceId], serverId).then(function(allianceData){1481		next(null, {code:200, allianceData:allianceData})1482	}).catch(function(e){1483		next(null, ErrorUtils.getError(e))1484	})1485}1486/**1487 * è·åèçå£å°æåå²è®°å½1488 * @param msg1489 * @param session1490 * @param next1491 */1492pro.getShrineReports = function(msg, session, next){1493	var allianceId = session.get('allianceId');1494	var e = null1495	if(_.isEmpty(allianceId)){1496		e = ErrorUtils.playerNotJoinAlliance(session.uid)1497		next(e, ErrorUtils.getError(e))1498		return1499	}1500	this.request(session, 'getShrineReports', [session.uid, allianceId]).then(function(shrineReports){1501		next(null, {code:200, shrineReports:shrineReports})1502	}).catch(function(e){1503		next(null, ErrorUtils.getError(e))1504	})1505}1506/**1507 * è·åèçæåå²è®°å½1508 * @param msg1509 * @param session1510 * @param next1511 */1512pro.getAllianceFightReports = function(msg, session, next){1513	var allianceId = session.get('allianceId');1514	var e = null1515	if(_.isEmpty(allianceId)){1516		e = ErrorUtils.playerNotJoinAlliance(session.uid)1517		next(e, ErrorUtils.getError(e))1518		return1519	}1520	this.request(session, 'getAllianceFightReports', [session.uid, allianceId]).then(function(allianceFightReports){1521		next(null, {code:200, allianceFightReports:allianceFightReports})1522	}).catch(function(e){1523		next(null, ErrorUtils.getError(e))1524	})1525}1526/**1527 * è·åèçååºä¹°å
¥ååºè®°å½1528 * @param msg1529 * @param session1530 * @param next1531 */1532pro.getItemLogs = function(msg, session, next){1533	var allianceId = session.get('allianceId');1534	var e = null1535	if(_.isEmpty(allianceId)){1536		e = ErrorUtils.playerNotJoinAlliance(session.uid)1537		next(e, ErrorUtils.getError(e))1538		return1539	}1540	this.request(session, 'getItemLogs', [session.uid, allianceId]).then(function(itemLogs){1541		next(null, {code:200, itemLogs:itemLogs})1542	}).catch(function(e){1543		next(null, ErrorUtils.getError(e))1544	})1545}1546/**1547 * ç§»å¨èç1548 * @param msg1549 * @param session1550 * @param next1551 */1552pro.moveAlliance = function(msg, session, next){1553	var allianceId = session.get('allianceId');1554	var targetMapIndex = msg.targetMapIndex;1555	var e = null1556	if(_.isEmpty(allianceId)){1557		e = ErrorUtils.playerNotJoinAlliance(session.uid)1558		return next(e, ErrorUtils.getError(e))1559	}1560	if(!_.isNumber(targetMapIndex) || targetMapIndex < 0 || targetMapIndex > Math.pow(this.bigMapLength, 2) - 1){1561		e = new Error('targetMapIndex ä¸åæ³');1562		return next(e, ErrorUtils.getError(e))1563	}1564	this.request(session, 'moveAlliance', [session.uid, allianceId, targetMapIndex]).then(function(){1565		next(null, {code:200})1566	}).catch(function(e){1567		next(null, ErrorUtils.getError(e))1568	})1569}1570/**1571 * è¿å
¥è¢«è§å¯å°å1572 * @param msg1573 * @param session1574 * @param next1575 */1576pro.enterMapIndex = function(msg, session, next){1577	var allianceId = session.get('allianceId');1578	var logicServerId = session.get('logicServerId');1579	var mapIndex = msg.mapIndex;1580	var e = null1581	if(_.isEmpty(allianceId)){1582		e = ErrorUtils.playerNotJoinAlliance(session.uid)1583		return next(e, ErrorUtils.getError(e))1584	}1585	if(!_.isNumber(mapIndex) || mapIndex < 0 || mapIndex > Math.pow(this.bigMapLength, 2) - 1){1586		e = new Error('mapIndex ä¸åæ³');1587		return next(e, ErrorUtils.getError(e))1588	}1589	this.request(session, 'enterMapIndex', [logicServerId, session.uid, allianceId, mapIndex]).spread(function(allianceData, mapData){1590		next(null, {code:200, allianceData:allianceData, mapData:mapData})1591	}).catch(function(e){1592		next(null, ErrorUtils.getError(e))1593	})1594}1595/**1596 * ç©å®¶ç¦»å¼è¢«è§å¯çå°å1597 * @param msg1598 * @param session1599 * @param next1600 */1601pro.leaveMapIndex = function(msg, session, next){1602	var allianceId = session.get('allianceId');1603	var logicServerId = session.get('logicServerId');1604	var e = null1605	if(_.isEmpty(allianceId)){1606		e = ErrorUtils.playerNotJoinAlliance(session.uid)1607		return next(e, ErrorUtils.getError(e))1608	}1609	this.request(session, 'leaveMapIndex', [logicServerId, session.uid]).then(function(){1610		next(null, {code:200})1611	}).catch(function(e){1612		next(null, ErrorUtils.getError(e))1613	})1614}1615/**1616 * å¨å¤§å°å¾ä¸è·åèçåºç¡ä¿¡æ¯1617 * @param msg1618 * @param session1619 * @param next1620 * @returns {*}1621 */1622pro.getMapAllianceDatas = function(msg, session, next){1623	var self = this;1624	var mapIndexs = msg.mapIndexs;1625	var e = null1626	if(!_.isArray(mapIndexs)){1627		e = new Error('mapIndexs ä¸åæ³');1628		return next(e, ErrorUtils.getError(e))1629	}1630	var hasError = _.some(mapIndexs, function(mapIndex){1631		return !_.isNumber(mapIndex) || mapIndex < 0 || mapIndex > Math.pow(self.bigMapLength, 2) - 1;1632	})1633	if(hasError){1634		e = new Error('mapIndexs ä¸åæ³');1635		return next(e, ErrorUtils.getError(e))1636	}1637	this.request(session, 'getMapAllianceDatas', [session.uid, mapIndexs]).then(function(datas){1638		next(null, {code:200, datas:datas})1639	}).catch(function(e){1640		next(null, ErrorUtils.getError(e))1641	})1642}1643/**1644 * è·åèçæ´»å¨ä¿¡æ¯1645 * @param msg1646 * @param session1647 * @param next1648 */1649pro.getAllianceActivities = function(msg, session, next){1650	var allianceId = session.get('allianceId');1651	this.request(session, 'getAllianceActivities', []).then(function(activities){1652		next(null, {code:200, activities:activities})1653	}).catch(function(e){1654		next(null, ErrorUtils.getError(e))1655	})1656}1657/**1658 * è·åèçæ´»å¨ç§¯åå¥å±1659 * @param msg1660 * @param session1661 * @param next1662 */1663pro.getAllianceActivityScoreRewards = function(msg, session, next){1664	var rankType = msg.rankType;1665	var allianceId = session.get('allianceId');1666	var e = null;1667	if(_.isEmpty(allianceId)){1668		e = ErrorUtils.playerNotJoinAlliance(session.uid)1669		return next(e, ErrorUtils.getError(e))1670	}1671	if(!_.contains(DataUtils.getAllianceActivityTypes(), rankType)){1672		e = new Error("rankType ä¸åæ³");1673		return next(e, ErrorUtils.getError(e));1674	}1675	this.request(session, 'getAllianceActivityScoreRewards', [session.uid, allianceId, rankType]).then(function(playerData){1676		next(null, {code:200, playerData:playerData})1677	}).catch(function(e){1678		next(null, ErrorUtils.getError(e))1679	})1680}1681/**1682 * è·åèçæ´»å¨æåå¥å±1683 * @param msg1684 * @param session1685 * @param next1686 */1687pro.getAllianceActivityRankRewards = function(msg, session, next){1688	var rankType = msg.rankType;1689	var allianceId = session.get('allianceId');1690	var e = null;1691	if(_.isEmpty(allianceId)){1692		e = ErrorUtils.playerNotJoinAlliance(session.uid)1693		return next(e, ErrorUtils.getError(e))1694	}1695	if(!_.contains(DataUtils.getAllianceActivityTypes(), rankType)){1696		e = new Error("rankType ä¸åæ³");1697		return next(e, ErrorUtils.getError(e));1698	}1699	this.request(session, 'getAllianceActivityRankRewards', [session.uid, allianceId, rankType]).then(function(playerData){1700		next(null, {code:200, playerData:playerData})1701	}).catch(function(e){1702		next(null, ErrorUtils.getError(e))1703	})...event.js
Source:event.js  
...149				POSTING: {150					state: states.POSTINGS_ID,151					method: function(targetIds, targets) {152						return function(callback, error, apiError) {153							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.POSTING]);154						};155					},156					view: partials.POSTING157				},158				COMMENT: {159					state: states.COMMENTS_ID,160					method: function(targetIds, targets) {161						return function(callback, error, apiError) {162							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);163						};164					},165					view: partials.COMMENT166				},167				COMMENT_SUB: {168					state: states.COMMENTS_ID,169					method: function(targetIds, targets) {170						return function(callback, error, apiError) {171							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);172						};173					},174					view: partials.COMMENT175				},176				MESSAGE: {177					state: states.CONVERSATION178				},179				APPRECIATION_POSTING: {180					state: states.POSTINGS_ID,181					method: function(targetIds, targets) {182						return function(callback, error, apiError) {183							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.POSTING]);184						};185					},186					view: partials.POSTING187				},188				APPRECIATION_COMMENT: {189					state: states.COMMENTS_ID,190					method: function(targetIds, targets) {191						return function(callback, error, apiError) {192							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);193						};194					},195					view: partials.COMMENT196				},197				APPRECIATION_ATTEMPT: {198					state: states.SETTINGS199				},200				PROMOTION_POSTING: {201					state: states.POSTINGS_ID,202					method: function(targetIds, targets) {203						return function(callback, error, apiError) {204							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.POSTING]);205						};206					},207					view: partials.POSTING208				},209				PROMOTION_COMMENT: {210					state: states.COMMENTS_ID,211					method: function(targetIds, targets) {212						return function(callback, error, apiError) {213							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);214						};215					},216					view: partials.COMMENT217				},218				OFFER: {219					state: states.OFFERS220				},221				OFFER_ACCEPT: {222					state: states.USERS_ID223				},224				OFFER_WITHDRAW: {225					state: states.USERS_ID226				},227				OFFER_DENY: {228					state: states.USERS_ID229				},230				BACKING_CANCEL: {231					state: states.USERS_ID232				},233				BACKING_WITHDRAW: {234					state: states.USERS_ID235				},236				FOLLOW_ADD: {237					state: states.USERS_ID,238					/*239					method: function(targetIds, targets) {240						return function(callback, error, apiError) {241							pyUser.user(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.TARGET]);242						};243					},*/244					getData: function(targetIds, targets) {245						return User.user($scope, targetIds[pathVars.TARGET], getSuccess, getError, getError);246					},247					view: partials.USER248				},249				FOLLOW_REMOVE: {250					state: states.USERS_ID,251					/*252					method: function(targetIds, targets) {253						return function(callback, error, apiError) {254							pyUser.user(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.TARGET]);255						};256					},*/257					getData: function(targetIds, targets) {258						return User.user($scope, targetIds[pathVars.TARGET], getSuccess, getError, getError);259					},260					view: partials.USER261				},262				POSTING_INFRINGEMENT: {263					state: states.POSTINGS_ID264				},265				COMMENT_INFRINGEMENT: {266					state: states.COMMENTS_ID267				}268			};269			270			var updated = function(s) {271				if(ng.isDefined(s) && ng.isDefined(s.getSingleMain())) {272					$scope.single = s;273					$scope.event = s.getSingleMain();274					$scope.subData = {};275					if(!ng.isDefined($scope.event.type)) {276						return;277					}278					i18n(function(t) {279						$scope.targets = $scope.event.targets;280						281						if($scope.targets.type === 'POSTING') {282							$scope.targets.typeRenamed = t('shared:typeRenamed.posting');283						} else if($scope.targets.type === 'USER') {284							$scope.targets.typeRenamed = t('shared:typeRenamed.user');285						} else if($scope.targets.type === 'TAG') {286							$scope.targets.typeRenamed = t('shared:typeRenamed.tag');287						}288						289						$scope.targetIds = $scope.event.targetIds;290						if(typeof($scope.targetIds[pathVars.USER]) === 'undefined') {291							$scope.targetIds[pathVars.USER] = $scope.targetIds[pathVars.TARGET];292						}293						$scope.title = t('shared:activityTypes.' + $scope.event.type, $scope.targets);294						$scope.timeSince = utils.getTimeSince($scope.event.occurred);295						$scope.calendar = utils.getCalendarDate($scope.event.occurred);296						297						var activity = activities[$scope.event.type];298						$scope.click = undefined;299						if(ng.isDefined(activity)) {300							$scope.link = $state.href(activity.state, $scope.targetIds);301							if((ng.isDefined(activity.method) || ng.isDefined(activity.getData)) && ng.isDefined(activity.view)) {302								$scope.click = getData(activity);303								if($scope.single.autoLoad) {304									var timeout = 0;305									var index = $scope.$parent[scopeVars.INDEX];306									if(ng.isDefined(index) && index > 0) {307										timeout = index * values.AUTOLOAD_TIMEOUT_MULTIPLIER;308									}309									$timeout(function() {310										$scope.click();311									}, timeout);312								}313							}314						} else {315							$scope.link = $state.href(states.INDEX, $scope.targetIds);316						}317						318					});319				}320			};321			updated($scope.single);322			323			$scope.$watch('$parent.' + $scope.$parent[scopeVars.SINGLE] + '.' + chainedKeys.DATA + '.' + chainedKeys.SINGLE, function(newValue, oldValue) {324				if(newValue !== oldValue) {325					updated($parse($scope.$parent[scopeVars.SINGLE])($scope.$parent));326				}327			});328			329		}330	]);331	controller.controller('NotificationController', ['$scope', '$state', '$parse', '$timeout', 'ApiData', 'pyPosting', 'pyComment', 'User',332		function($scope, $state, $parse, $timeout, ApiData, pyPosting, pyComment, User) {333			$scope.single = $parse($scope.$parent[scopeVars.SINGLE])($scope.$parent);334			$scope[scopeVars.SINGLE] = 'subData.single';335			336			var getSuccess = function(callback) {337				return function(code, dto, p) {338					$scope.loadingSubSingle = false;339					return callback(code, dto, p);340				};341			};342			343			var getError = function(error, a) {344				return function(code, dto) {345					i18n(function(t) {346						$scope.loadingSubSingle = false;347						$scope.subSingleAlert = t('alerts:pageableErrors.sub');348						if(ng.isDefined(a)) {349							$scope.subSingleAlert = t(a);350						}351					});352					$scope.subData = {};353					error(code, dto);354				};355			};356			357			var getData = function(activity) {358				if(ng.isDefined(activity) && ng.isDefined(activity.view) && (ng.isDefined(activity.method) || ng.isDefined(activity.getData))) {359					return function() {360						$scope.subSingleAlert = undefined;361						if(ng.isDefined($scope.subData) && ng.isDefined($scope.subData.single)) {362							$scope.subData = {};363						} else {364							$scope.loadingSubSingle = true;365							if(ng.isDefined(activity.getData)) {366								$scope.subData = activity.getData($scope.targetIds, $scope.targets);367							} else {368								$scope.subData = ApiData.getData({369									scope: $scope,370									view: activity.view,371									method: activity.method($scope.targetIds, $scope.targets)372								});373							}374						}375					};376				} else {377					return function() {};378				}379			};380			381			var activities = {382				ANY: {383					state: states.INDEX,384				},385				POSTING: {386					state: states.POSTINGS_ID,387					method: function(targetIds, targets) {388						return function(callback, error, apiError) {389							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.POSTING]);390						};391					},392					view: partials.POSTING393				},394				COMMENT: {395					state: states.COMMENTS_ID,396					method: function(targetIds, targets) {397						return function(callback, error, apiError) {398							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);399						};400					},401					view: partials.COMMENT402				},403				COMMENT_SUB: {404					state: states.COMMENTS_ID,405					method: function(targetIds, targets) {406						return function(callback, error, apiError) {407							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);408						};409					},410					view: partials.COMMENT411				},412				MESSAGE: {413					state: states.CONVERSATION414				},415				APPRECIATION_POSTING: {416					state: states.POSTINGS_ID,417					getData: function(targetIds, targets) {418						return User.user($scope, targetIds[pathVars.USER], getSuccess, getError, getError);419					},420					view: partials.USER421					/*422					method: function(targetIds, targets) {423						return function(callback, error, apiError) {424							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.POSTING]);425						};426					},427					view: partials.POSTING428					*/429				},430				APPRECIATION_COMMENT: {431					state: states.COMMENTS_ID,432					getData: function(targetIds, targets) {433						return User.user($scope, targetIds[pathVars.USER], getSuccess, getError, getError);434					},435					view: partials.USER436					/*437					method: function(targetIds, targets) {438						return function(callback, error, apiError) {439							pyComment.comment(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);440						};441					},442					view: partials.COMMENT443					*/444				},445				APPRECIATION_ATTEMPT: {446					state: states.SETTINGS447				},448				PROMOTION_POSTING: {449					state: states.POSTINGS_ID,450					getData: function(targetIds, targets) {451						return User.user($scope, targetIds[pathVars.USER], getSuccess, getError, getError);452					},453					view: partials.USER454					/*455					method: function(targetIds, targets) {456						return function(callback, error, apiError) {457							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.POSTING]);458						};459					},460					view: partials.POSTING461					*/462				},463				PROMOTION_COMMENT: {464					state: states.COMMENTS_ID,465					getData: function(targetIds, targets) {466						return User.user($scope, targetIds[pathVars.USER], getSuccess, getError, getError);467					},468					view: partials.USER469					/*470					method: function(targetIds, targets) {471						return function(callback, error, apiError) {472							pyPosting.posting(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.COMMENT]);473						};474					},475					view: partials.COMMENT476					*/477				},478				OFFER: {479					state: states.OFFERS480				},481				OFFER_ACCEPT: {482					state: states.USERS_ID483				},484				OFFER_WITHDRAW: {485					state: states.USERS_ID486				},487				OFFER_DENY: {488					state: states.USERS_ID489				},490				BACKING_CANCEL: {491					state: states.USERS_ID492				},493				BACKING_WITHDRAW: {494					state: states.USERS_ID495				},496				FOLLOW_ADD: {497					state: states.USERS_ID,498					/*499					method: function(targetIds, targets) {500						return function(callback, error, apiError) {501							pyUser.user(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.TARGET]);502						};503					},*/504					getData: function(targetIds, targets) {505						return User.user($scope, targetIds[pathVars.USER], getSuccess, getError, getError);506					},507					view: partials.USER508				},509				FOLLOW_REMOVE: {510					state: states.USERS_ID,511					/*512					method: function(targetIds, targets) {513						return function(callback, error, apiError) {514							pyUser.user(getSuccess(callback), getError(error), getError(apiError), targetIds[pathVars.TARGET]);515						};516					},*/517					getData: function(targetIds, targets) {518						return User.user($scope, targetIds[pathVars.USER], getSuccess, getError, getError);519					},520					view: partials.USER521				},522				POSTING_INFRINGEMENT: {523					state: states.POSTINGS_ID524				},525				COMMENT_INFRINGEMENT: {526					state: states.COMMENTS_ID527				}528			};...processorErrorFactory.js
Source:processorErrorFactory.js  
...5export const ProcessorErrorFactory  = Object.freeze({6  symbol_not_found_full: (id, sourceInfo) => {7    if(sourceInfo) {8      const context = [id, sourceInfo.line, sourceInfo.column];9      return new SemanticError(LocalizedStrings.getError("symbol_not_found_full", context));10    } else {11      return ProcessorErrorFactory.symbol_not_found(id);12    }13  },14  symbol_not_found: (id) => {15    const context = [id];16    return new SemanticError(LocalizedStrings.getError("symbol_not_found", context));17  },18  function_missing_full: (id, sourceInfo) => {19    if(sourceInfo) {20      const context = [id, sourceInfo.line, sourceInfo.column];21      return new SemanticError(LocalizedStrings.getError("function_missing_full", context));22    } else {23      return ProcessorErrorFactory.function_missing(id);24    }25  },26  function_missing: (id) => {27    const context = [id];28    return new SemanticError(LocalizedStrings.getError("function_missing", context));29  },30  main_missing: () => {31    return new SemanticError(LocalizedStrings.getError("main_missing"));32  },        // TODO: better urgent error message33  array_dimension_not_int_full: (sourceInfo) => {34    if(sourceInfo) {35      const context = [sourceInfo.line];36      return new SemanticError(LocalizedStrings.getError("array_dimension_not_int_full", context));37    } else {38      return ProcessorErrorFactory.array_dimension_not_int();39    }40  },41  array_dimension_not_int: () => {42    return new SemanticError(LocalizedStrings.getError("array_dimension_not_int"));43  },44  unknown_command_full: (sourceInfo)=> {45    if(sourceInfo) {46      const context = [sourceInfo.line];47      return new RuntimeError(LocalizedStrings.getError("unknown_command_full", context));48    } else {49      return ProcessorErrorFactory.unknown_command();50    }51    52  },53  unknown_command: ()=> {54    return new RuntimeError(LocalizedStrings.getError("unknown_command"));55  },56  incompatible_types_full: (type, dim, sourceInfo) => {57    if(sourceInfo) {58      const context = [LocalizedStrings.translateType(type, dim), sourceInfo.line, sourceInfo.column];59      return new SemanticError(LocalizedStrings.getError("incompatible_types_full", context));60    } else {61      return ProcessorErrorFactory.incompatible_types(type, dim);62    }63  },64  incompatible_types: (type, dim) => {65    const context = [LocalizedStrings.translateType(type, dim)];66    return new SemanticError(LocalizedStrings.getError("incompatible_types", context));67  },68  incompatible_types_array_full: (exp, type, dim, sourceInfo) => {69    if(sourceInfo) {70      const context = [exp, LocalizedStrings.translateType(type, dim), sourceInfo.line, sourceInfo.column];71      return new SemanticError(LocalizedStrings.getError("incompatible_types_array_full", context));72    } else {73      return ProcessorErrorFactory.incompatible_types_array(exp, type, dim);74    }75  },76  incompatible_types_array: (exp, type, dim) => {77    const context = [exp, LocalizedStrings.translateType(type, dim)];78    return new SemanticError(LocalizedStrings.getError("incompatible_types_array", context));79  },80  loop_condition_type_full: (exp, sourceInfo) => {81    if(sourceInfo) {82      const context = [sourceInfo.line, sourceInfo.column, exp];83      return new SemanticError(LocalizedStrings.getError("loop_condition_type_full", context));84    } else {85      return ProcessorErrorFactory.loop_condition_type(exp);86    }87  },88  loop_condition_type: (exp) => {89    const context = [exp];90    return new SemanticError(LocalizedStrings.getError("loop_condition_type", context));91  },92  endless_loop_full: (sourceInfo) => {93    if(sourceInfo) {94      const context = [sourceInfo.line];95      return new SemanticError(LocalizedStrings.getError("endless_loop_full", context));96    } else {97      return ProcessorErrorFactory.endless_loop();98    }99  },100  endless_loop: () => {101    return new SemanticError(LocalizedStrings.getError("endless_loop"));102  },103  for_condition_type_full: (exp, sourceInfo) => {104    if(sourceInfo) {105      const context = [sourceInfo.line, sourceInfo.column, exp];106      return new SemanticError(LocalizedStrings.getError("for_condition_type_full", context));107    } else {108      return ProcessorErrorFactory.for_condition_type(exp);109    }110  },111  for_condition_type: (exp) => {112    const context = [exp];113    return new SemanticError(LocalizedStrings.getError("for_condition_type", context));114  },115  if_condition_type_full: (exp, sourceInfo) => {116    if(sourceInfo) {117      const context = [sourceInfo.line, sourceInfo.column, exp];118      return new SemanticError(LocalizedStrings.getError("if_condition_type_full", context));119    } else {120      return ProcessorErrorFactory.if_condition_type(exp);121    }122  },123  if_condition_type: (exp) => {124    const context = [exp];125    return new SemanticError(LocalizedStrings.getError("if_condition_type", context));126  },127  invalid_global_var: () => {128    return new RuntimeError(LocalizedStrings.getError("invalid_global_var"))129  },130  not_implemented: (id) => {131    const context  = [id]132    return new RuntimeError(LocalizedStrings.getError("not_implemented", context))133  },134  invalid_case_type_full: (exp, type, dim, sourceInfo) => {135    if(sourceInfo) {136      const context = [exp, LocalizedStrings.translateType(type, dim), sourceInfo.line, sourceInfo.column];137      return new SemanticError(LocalizedStrings.getError("invalid_case_type_full", context));138    } else {139      return ProcessorErrorFactory.invalid_case_type(exp, type, dim);140    }141  },142  invalid_case_type: (exp, type, dim) => {143    const context = [exp, LocalizedStrings.translateType(type, dim)];144    return new SemanticError(LocalizedStrings.getError("invalid_case_type", context));145  },146  void_in_expression_full: (id, sourceInfo) => {147    if(sourceInfo) {148      const context = [sourceInfo.line, sourceInfo.column, id];149      return new SemanticError(LocalizedStrings.getError("void_in_expression_full", context));150    } else {151      return ProcessorErrorFactory.void_in_expression(id);152    }153  },154  void_in_expression: (id) => {155    const context = [id];156    return new SemanticError(LocalizedStrings.getError("void_in_expression", context));157  },158  invalid_array_access_full: (id, sourceInfo) => {159    if(sourceInfo) {160      const context = [id, sourceInfo.line, sourceInfo.column];161      return new SemanticError(LocalizedStrings.getError("invalid_array_access_full", context));162    } else {163      return ProcessorErrorFactory.invalid_array_access(id);164    }165  },166  invalid_array_access: (id) => {167    const context = [id];168    return new SemanticError(LocalizedStrings.getError("invalid_array_access", context));169  },170  invalid_matrix_access_full: (id, sourceInfo) => {171    if(sourceInfo) {172      const context = [id, sourceInfo.line, sourceInfo.column];173      return new SemanticError(LocalizedStrings.getError("invalid_matrix_access_full", context));174    } else {175      return ProcessorErrorFactory.invalid_matrix_access(id);176    }177  },178  invalid_matrix_access: (id) => {179    const context = [id];180    return new SemanticError(LocalizedStrings.getError("invalid_matrix_access", context));181  },182  matrix_column_outbounds_full: (id, value, columns, sourceInfo) => {183    if(sourceInfo) {184      const context = [sourceInfo.line, value, id, columns];185      return new RuntimeError(LocalizedStrings.getError("matrix_column_outbounds_full", context));186    } else {187      return ProcessorErrorFactory.matrix_column_outbounds(id, value, columns);188    }189  },190  matrix_column_outbounds: (id, value, columns) => {191    const context = [value, id, columns];192    return new RuntimeError(LocalizedStrings.getError("matrix_column_outbounds", context));193  },194  matrix_line_outbounds_full: (id, value, lines, sourceInfo) => {195    if(sourceInfo) {196      const context = [sourceInfo.line, value, id, lines];197      return new RuntimeError(LocalizedStrings.getError("matrix_line_outbounds_full", context));198    } else {199      return ProcessorErrorFactory.matrix_line_outbounds(id, value, lines);200    }201  },202  matrix_line_outbounds: (id, value, lines) => {203    const context = [value, id, lines];204    return new RuntimeError(LocalizedStrings.getError("matrix_line_outbounds", context));205  },206  vector_line_outbounds_full: (id, value, lines, sourceInfo) => {207    if(sourceInfo) {208      const context = [sourceInfo.line, value, id, lines];209      return new RuntimeError(LocalizedStrings.getError("vector_line_outbounds_full", context));210    } else {211      return ProcessorErrorFactory.vector_line_outbounds(id, value, lines);212    }213  },214  vector_line_outbounds: (id, value, lines) => {215    const context = [value, id, lines];216    return new RuntimeError(LocalizedStrings.getError("vector_line_outbounds", context));217  },218  vector_not_matrix_full: (id, sourceInfo) => {219    if(sourceInfo) {220      const context = [sourceInfo.line, id];221      return new RuntimeError(LocalizedStrings.getError("vector_not_matrix_full", context));222    } else {223      return ProcessorErrorFactory.vector_not_matrix(id);224    }225  },226  vector_not_matrix: (id) => {227    const context = [id];228    return new RuntimeError(LocalizedStrings.getError("vector_not_matrix", context));229  },230  function_no_return: (id) => {231    const context = [id];232    return new SemanticError(LocalizedStrings.getError("function_no_return", context));233  },234  invalid_void_return_full: (id, type, dim, sourceInfo) => {235    if(sourceInfo) {236      const context = [sourceInfo.line, id, LocalizedStrings.translateType(type, dim)];237      return new SemanticError(LocalizedStrings.getError("invalid_void_return_full", context));238    } else {239      return ProcessorErrorFactory.invalid_void_return(id, type, dim);240    }241  },242  invalid_void_return: (id, type, dim) => {243    const context = [id, LocalizedStrings.translateType(type, dim)];244    return new SemanticError(LocalizedStrings.getError("invalid_void_return_full", context));245  },246  invalid_return_type_full: (id, type, dim, sourceInfo) => {247    if(sourceInfo) {248      const context = [sourceInfo.line, id, LocalizedStrings.translateType(type, dim)];249      return new SemanticError(LocalizedStrings.getError("invalid_return_type_full", context));250    } else {251      return ProcessorErrorFactory.invalid_return_type(id, type, dim);252    }253  },254  invalid_return_type: (id, type, dim) => {255    const context = [id, LocalizedStrings.translateType(type, dim)];256    return new SemanticError(LocalizedStrings.getError("invalid_return_type", context));257  },258  invalid_parameters_size_full: (id, expected, actual, sourceInfo) => {259    if(sourceInfo) {260      const context = [sourceInfo.line, id, expected, actual];261      return new SemanticError(LocalizedStrings.getError("invalid_parameters_size_full", context));262    } else {263      return ProcessorErrorFactory.invalid_parameters_size(id, expected, actual);264    }265  },266  invalid_parameters_size: (id, expected, actual) => {267    const context = [id, expected, actual];268    return new SemanticError(LocalizedStrings.getError("invalid_parameters_size", context));269  },270  invalid_parameter_type_full: (id, exp, sourceInfo) => {271    if(sourceInfo) {272      const context = [exp, id, sourceInfo.line];273      return new SemanticError(LocalizedStrings.getError("invalid_parameter_type_full", context));274    } else {275      return ProcessorErrorFactory.invalid_parameter_type(id, exp);276    }277  },278  invalid_parameter_type: (id, exp) => {279    const context = [exp, id];280    return new SemanticError(LocalizedStrings.getError("invalid_parameter_type_full", context));281  },282  invalid_ref_full: (id, exp, sourceInfo) => {283    if(sourceInfo) {284      const context = [exp, id , sourceInfo.line];285      return new SemanticError(LocalizedStrings.getError("invalid_ref_full", context));286    } else {287      return ProcessorErrorFactory.invalid_ref(id, exp);288    }289  },290  invalid_ref: (id, exp) => {291    const context = [exp, id];292    return new SemanticError(LocalizedStrings.getError("invalid_ref", context));293  },294  unexpected_break_command_full: (sourceInfo) => {295    if(sourceInfo) {296      const context = [sourceInfo.line];297      return new RuntimeError(LocalizedStrings.getError("unexpected_break_command_full", context));298    } else {299      return ProcessorErrorFactory.unexpected_break_command();300    }301  },302  unexpected_break_command: () => {303    return new RuntimeError(LocalizedStrings.getError("unexpected_break_command"));304  },305  invalid_array_literal_type_full: (exp, sourceInfo) => {306    if(sourceInfo) {307      const context = [sourceInfo.line, exp];308      return new RuntimeError(LocalizedStrings.getError("invalid_array_literal_type_full", context));309    } else {310      return ProcessorErrorFactory.invalid_array_literal_type(exp);311    }312  },313  invalid_array_literal_type: (exp) => {314    const context = [exp];315    return new RuntimeError(LocalizedStrings.getError("invalid_array_literal_type", context));316  },317  invalid_array_literal_line_full: (expected, actual, sourceInfo) => {318    if(sourceInfo) {319      const context = [sourceInfo.line, expected, actual];320      return new RuntimeError(LocalizedStrings.getError("invalid_array_literal_line_full", context));321    } else {322      return ProcessorErrorFactory.invalid_array_literal_type(expected, actual);323    }324  },325  invalid_array_literal_line: (expected, actual) => {326    const context = [expected, actual];327    return new RuntimeError(LocalizedStrings.getError("invalid_array_literal_line", context));328  },329  invalid_array_literal_column_full: (expected, actual, sourceInfo) => {330    if(sourceInfo) {331      const context = [sourceInfo.line, expected, actual];332      return new RuntimeError(LocalizedStrings.getError("invalid_array_literal_column_full", context));333    } else {334      return ProcessorErrorFactory.invalid_array_literal_column(expected, actual);335    }336  },337  invalid_array_literal_column: (expected, actual) => {338    const context = [expected, actual];339    return new RuntimeError(LocalizedStrings.getError("invalid_array_literal_column", context));340  },341  invalid_unary_op_full: (expString, opName, type, dim, sourceInfo) => {342    if(sourceInfo) {343      const context = [sourceInfo.line, expString, LocalizedStrings.translateOp(opName), LocalizedStrings.translateType(type, dim)];344      return new RuntimeError(LocalizedStrings.getError("invalid_unary_op_full", context));345    } else {346      return ProcessorErrorFactory.invalid_unary_op(opName, type, dim);347    }348  },349  invalid_unary_op: (expString, opName, type, dim) => {350    const context = [expString, LocalizedStrings.translateOp(opName), LocalizedStrings.translateType(type, dim)];351    return new RuntimeError(LocalizedStrings.getError("invalid_unary_op", context));352  },353  invalid_infix_op_full: (expString, opName, typeLeft, dimLeft, typeRight, dimRight,  sourceInfo) => {354    if(sourceInfo) {355      const context = [sourceInfo.line, expString, LocalizedStrings.translateOp(opName), LocalizedStrings.translateType(typeLeft, dimLeft), LocalizedStrings.translateType(typeRight, dimRight)];356      return new RuntimeError(LocalizedStrings.getError("invalid_infix_op_full", context));357    } else {358      return ProcessorErrorFactory.invalid_infix_op(opName, typeLeft, dimLeft, typeRight, dimRight);359    }360  },361  invalid_infix_op: (expString, opName, typeLeft, dimLeft, typeRight, dimRight) => {362    const context = [expString, LocalizedStrings.translateOp(opName), LocalizedStrings.translateType(typeLeft, dimLeft), LocalizedStrings.translateType(typeRight, dimRight)];363    return new RuntimeError(LocalizedStrings.getError("invalid_infix_op", context));364  },365  array_dimension_not_positive_full: (sourceInfo) => {366    if(sourceInfo) {367      const context = [sourceInfo.line];368      return new SemanticError(LocalizedStrings.getError("array_dimension_not_positive_full", context));369    } else {370      return ProcessorErrorFactory.array_dimension_not_positive();371    }372  },373  array_dimension_not_positive: () => {374    return new SemanticError(LocalizedStrings.getError("array_dimension_not_positive"));375  },376  invalid_type_conversion: (value, type, dim) => {377    const context = [value, LocalizedStrings.translateType(type, dim)];378    return new RuntimeError(LocalizedStrings.getError("invalid_type_conversion", context));379  },380  invalid_read_type: (exp, type, dim, name) => {381    const context = [exp, LocalizedStrings.translateType(type, dim), name];382    return new RuntimeError(LocalizedStrings.getError("invalid_read_type", context))383  },384  invalid_read_type_array: (exp, typePos, dimPos, name, typeArray, dimArray) => {385    const context = [exp, LocalizedStrings.translateType(typePos, dimPos), name,LocalizedStrings.translateType(typeArray, dimArray)];386    return new RuntimeError(LocalizedStrings.getError("invalid_read_type_array", context))387  }...apply-to-nulls.js
Source:apply-to-nulls.js  
...44        listChildJsx = formData.listChild.map((lc, index) => {45            return (46                <div key={index}>47                    <TextField48                        error={!!getError(`listChild{${index}}`)}49                        helperText={getError(`listChild{${index}}`) || ' '}50                        label="unique"51                        type="text"52                        value={getValue(`listChild[${index}]`) || ''}53                        onChange={(e) => setPathValue(`listChild[${index}]`, e.target.value)}54                    />55                    <Button className="myDeleteButton" variant="contained" onClick={() => handleDeleteElement(index)}>56                        <span className="myShinkableButtonSpan">Delete Element</span>57                        <DeleteIcon className="myShinkableButtonIcon" />58                    </Button>59                </div>60            );61        });62    }63    return (64        <ExampleUsageWrapper header="applyToNulls" codeUrl="pages/customizations/apply-to-nulls.js">65            <p className="infoParagraph">66                By default <b>react-validatable-form</b> interprets <b>undefined</b>, <b>null</b>, <b>empty string</b>{' '}67                or <b>empty array</b> values as valid values. If you want any rule to be applied to these values,{' '}68                <b>applyToNulls</b> parameter should be used.69            </p>70            <div>71                <TextField72                    error={!!getError('val1')}73                    helperText={getError('val1') || ' '}74                    label="requiredApplyToNulls"75                    type="text"76                    value={getValue('val1') || ''}77                    onChange={(e) => setPathValue('val1', e.target.value)}78                />79            </div>80            <div>81                <TextField82                    error={!!getError('val2')}83                    helperText={getError('val2') || ' '}84                    label="numberApplyToNulls"85                    type="number"86                    value={getValue('val2') || ''}87                    onChange={(e) => setPathValue('val2', e.target.value)}88                />89            </div>90            <div>91                <TextField92                    error={!!getError('val3')}93                    helperText={getError('val3') || ' '}94                    label="lengthApplyToNulls"95                    type="text"96                    value={getValue('val3') || ''}97                    onChange={(e) => setPathValue('val3', e.target.value)}98                />99            </div>100            <div>101                <Autocomplete102                    multiple103                    value={getValue('val4') || []}104                    onChange={(event, newValue) => {105                        setPathValue('val4', newValue);106                    }}107                    options={options}108                    renderInput={(params) => (109                        <TextField110                            {...params}111                            error={!!getError('val4')}112                            helperText={getError('val4') || ' '}113                            label="listSizeApplyToNulls"114                        />115                    )}116                />117            </div>118            <div>119                <DesktopDatePicker120                    label="dateApplyToNulls"121                    inputFormat="MM/dd/yyyy"122                    value={getValue('val5') || null}123                    onChange={(val) => setPathValue('val5', val)}124                    renderInput={(params) => (125                        <TextField {...params} error={!!getError('val5')} helperText={getError('val5') || ' '} />126                    )}127                />128            </div>129            <div>130                <TextField131                    error={!!getError('val6')}132                    helperText={getError('val6') || ' '}133                    label="emailApplyToNulls"134                    type="text"135                    value={getValue('val6') || ''}136                    onChange={(e) => setPathValue('val6', e.target.value)}137                />138            </div>139            <div>140                <TextField141                    error={!!getError('val7')}142                    helperText={getError('val7') || ' '}143                    label="urlApplyToNulls"144                    type="text"145                    value={getValue('val7') || ''}146                    onChange={(e) => setPathValue('val7', e.target.value)}147                />148            </div>149            <div>150                <TextField151                    error={!!getError('val8')}152                    helperText={getError('val8') || ' '}153                    label="ibanApplyToNulls"154                    type="text"155                    value={getValue('val8') || ''}156                    onChange={(e) => setPathValue('val8', e.target.value)}157                />158            </div>159            <div>160                <TextField161                    error={!!getError('val9')}162                    helperText={getError('val9') || ' '}163                    label="equalityApplyToNulls"164                    type="text"165                    value={getValue('val9') || ''}166                    onChange={(e) => setPathValue('val9', e.target.value)}167                />168            </div>169            <div>170                <TextField171                    error={!!getError('val10')}172                    helperText={getError('val10') || ' '}173                    label="regexApplyToNulls"174                    type="text"175                    value={getValue('val10') || ''}176                    onChange={(e) => setPathValue('val10', e.target.value)}177                />178            </div>179            <div>180                <Button className="myAddButton" variant="contained" onClick={handleAddElement}>181                    <span className="myShinkableButtonSpan">Add New Element</span>182                    <AddIcon className="myShinkableButtonIcon" />183                </Button>184            </div>185            <div className={'formListField'}>{listChildJsx}</div>186            <div className={'errorInfoText'}>{getError('listChild')}</div>187            <ValidationResult isValid={isValid} />188            <CurrentRulesInfo currentRules={rules} />189        </ExampleUsageWrapper>190    );191};...syntaxErrorFactory.js
Source:syntaxErrorFactory.js  
1import * as LocalizedStringsService from './../../services/localizedStringsService';2import { SyntaxError } from './syntaxError';3const LocalizedStrings = LocalizedStringsService.getInstance();4export const SyntaxErrorFactory = Object.freeze({5  extra_lines: () => new SyntaxError(LocalizedStrings.getError("extra_lines")),6  token_missing_one: (expected, token) => {7    const context = [expected, token.text, token.line, token.column];8    return new SyntaxError(LocalizedStrings.getError("token_missing_one", context));9  },10  token_missing_list: (expectedList, token) => {11    const line = expectedList.join(LocalizedStrings.getOR());12    return SyntaxErrorFactory.token_missing_one(line, token);13  },14  id_missing: (token) => {15    const context = [token.text, token.line, token.column];16    return new SyntaxError(LocalizedStrings.getError("id_missing", context));17  },18  eos_missing: (token) => {19    const context = [token.line, token.column];20    return new SyntaxError(LocalizedStrings.getError("eos_missing", context));21  },22  invalid_array_dimension: (typeName, token) => {23    const context = [token.line, token.column, typeName];24    return new SyntaxError(LocalizedStrings.getError("invalid_array_dimension", context));25  },26  invalid_array_size: (token) => {27    const context = [token.line];28    return new SyntaxError(LocalizedStrings.getError("invalid_array_size", context));29  },30  invalid_main_return: (name, typeName, token) => {31    const context = [name, typeName, token.line];32    return new SyntaxError(LocalizedStrings.getError("invalid_main_return", context));33  },34  invalid_var_declaration: (token) => {35    const context = [token.line];36    return new SyntaxError(LocalizedStrings.getError("invalid_var_declaration", context));37  },38  invalid_break_command: (cmdName, token) => {39    const context = [token.line, cmdName];40    return new SyntaxError(LocalizedStrings.getError("invalid_break_command", context));41  },42  invalid_terminal: (token) => {43    const context = [token.text, token.line, token.column];44    return new SyntaxError(LocalizedStrings.getError('invalid_terminal', context));45  },46  invalid_type: (list, token) => {47    const line = list.join(LocalizedStrings.getOR());48    const context = [token.text, token.line, token.column, line]49    return new SyntaxError(LocalizedStrings.getError("invalid_type", context));50  },51  const_not_init: (token) => {52    const context = [token.line, token.column];53    return new SyntaxError(LocalizedStrings.getError("const_not_init", context));54  },55  invalid_id_format: (token) => {56    const context = [token.text, token.line, token.column];57    return new SyntaxError(LocalizedStrings.getError("invalid_id_format", context));58  },59  duplicate_function: (token) => {60    const context = [token.text, token.line, token.column];61    return new SyntaxError(LocalizedStrings.getError("duplicate_function", context));62  },63  main_parameters: () => {64    return new SyntaxError(LocalizedStrings.getError("main_parameters"));65  },66  duplicate_variable: (token) => {67    const context = [token.text, token.line, token.column];68    return new SyntaxError(LocalizedStrings.getError("duplicate_variable", context));69  }...state.spec.js
Source:state.spec.js  
...5afterEach(() => createCompiler.teardown());6it('should have correct state before and after a successful run', async () => {7    const compiler = createCompiler(configBasic);8    expect(compiler.isCompiling()).toBe(false);9    expect(compiler.getError()).toBe(null);10    expect(compiler.getCompilation()).toBe(null);11    const compilation = await compiler.run();12    expect(compilation).toBeDefined();13    expect(compiler.isCompiling()).toBe(false);14    expect(compiler.getError()).toBe(null);15    expect(compiler.getCompilation()).toBe(compilation);16});17it('should have correct state before and after a failed run', async () => {18    const compiler = createCompiler(configSyntaxError);19    expect.assertions(7);20    expect(compiler.isCompiling()).toBe(false);21    expect(compiler.getError()).toBe(null);22    expect(compiler.getCompilation()).toBe(null);23    try {24        await compiler.run();25    } catch (err) {26        expect(err).toBeDefined();27        expect(compiler.isCompiling()).toBe(false);28        expect(compiler.getError()).toBe(err);29        expect(compiler.getCompilation()).toBe(null);30    }31});32it('should have correct state before and after a successful watch run', (done) => {33    const compiler = createCompiler(configBasic);34    expect(compiler.isCompiling()).toBe(false);35    expect(compiler.getError()).toBe(null);36    expect(compiler.getCompilation()).toBe(null);37    compiler.watch((err, compilation) => {38        expect(err).toBe(null);39        expect(compilation).toBeDefined();40        expect(compiler.isCompiling()).toBe(false);41        expect(compiler.getError()).toBe(err);42        expect(compiler.getCompilation()).toBe(compilation);43        done();44    });45    expect(compiler.isCompiling()).toBe(true); // Takes some time to start compiling46    expect(compiler.getError()).toBe(null);47    expect(compiler.getCompilation()).toBe(null);48});49it('should have correct state before and after a failed watch run', (done) => {50    const compiler = createCompiler(configSyntaxError);51    expect(compiler.isCompiling()).toBe(false);52    expect(compiler.getError()).toBe(null);53    expect(compiler.getCompilation()).toBe(null);54    compiler.watch((err, compilation) => {55        expect(err).toBeDefined();56        expect(compilation).toBe(null);57        expect(compiler.isCompiling()).toBe(false);58        expect(compiler.getError()).toBe(err);59        expect(compiler.getCompilation()).toBe(null);60        done();61    });62    expect(compiler.isCompiling()).toBe(true); // Takes some time to start compiling63    expect(compiler.getError()).toBe(null);64    expect(compiler.getCompilation()).toBe(null);...z_entity.get.js
Source:z_entity.get.js  
1// Load libraries2var _ = require( 'underscore' );3var util = require( 'util' );4var CS = require( '../core' );5// Use a child logger6var log = CS.log.child( { component: 'Get API' } );7// Generate custom error `GetError` that inherits8// from `APIError`9var APIError = require( './error' );10var GetError = function( id, message, status ) {11  /* jshint camelcase: false */12  GetError.super_.call( this, id, message, status );13};14util.inherits( GetError, APIError );15GetError.prototype.name = 'GetError';16// Custom error IDs17GetError.BAD_ID = 'BAD_ID';18GetError.BAD_ENTITY_NAME = 'BAD_ENTITY_NAME';19GetError.BAD_ENTITY_PROPERTY = 'BAD_ENTITY_PROPERTY';20GetError.OBJECT_NOT_FOUND = 'OBJECT_NOT_FOUND';21// API object returned by the file22// -----23var API = {24  // The API endpoint. The final endpoint will be:25  //    /api/**endpointUrl**26  url: ':entity/:property?',27  // The API method to implement.28  method: 'GET'29};30// API core function logic. If this function is executed then each check is passed.31API.logic = function getApi( req, res, next ) {32  var entity = req.params.entity;33  entity = entity==='performer'? 'user' : entity;34  var property = req.params.property;35  log.trace( 'Getting %s for %s ', property || 'all properties', entity );36  // Get the model based on the `entity` parameter.37  var model = CS.models[ entity ];38  if( _.isUndefined( model ) )39    return next( new GetError( GetError.BAD_ENTITY_NAME, 'Unable to retrieve the entity "'+entity+'"', APIError.BAD_REQUEST ) );40  if( !_.isUndefined( property ) ) {41    var pathInfo = model.schema.path( property );42    var pathType = model.schema.pathType( property );43    if( _.isUndefined( pathInfo ) && pathType!=='nested' )44      return next( new GetError( GetError.BAD_ENTITY_PROPERTY, 'The entity "'+entity+'" has no "'+property+'" property', APIError.BAD_REQUEST ) );45  }46  var entityId = req.query[ entity ];47  if( _.isUndefined( entityId ) )48    return next( new GetError( GetError.BAD_ID, 'You must specify a "'+entity+'" query parameter', APIError.BAD_REQUEST ) );49  var query = model.findById( entityId );50  if( property )51    query.select( property );52  req.queryObject = query;53  return next();54};55// Export the API object...Using AI Code Generation
1var assert = require('assert');2var sinon = require('sinon');3var foo = {setBar: function(value) { this.bar = value; }};4var bar = {setFoo: function(value) { this.foo = value; }};5var stub = sinon.stub(foo, "setBar");6stub.withArgs(123).throws("TypeError");7stub.withArgs("aaa").returns(42);8try {9  foo.setBar(123);10} catch(e) {11  console.log(e);12}13console.log(foo.setBar("aaa"));14console.log(stub.getCall(0).args);15console.log(stub.getCall(1).args);16console.log(stub.getCall(0).exception);17console.log(stub.getCall(1).returnValue);18var assert = require('assert');19var sinon = require('sinon');20var foo = {setBar: function(value) { this.bar = value; }};21var bar = {setFoo: function(value) { this.foo = value; }};22var stub = sinon.stub(foo, "setBar");23stub.withArgs(123).throws("TypeError");24stub.withArgs("aaa").returns(42);25try {26  foo.setBar(123);27} catch(e) {28  console.log(e);29}30console.log(foo.setBar("aaa"));31console.log(stub.getCall(0).args);32console.log(stub.getCall(1).args);33console.log(stub.getCall(0).exception);34console.log(stub.getCall(1).returnValue);Using AI Code Generation
1var sinon = require('sinon');2var sinonChai = require('sinon-chai');3var chai = require('chai');4chai.use(sinonChai);5var expect = chai.expect;6describe('test', function () {7    var testObj = {8        testMethod: function () {9            throw new Error('test error');10        }11    };12    it('test', function () {13        var spy = sinon.spy(testObj, 'testMethod');14        try {15            testObj.testMethod();16        }17        catch (e) {18            var error = spy.getCall(0).exception;19            expect(error.message).to.equal('test error');20        }21    });22});Using AI Code Generation
1var sinon = require('sinon');2var assert = require('assert');3var myObj = {4    myMethod: function (callback) {5        callback("Error");6    }7};8var spy = sinon.spy(myObj, "myMethod");9myObj.myMethod(function (err) {10    assert.equal("Error", err);11});12console.log(spy.getCall(0).args[0] === spy.getCall(Using AI Code Generation
1var sinon = require('sinon');2var assert = require('assert');3var myModule = require('./myModule');4var myModuleStub = sinon.stub(myModule, 'myMethod');5var myModuleError = new Error('my error');6myModuleStub.yields(myModuleError);7var callback = sinon.spy();8myModule.myMethod('foo', callback);9assert(callback.calledWith(myModuleError));10myModuleStub.restore();11var sinon = require('sinon');12var assert = require('assert');13var myModule = require('./myModule');14var myModuleStub = sinon.stub(myModule, 'myMethod');15var myModuleError = new Error('my error');16myModuleStub.yields(myModuleError);17var callback = sinon.spy();18myModule.myMethod('foo', callback);19assert(callback.calledWith(sinon.match.same(myModuleError)));20myModuleStub.restore();Using AI Code Generation
1var sinon = require('sinon');2var myObj = {3    myMethod : function() {4        return "Hello World";5    }6};7var spy = sinon.spy(myObj, "myMethod");8myObj.myMethod();9var error = spy.getCall(0).exception;10console.log(error);11var expect = require('chai').expect;12var sinon = require('sinon');13var myObj = {14    myMethod : function() {15        return "Hello World";16    }17};18var spy = sinon.spy(myObj, "myMethod");19expect(myObj.myMethod()).to.be.equal("Hello World");20var error = spy.getCall(0).exception;21console.log(error);22var expect = require('chai').expect;23var sinon = require('sinon');24var myObj = {25    myMethod : function() {26        return "Hello World";27    }28};29var spy = sinon.spy(myObj, "myMethod");30expect(myObj.myMethod()).to.be.equal("Hello World");31var error = spy.getCall(0).exception;32console.log(error);33var expect = require('chai').expect;34var sinon = require('sinon');35var myObj = {36    myMethod : function() {37        return "Hello World";38    }39};40var spy = sinon.spy(myObj, "myMethod");41expect(myObj.myMethod()).to.be.equal("Hello World");42var error = spy.getCall(0).exception;43console.log(error);44var expect = require('chai').expect;45var sinon = require('sinon');46var myObj = {47    myMethod : function() {48        return "Hello World";49    }50};51var spy = sinon.spy(myObj, "myMethod");52expect(myObj.myMethod()).to.be.equal("Hello World");53var error = spy.getCall(0).exception;54console.log(error);55var expect = require('chai').expect;56var sinon = require('sinon');57var myObj = {58    myMethod : function() {59        return "Hello World";60    }61};Using AI Code Generation
1var sinon = require('sinon');2var assert = require('assert');3var request = require('request');4var fs = require('fs');5describe('Test', function() {6    it('should call callback with error', function(done) {7        var stub = sinon.stub(request, 'get').yields('Error');8        var callback = sinon.spy();9        assert(callback.calledWith('Error'));10        stub.restore();11        done();12    });13});14I am using sinon to test my node js code. I am using sinon.stub() to stub a function. But I am not able to assert that the stubbed function is called. I am using sinon.assert.calledOnce() and sinon.assert.calledWith() to assert but it is not working. I am getting error that the stubbed function is not called. Can anyone help me with this?15var sinon = require('sinon');16var assert = require('assert');17var request = require('request');18var fs = require('fs');19describe('Test', function() {20    it('should call callback with error', function(done) {21        var stub = sinon.stub(request, 'get').yields('Error');22        var callback = sinon.spy();23        assert(callback.calledWith('Error'));24        assert(stub.calledOnce);25        stub.restore();26        done();27    });28});29I am using sinon to test my node js code. I am using sinon.stub() to stub a function. But I am not able to assert that the stubbed function is called. I am using sinon.assert.calledOnce() and sinon.assert.calledWith() to assert but it is not working. I am getting error that the stubbed function is not called. Can anyone help me with this?30var sinon = require('sinon');31var assert = require('assert');32var request = require('request');33var fs = require('fs');34describe('Test', function() {35    it('should call callback with error', function(done) {36        var stub = sinon.stub(request, 'get').yields('Error');37        var callback = sinon.spy();38        assert(callback.calledWith('Error'));39        assert(stub.calledOnce);40        stub.restore();41        done();42    });43});Using AI Code Generation
1var stub = sinon.stub(object, 'method');2stub.withArgs('foo').returns('bar');3stub.withArgs('bar').returns('foo');4stub.withArgs('baz').returns('baz');5stub.withArgs('qux').throws('qux');6stub.withArgs('quux').throws('quux');7var spy = sinon.spy(function() {8  if (spy.callCount === 1) {9    return 'foo';10  }11  if (spy.callCount === 2) {12    return 'bar';13  }14  if (spy.callCount === 3) {15    return 'baz';16  }17  if (spy.callCount === 4) {18    throw 'qux';19  }20  if (spy.callCount === 5) {21    throw 'quux';22  }23});24var mock = sinon.mock();25mock.expects('foo').returns('bar');26mock.expects('bar').returns('foo');27mock.expects('baz').returns('baz');28mock.expects('qux').throws('qux');29mock.expects('quux').throws('quux');30var server = sinon.fakeServer.create();31server.respondWith('GET', '/foo', [200, { 'Content-Type': 'text/plain' }, 'bar']);32server.respondWith('GET', '/bar', [200, { 'Content-Type': 'text/plain' }, 'foo']);33server.respondWith('GET', '/baz', [200, { 'Content-Type': 'text/plain' }, 'baz']);34server.respondWith('GET', '/qux', [200, { 'Content-Type': 'text/plain' }, 'qux']);Using AI Code Generation
1const sinon = require('sinon');2const expect = require('chai').expect;3const fetch = require('node-fetch');4describe('Test fetch', () => {5    it('should return an error', async () => {6        const json = await response.json();7        expect(json).to.be.an('object');8    });9});Using AI Code Generation
1var sinon = require('sinon');2var assert = require('assert');3function test(){4    var stub = sinon.stub();5    stub.throws();6    stub();7    assert.equal(stub.getError().message, "TypeError: undefined is not a function");8}9test();10var sinon = require('sinon');11var assert = require('assert');12function test(){13    var stub = sinon.stub();14    stub.throws();15    stub();16    assert.equal(stub.getError().message, "TypeError: undefined is not a function");17}18test();19function test(){20    var stub = sinon.stub();21    stub.throws();22    stub();23    assert.equal(stub.getError().message, "TypeError: undefined is not a function");24}25function test(){26    var stub = sinon.stub();27    stub.throws();28    stub();29    assert.equal(stub.getError().message, "TypeError: undefined is not a function");30}31var sinon = require('sinon');32var assert = require('assert');33function test(){34    var stub = sinon.stub();35    stub.throws();36    stub();37    assert.equal(stub.getError().message, "TypeError: undefined is not a function");38}39test();40var sinon = require('sinon');41var assert = require('assert');42function test(){43    var stub = sinon.stub();44    stub.throws();45    stub();46    assert.equal(stub.getError().message, "TypeError: undefined is not a function");47}48test();49var sinon = require('sinon');Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
