读取邮件

back_recharge
gaojie 2019-01-24 17:20:07 +08:00
parent 9b40fd7e62
commit a5967b2ff1
12 changed files with 229 additions and 46 deletions

View File

@ -10,5 +10,6 @@ public interface GlobalItemType {
int GEM = 3; // 钻石Id(充值获得)
int ITEM = 10; //道具
int CARD = 11; // 卡牌
int EQUIP = 12; //装备
}

View File

@ -0,0 +1,37 @@
package com.ljsd.jieling.handler;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.MailUtil;
import com.ljsd.jieling.util.MessageUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class ReadMailHandler extends BaseHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(ReadMailHandler.class);
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.GET_ALL_MAIL_INFO_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
int userId = netData.getUserId();
int token = netData.getToken();
int msgId = netData.getMsgId();
int msgIndex = netData.getIndex();
byte[] message = netData.parseClientProtoNetData();
LOGGER.info("processMessage->uid={},token={},msgId={},msgIndex={}",
userId, token,msgId,msgIndex);
PlayerInfoProto.MailReadRequest mailReadRequest = PlayerInfoProto.MailReadRequest.parseFrom(message);
String mailId = mailReadRequest.getMailId();
MailUtil.getInstance().readMail(iSession,mailId);
}
}

View File

@ -0,0 +1,49 @@
package com.ljsd.jieling.handler;
import com.ljsd.jieling.netty.cocdex.PacketNetData;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.PlayerInfoProto;
import com.ljsd.jieling.util.MailUtil;
import com.ljsd.jieling.util.MessageUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class TakeMailHandler extends BaseHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(TakeMailHandler.class);
@Override
public MessageTypeProto.MessageType getMessageCode() {
return MessageTypeProto.MessageType.MAIL_TAKE_MAIL_ITEM_REQUEST;
}
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
int userId = netData.getUserId();
int token = netData.getToken();
int msgId = netData.getMsgId();
int msgIndex = netData.getIndex();
byte[] message = netData.parseClientProtoNetData();
LOGGER.info("processMessage->uid={},token={},msgId={},msgIndex={}",
userId, token,msgId,msgIndex);
PlayerInfoProto.TakeMailRequest takeMailRequest = PlayerInfoProto.TakeMailRequest.parseFrom(message);
List<String> mailIdsList = takeMailRequest.getMailIdsList();
CommonProto.Drop.Builder dropBuilder = MailUtil.getInstance().takeMail(mailIdsList, userId);
PlayerInfoProto.TakeMailResponse takeMailResponse = PlayerInfoProto.TakeMailResponse.newBuilder()
.setDrop(dropBuilder)
.buildPartial();
try {
MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.MAIL_TAKE_MAIL_ITEM_RESPONESE_VALUE,takeMailResponse , true);
LOGGER.info("back to client!");
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -11,6 +11,9 @@ public class AutoIncrement extends MongoBase {
private int cnt;
public AutoIncrement(){
}
public void setCnt(int cnt) throws Exception {
updateString("cnt", cnt);
this.cnt = cnt;

View File

@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.dao;
import com.ljsd.common.mogodb.MongoBase;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.util.KeyGenUtils;
import com.ljsd.jieling.util.UUIDEnum;
@ -25,10 +26,13 @@ public class Mail extends MongoBase {
private String sendName;//发送者名字
private int mailType; //邮件类型 1:系统邮件 2:idip 业务邮件
public Mail(){
}
public Mail(int uid,String head,String content,String mailItem,int sendTime,int effectiveTime,String sendName,int mailType){
this.id = KeyGenUtils.produceIdByModule(UUIDEnum.MAIL, String.valueOf(uid));
this.roleUid = uid;
this.state = Global.MAIL_STATE_NEW;
this.head = head;
this.content = content;
this.mailItem = mailItem;

View File

@ -5,10 +5,11 @@ import com.ljsd.common.mogodb.MongoRoot;
public class MailingSystem extends MongoRoot {
public static final String _COLLECTION_NAME = "mailingSystem";
private static LjsdMongoTemplate _myMongoDBPool;
private static SystemMailManager systemMailManager;
private static SysMailManager sysMailManager;
private static AutoIncrementManager cAutoIncrementManager;
private SystemMailManager systemMailManager;
private SysMailManager sysMailManager;
private AutoIncrementManager cAutoIncrementManager;
@Override
public String getCollection() {
return _COLLECTION_NAME;

View File

@ -26,7 +26,9 @@ public class MailingSystemManager {
mailingSystem = new MailingSystem();
addMailingSystem(mailingSystem);
int nowTime = (int)(TimeUtils.now()/1000);
MailUtil.getInstance().sendSystemMail("开服邮件",new ArrayList<>(),"DSKGSD",nowTime,"1#5000|2#100",30*24*60*60,"IDIP");
mailingSystem.getSysMailManager().addSystemMail(new SysMail(1));
MailingSystemManager.ljsdMongoTemplate.lastUpdate();
MailUtil.getInstance().sendSystemMail("开服邮件",new ArrayList<>(),"DSKGSD",nowTime,"1#5000|2#100",30*24*60*60,"IDIP",0,"0");
}
}

View File

@ -7,21 +7,18 @@ import java.util.concurrent.CopyOnWriteArrayList;
public class SysMail extends MongoBase {
private String id ;
private int roleUid; //所属玩家的UID
private List<Integer> sysMailIds ; //领取过的系统邮件id
public SysMail(){
}
public void setSysMailIds(List<Integer> sysMailIds) throws Exception {
updateString("sysMailIds", sysMailIds);
this.sysMailIds = sysMailIds;
}
public String getId() {
return id;
}
public int getRoleUid() {
return roleUid;
}

View File

@ -31,7 +31,12 @@ public class SystemMail extends MongoBase {
*/
private String version;
public SystemMail(int id,String title,List<Integer> userList,String content,int sendTime, String reward,int effectiveTime,String name){
public SystemMail(){
}
public SystemMail(int id,String title,List<Integer> userList,String content,int sendTime, String reward,
int effectiveTime,String name,long registerEndTime,String version){
this.id = id;
this.title = title;
this.userList = userList;
@ -40,6 +45,8 @@ public class SystemMail extends MongoBase {
this.reward = reward;
this.effectiveTime = effectiveTime;
this.name = name;
this.registerEndTime = registerEndTime;
this.version = version;
}
public int getId() {
return id;

View File

@ -29,7 +29,7 @@ public class UserManager {
public static User getUserForLogin(int uid) throws Exception {
User user = userMap.get(uid);
if (user == null) {
if (user != null) {
user = ljsdMongoTemplate.findById(User.getCollectionName(), Integer.toString(uid), User.class);
}
if (user == null) {

View File

@ -15,23 +15,43 @@ import java.util.concurrent.CopyOnWriteArrayList;
public class ItemUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(ItemUtil.class);
//掉落
public static CommonProto.Drop.Builder drop(User user, int dropGroupId,float dropRatio) throws Exception {
public static CommonProto.Drop.Builder drop(User user, int[][] itemArr) throws Exception {
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId);
if (sRewardGroup == null){
return dropBuilder;
}
Map<Integer, Integer> itemMap = new HashMap<>();
Map<Integer, Integer> cardMap = new HashMap<>();
Map<Integer,Integer> equipMap = new HashMap<>();
selectItemArr(itemArr,cardMap,itemMap,equipMap);
selectDrop(sRewardGroup,itemMap,cardMap,dropRatio);
addItem(user,itemMap,dropBuilder);
addCard(user,cardMap,dropBuilder);
addEquip(user,equipMap,dropBuilder);
return dropBuilder;
}
private static void selectItemArr(int[][] itemArr, Map<Integer, Integer> cardMap, Map<Integer, Integer> itemMap,Map<Integer,Integer> equipMap) {
for (int[] items : itemArr){
getMap(items[0],items[1], itemMap, cardMap,equipMap,1);
}
}
//掉落
public static CommonProto.Drop.Builder drop(User user, int[] dropGroupIds,float dropRatio) throws Exception {
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
Map<Integer, Integer> itemMap = new HashMap<>();
Map<Integer, Integer> cardMap = new HashMap<>();
Map<Integer, Integer> equipMap = new HashMap<>();
for (int dropGroupId :dropGroupIds){
SRewardGroup sRewardGroup = SRewardGroup.getsRewardItemMap().get(dropGroupId);
if (sRewardGroup == null){
continue;
}
selectDrop(sRewardGroup,itemMap,cardMap,equipMap,dropRatio);
}
addItem(user,itemMap,dropBuilder);
addCard(user,cardMap,dropBuilder);
return dropBuilder;
}
private static void selectDrop(SRewardGroup sRewardGroup,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,float dropRatio) {
private static void selectDrop(SRewardGroup sRewardGroup,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
int[] rewardItem = sRewardGroup.getRewardItem();
StringBuilder rewardStr = new StringBuilder();
StringBuilder weight = new StringBuilder();
@ -53,20 +73,23 @@ public class ItemUtil {
}
switch (sRewardGroup.getIsUpset()) {
case GlobalItemType.ALL_DROP:
getMap(rewardStr.toString().split("#"),itemMap,cardMap,dropRatio);
getMap(StringUtil.parseFiledInt(rewardStr.toString()),itemMap,cardMap,equipMap,dropRatio);
break;
case GlobalItemType.WEIGHT_DROP:
getRandomMap(sRewardGroup.getRewardMaxNum(),rewardStr.toString().split("#"),weight.toString().split("#"),itemMap,cardMap,dropRatio);
getRandomMap(sRewardGroup.getRewardMaxNum(),rewardStr.toString().split("#"),weight.toString().split("#"),
itemMap,equipMap,cardMap,dropRatio);
break;
case GlobalItemType.SUCCESSIVELY_RANDOM:
getSuccessivelyRandmoMap(sRewardGroup,rewardStr.toString().split("#"),weight.toString().split("#"),itemMap,cardMap,dropRatio);
getSuccessivelyRandmoMap(sRewardGroup,rewardStr.toString().split("#"),weight.toString().split("#"),
itemMap,cardMap,equipMap,dropRatio);
break;
default:
break;
}
}
private static void getSuccessivelyRandmoMap(SRewardGroup sRewardGroup,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,float dropRatio) {
private static void getSuccessivelyRandmoMap(SRewardGroup sRewardGroup,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap,
Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
for (int i = 0 ; i < sRewardGroup.getRewardMaxNum();i++){
int itemId = 0;
for (int j = 0 ; j < sRewardGroup.getLoop();i++){
@ -81,28 +104,31 @@ public class ItemUtil {
itemId = Integer.parseInt(rewardArr[index]);
}
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId);
getMap(itemId,itemMap, cardMap, sRewardItem,dropRatio);
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax());
getMap(itemId,itemNum ,itemMap, cardMap,equipMap,dropRatio);
}
}
private static void getRandomMap(int randomItemNum ,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,float dropRatio) {
private static void getRandomMap(int randomItemNum ,String[] rewardArr,String[] weightArr, Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,
Map<Integer,Integer> equipMap,float dropRatio) {
for (int i = 0 ; i < randomItemNum;i++){
int index = MathUtils.randomForStrArray(weightArr);
int itemId = Integer.parseInt(rewardArr[index]);
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId);
getMap(itemId,itemMap, cardMap, sRewardItem,dropRatio);
}
}
private static void getMap(String[] itemInfo, Map<Integer, Integer> itemMap,Map<Integer, Integer> cardMap,float dropRatio) {
for (String itemId :itemInfo){
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(Integer.parseInt(itemId));
getMap(Integer.parseInt(itemId),itemMap, cardMap, sRewardItem,dropRatio);
}
}
private static void getMap(int itemId ,Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap, SRewardItem sRewardItem,float dropRatio) {
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax());
getMap(itemId,itemNum, itemMap, cardMap,equipMap,dropRatio);
}
}
private static void getMap(int[] itemInfo, Map<Integer, Integer> itemMap,Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
for (int itemId :itemInfo){
SRewardItem sRewardItem = SRewardItem.getsDropMap().get(itemId);
int itemNum = MathUtils.random(sRewardItem.getRandomMin(), sRewardItem.getRandomMax());
getMap(itemId,itemNum,itemMap, cardMap,equipMap,dropRatio);
}
}
private static void getMap(int itemId ,int itemNum, Map<Integer, Integer> itemMap, Map<Integer, Integer> cardMap,Map<Integer,Integer> equipMap,float dropRatio) {
SItem sItem = SItem.getsItemMap().get(itemId);
switch (sItem.getItemType()) {
case GlobalItemType.ITEM:
@ -111,6 +137,9 @@ public class ItemUtil {
case GlobalItemType.CARD:
putcountMap(itemId, itemNum, cardMap);
break;
case GlobalItemType.EQUIP:
putcountMap(itemId, itemNum, cardMap);
break;
default:
break;
}
@ -183,6 +212,32 @@ public class ItemUtil {
return itemList;
}
/**
*
* @param user
* @param equipMap
* @param dropBuilder
*/
private static void addEquip(User user, Map<Integer, Integer> equipMap, CommonProto.Drop.Builder dropBuilder) {
List<CommonProto.Equip> equipList = new CopyOnWriteArrayList<>();
for (Map.Entry<Integer, Integer> entry : equipMap.entrySet()) {
int count = entry.getValue();
for (int i = 0; i < count; i++) {
addEquip(user,entry.getKey(),equipList);
}
}
dropBuilder.addAllEquipId(equipList);
}
private static void addEquip(User user,int equipId ,List<CommonProto.Equip> equipList) {
}
/**
*
* @param user
* @param cardMap
* @param dropBuilder
* @throws Exception
*/
public static void addCard(User user,Map<Integer,Integer> cardMap,CommonProto.Drop.Builder dropBuilder) throws Exception {
List<CommonProto.Hero> heroList = new CopyOnWriteArrayList<>();
for (Map.Entry<Integer, Integer> entry : cardMap.entrySet()) {

View File

@ -2,7 +2,9 @@ package com.ljsd.jieling.util;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.dao.*;
import com.ljsd.jieling.network.session.ISession;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -133,25 +135,50 @@ public class MailUtil {
}
}
// 读取邮件
public void readMail(ISession iSession, String mailId) throws Exception {
int msgId = MessageTypeProto.MessageType.GET_ALL_MAIL_INFO_RESPONSE_VALUE;
int uid = iSession.getUid();
User user = UserManager.getUser(uid);
MailManager mailManager = user.getMailManager();
Mail mail = mailManager.getMailMap().get(mailId);
if (mail == null){
MessageUtil.sendErrorResponse(iSession,0,msgId,"");
}
mail.setState(Global.MAIL_STATE_READ);
mailManager.addMail(mail);
MessageUtil.sendMessage(iSession, 1,msgId, null, true);
}
//领取附件
public CommonProto.Drop.Builder takeMail(List<String> mailIdsList, int userId) throws Exception {
CommonProto.Drop.Builder dropBuilder = CommonProto.Drop.newBuilder();
User user = UserManager.getUser(userId);
MailManager mailManager = user.getMailManager();
for (String mailId : mailIdsList){
Mail mail = mailManager.getMail(mailId);
if (mail == null){
continue;
}
String mailItem = mail.getMailItem();
int[][] itemArr = StringUtil.parseFiledInt2(mailItem);
dropBuilder = ItemUtil.drop(user, itemArr);
}
return dropBuilder;
}
/**
*
* @param title
* @param userList
* @param content
* @param sendTime
* @param reward
* @param effectiveTime
* @param sendName
* @throws Exception
*/
public void sendSystemMail(String title,List<Integer> userList,String content,int sendTime, String reward,int effectiveTime,String sendName) throws Exception {
public void sendSystemMail(String title,List<Integer> userList,String content,int sendTime, String reward,
int effectiveTime,String sendName,long registerEndTime,String version) throws Exception {
MailingSystem mailingSystem = MailingSystemManager.getMailingSystem();
String name = mailingSystem.getSystemMailManager().getName();
AutoIncrementManager autoIncrementManager = mailingSystem.getcAutoIncrementManager();
autoIncrementManager.addAutoIncrement(new AutoIncrement(name));
SystemMailManager systemMailManager = mailingSystem.getSystemMailManager();
int id = getSystemMailId(autoIncrementManager,name);
systemMailManager.addSystemMail(new SystemMail(id,title,userList,content,sendTime,reward,effectiveTime,sendName));
systemMailManager.addSystemMail(new SystemMail(id,title,userList,content,sendTime,reward,effectiveTime,sendName,registerEndTime,version));
MailingSystemManager.ljsdMongoTemplate.lastUpdate();
}