back_recharge
wangyuan 2019-11-28 12:14:15 +08:00
parent 26016b3bf0
commit d30972da3c
14 changed files with 7699 additions and 5228 deletions

View File

@ -8,13 +8,11 @@ import com.ljsd.jieling.NetWorkFactory;
import com.ljsd.jieling.config.json.CoreSettings;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.logic.fight.CheckFight;
import com.ljsd.jieling.netty.config.EndPortCfg;
import com.ljsd.jieling.netty.server.NettyGameServer;
import com.ljsd.jieling.network.NettyProperties;
import com.ljsd.jieling.network.NettyServerAutoConfiguration;
import com.ljsd.jieling.network.server.ProtocolsManager;
import com.ljsd.jieling.session.GameSession;
import com.ljsd.jieling.network.server.SessionManager;
import com.ljsd.jieling.session.GameSessionFactory;
import com.ljsd.jieling.thrift.RPCSceneServerTask;
import com.ljsd.jieling.thrift.pool.ThriftPoolUtils;
@ -65,7 +63,6 @@ public class BattleServerApplication {
ThriftPoolUtils.getInstance().initContext();
new RPCSceneServerTask(configurableApplicationContext).start();
// 加载lua文件
CheckFight.getInstance().init("luafight/BattleMain.lua");
final NettyServerAutoConfiguration netServerConfig = configurableApplicationContext.getBean(NettyServerAutoConfiguration.class);
NettyProperties properties = netServerConfig.getNettyProperties();
register(properties);
@ -77,16 +74,10 @@ public class BattleServerApplication {
}));
try {
LOGGER.info("main->BattleServerApplication start...");
GameSessionFactory gameSessionFactory = () -> new ISession();
// nettyServer = new NettyGameServer(properties.getTcpPort(), properties.getReadTimeout(),
// properties.getWriteTimeout(), properties.getAllTimeout(),BloodyProtocolsManager.getInstance(),
// gameSessionFactory);
nettyServer = NetWorkFactory.getServer(new EndPortCfg(properties.getTcpPort(), properties.getReadTimeout(),
properties.getWriteTimeout(), properties.getAllTimeout()), ProtocolsManager.getInstance(),
gameSessionFactory);
properties.getWriteTimeout(), properties.getAllTimeout()), SessionManager.getInstance());
nettyServer.start();
} catch (Exception e) {
LOGGER.error("main->msg={}", e.getMessage(), e);
}

View File

@ -12,12 +12,12 @@ import com.ljsd.battle.util.HeroLogic;
import com.ljsd.battle.vo.FamilyHeroInfo;
import com.ljsd.battle.vo.HeroAttributeEnum;
import com.ljsd.battle.vo.UserBloodySnpInfo;
import com.ljsd.fight.CheckFight;
import com.ljsd.fight.FightType;
import config.*;
import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.handler.map.behavior.BehaviorUtil;
import com.ljsd.jieling.logic.fight.CheckFight;
import com.ljsd.jieling.logic.fight.CombatLogic;
import com.ljsd.jieling.logic.fight.FightType;
import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.util.FightDataUtil;
import com.ljsd.jieling.util.MonsterUtil;

View File

@ -1706,6 +1706,24 @@ public final class ArenaInfoProto {
* </pre>
*/
com.ljsd.jieling.protocols.CommonProto.FightDataOrBuilder getFightDataOrBuilder();
// optional int32 fightResult = 5;
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
boolean hasFightResult();
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
int getFightResult();
}
/**
* Protobuf type {@code com.ljsd.jieling.protocols.ArenaChallengeResponse}
@ -1789,6 +1807,11 @@ public final class ArenaInfoProto {
bitField0_ |= 0x00000004;
break;
}
case 40: {
bitField0_ |= 0x00000008;
fightResult_ = input.readInt32();
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
@ -1970,11 +1993,36 @@ public final class ArenaInfoProto {
return fightData_;
}
// optional int32 fightResult = 5;
public static final int FIGHTRESULT_FIELD_NUMBER = 5;
private int fightResult_;
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
public boolean hasFightResult() {
return ((bitField0_ & 0x00000008) == 0x00000008);
}
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
public int getFightResult() {
return fightResult_;
}
private void initFields() {
myScoreChange_ = 0;
defScoreChange_ = 0;
arenaEnemys_ = java.util.Collections.emptyList();
fightData_ = com.ljsd.jieling.protocols.CommonProto.FightData.getDefaultInstance();
fightResult_ = 0;
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@ -2000,6 +2048,9 @@ public final class ArenaInfoProto {
if (((bitField0_ & 0x00000004) == 0x00000004)) {
output.writeMessage(4, fightData_);
}
if (((bitField0_ & 0x00000008) == 0x00000008)) {
output.writeInt32(5, fightResult_);
}
getUnknownFields().writeTo(output);
}
@ -2025,6 +2076,10 @@ public final class ArenaInfoProto {
size += com.google.protobuf.CodedOutputStream
.computeMessageSize(4, fightData_);
}
if (((bitField0_ & 0x00000008) == 0x00000008)) {
size += com.google.protobuf.CodedOutputStream
.computeInt32Size(5, fightResult_);
}
size += getUnknownFields().getSerializedSize();
memoizedSerializedSize = size;
return size;
@ -2159,6 +2214,8 @@ public final class ArenaInfoProto {
fightDataBuilder_.clear();
}
bitField0_ = (bitField0_ & ~0x00000008);
fightResult_ = 0;
bitField0_ = (bitField0_ & ~0x00000010);
return this;
}
@ -2212,6 +2269,10 @@ public final class ArenaInfoProto {
} else {
result.fightData_ = fightDataBuilder_.build();
}
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
to_bitField0_ |= 0x00000008;
}
result.fightResult_ = fightResult_;
result.bitField0_ = to_bitField0_;
onBuilt();
return result;
@ -2263,6 +2324,9 @@ public final class ArenaInfoProto {
if (other.hasFightData()) {
mergeFightData(other.getFightData());
}
if (other.hasFightResult()) {
setFightResult(other.getFightResult());
}
this.mergeUnknownFields(other.getUnknownFields());
return this;
}
@ -2853,6 +2917,55 @@ public final class ArenaInfoProto {
return fightDataBuilder_;
}
// optional int32 fightResult = 5;
private int fightResult_ ;
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
public boolean hasFightResult() {
return ((bitField0_ & 0x00000010) == 0x00000010);
}
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
public int getFightResult() {
return fightResult_;
}
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
public Builder setFightResult(int value) {
bitField0_ |= 0x00000010;
fightResult_ = value;
onChanged();
return this;
}
/**
* <code>optional int32 fightResult = 5;</code>
*
* <pre>
*
* </pre>
*/
public Builder clearFightResult() {
bitField0_ = (bitField0_ & ~0x00000010);
fightResult_ = 0;
onChanged();
return this;
}
// @@protoc_insertion_point(builder_scope:com.ljsd.jieling.protocols.ArenaChallengeResponse)
}
@ -6443,23 +6556,24 @@ public final class ArenaInfoProto {
"jsd.jieling.protocols.ArenaInfo\"\'\n\027GetAr" +
"enaRankInfoRequest\022\014\n\004page\030\001 \001(\005\"P\n\025Aren" +
"aChallengeRequest\022\016\n\006teamId\030\001 \001(\005\022\024\n\014cha" +
"llengeUid\030\002 \001(\005\022\021\n\tskipFight\030\003 \001(\005\"\276\001\n\026A" +
"llengeUid\030\002 \001(\005\022\021\n\tskipFight\030\003 \001(\005\"\323\001\n\026A" +
"renaChallengeResponse\022\025\n\rmyScoreChange\030\001" +
" \001(\005\022\026\n\016defScoreChange\030\002 \001(\005\022;\n\013arenaEne" +
"mys\030\003 \003(\0132&.com.ljsd.jieling.protocols.A",
"renaEnemy\0228\n\tfightData\030\004 \001(\0132%.com.ljsd." +
"jieling.protocols.FightData\"v\n\030GetArenaR" +
"ankInfoResponse\0229\n\trankInfos\030\001 \003(\0132&.com" +
".ljsd.jieling.protocols.ArenaEnemy\022\017\n\007my" +
"score\030\002 \001(\005\022\016\n\006myRank\030\003 \001(\005\"R\n\023ArenaRand" +
"omResponse\022;\n\013arenaEnemys\030\001 \003(\0132&.com.lj" +
"sd.jieling.protocols.ArenaEnemy\"_\n\027Arena" +
"RecordInfoResponse\022D\n\017arenaRecordInfo\030\001 " +
"\003(\0132+.com.ljsd.jieling.protocols.ArenaRe" +
"cordInfo\";\n\021PlayWithSbRequest\022\024\n\014challen",
"geUid\030\001 \001(\005\022\020\n\010myteamId\030\002 \001(\005\"N\n\022PlayWit" +
"hSbResponse\0228\n\tfightData\030\001 \001(\0132%.com.ljs" +
"d.jieling.protocols.FightDataB\002H\001"
"jieling.protocols.FightData\022\023\n\013fightResu" +
"lt\030\005 \001(\005\"v\n\030GetArenaRankInfoResponse\0229\n\t" +
"rankInfos\030\001 \003(\0132&.com.ljsd.jieling.proto" +
"cols.ArenaEnemy\022\017\n\007myscore\030\002 \001(\005\022\016\n\006myRa" +
"nk\030\003 \001(\005\"R\n\023ArenaRandomResponse\022;\n\013arena" +
"Enemys\030\001 \003(\0132&.com.ljsd.jieling.protocol" +
"s.ArenaEnemy\"_\n\027ArenaRecordInfoResponse\022" +
"D\n\017arenaRecordInfo\030\001 \003(\0132+.com.ljsd.jiel" +
"ing.protocols.ArenaRecordInfo\";\n\021PlayWit",
"hSbRequest\022\024\n\014challengeUid\030\001 \001(\005\022\020\n\010myte" +
"amId\030\002 \001(\005\"N\n\022PlayWithSbResponse\0228\n\tfigh" +
"tData\030\001 \001(\0132%.com.ljsd.jieling.protocols" +
".FightDataB\002H\001"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@ -6489,7 +6603,7 @@ public final class ArenaInfoProto {
internal_static_com_ljsd_jieling_protocols_ArenaChallengeResponse_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_com_ljsd_jieling_protocols_ArenaChallengeResponse_descriptor,
new java.lang.String[] { "MyScoreChange", "DefScoreChange", "ArenaEnemys", "FightData", });
new java.lang.String[] { "MyScoreChange", "DefScoreChange", "ArenaEnemys", "FightData", "FightResult", });
internal_static_com_ljsd_jieling_protocols_GetArenaRankInfoResponse_descriptor =
getDescriptor().getMessageTypes().get(4);
internal_static_com_ljsd_jieling_protocols_GetArenaRankInfoResponse_fieldAccessorTable = new

View File

@ -6,6 +6,7 @@ import com.ljsd.battle.room.SceneManager;
import com.ljsd.battle.util.MessageUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ljsd.jieling.core.HandlerLogicThread;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
import com.ljsd.jieling.exception.ErrorCode;
@ -76,56 +77,17 @@ public class BloodyProtocolsManager implements ProtocolsAbstract {
handlers.put(handler.getMessageCode().getNumber(), handler);
}
@Override
public void processMessage(GameSession gameSession, Object obj) {
final ISession session = (ISession) gameSession;
PacketNetData packetNetData = new PacketNetData((byte[]) obj);
if (packetNetData.getMsgId()==1000){
dealHeartBeat(session);
return;
}
if (packetNetData.getMsgId()== MessageTypeProto.MessageType.ROOM_LOGIN_REQEUST_VALUE){
//初始化session
if (!sessionInit(session,packetNetData)){
MessageUtil.sendErrorCode(session,0,"您的账号token不正确请退出游戏重新登陆!");
return;
}
//刷新token
refreshToken(session);
//踢下线
//在线列表加入session
OnlineUserManager.userOnline(session.getUid(),session);
}
if(packetNetData.getMsgId() == MessageTypeProto.MessageType.ACK_INDICATION_REQUEST_VALUE){
ackIndication(session,packetNetData.getIndex());
return;
}
//处理心跳
if (packetNetData.getMsgId()==1000){
dealHeartBeat(session);
return;
}
if( packetNetData.getMsgId()== MessageTypeProto.MessageType.RECONNECT_REQUEST_VALUE){
processReconnect(session);
LOGGER.info("the uid={} process reconnect",session.getUid());
return;
}
LOGGER.info("request commond : " + packetNetData.getMsgId());
public void processMessage(PacketNetData packetNetData) {
BaseHandler baseHandler = handlers.get(packetNetData.getMsgId());
if (baseHandler == null) {
LOGGER.info("request unknow commond : " + packetNetData.getMsgId());
return;
} else {
addEntry(packetNetData);
addEntry(packetNetData);
}
}
public boolean addEntry(PacketNetData packetNetData) {
int userId = packetNetData.getUserId();
try {
@ -222,108 +184,6 @@ public class BloodyProtocolsManager implements ProtocolsAbstract {
}
@Override
public void offLine(GameSession gameSession) {
LOGGER.info("player offLine ...");
ISession session = (ISession) gameSession;
synchronized (session) {
if(session.getOfflineType() == ErrorCode.reloginCode){
return;
}
SceneManager.whenUserOffline(session.getUid());
if (session.getCtx() != null) {
GameMessageHandler.allChannels.remove(session.getCtx().channel());
}
if (session.getUid() == 0) {
LOGGER.error("offLine->uid={}", session.getUid());
return;
}
GameMessageHandler.currentSessions.remove(session.getUid());
try {
OnlineUserManager.userOffline(session.getUid());
ConcurrentHashMap<Integer, ISession.IndicationMsg> indexToIndication = session.getIndexToIndication();
if(!indexToIndication.isEmpty() ){
String key = RedisUtil.getInstence().getKey(RedisKey.INDICATION_OFFLINE_BLOODY, Integer.toString(session.getUid()));
RedisUtil.getInstence().set(key,gson.toJson(indexToIndication));
}
String key = RedisUtil.getInstence().getKey(RedisKey.RESPONSE_OFFLINE_BLOODY, Integer.toString(session.getUid()));
RedisUtil.getInstence().set(key,gson.toJson(session.getIndexToMessage()));
// 下线处理的逻辑需要添加在这里
} catch (Exception e) {
e.printStackTrace();
} finally {
//保证数据的保存
}
}
}
@Override
public void readIdel(GameSession gameSession) {
final ISession session = (ISession) gameSession;
readIdel(session);
}
private void readIdel(ISession iSession){
//对端口扫描直接关闭
if (iSession.getUid() == 0) {
iSession.close();
return;
}
String remoteAddress = "";
if (iSession.getCtx() != null && iSession.getCtx().channel() != null && iSession.getCtx().channel().remoteAddress() != null) {
remoteAddress = iSession.getCtx().channel().remoteAddress().toString();
}
LOGGER.error("readIdea->uid={},iSessionId={},HeartBreatNums={},remoteAddress={};not receieve heart breat",
iSession.getUid(), iSession.getId(), iSession.getHeartBreatNums(), remoteAddress);
int heartBreatNums = iSession.getHeartBreatNums();
heartBreatNums--;
if (heartBreatNums <= 0) {
if (!GameMessageHandler.currentSessions.containsKey(iSession.getUid())) {
iSession.close();
return;
}
ISession oldSession = OnlineUserManager.getSessionByUid(iSession.getUid());
if (iSession.getId().equals(oldSession.getId())) {
kickOldUser(iSession.getUid(), "", 000, "LOSE HEART PACKET!!!!", 0);
}
return;
}
iSession.setHeartBreatNums(heartBreatNums);
}
public boolean kickOldUser(int uid, String uToken, int errorCode, String errorMsg, long requestTime) {
if (GameMessageHandler.currentSessions.size() != 0 && GameMessageHandler.currentSessions.keySet().contains(uid)) {
if (requestTime != 0 && requestTime < GameMessageHandler.currentSessions.get(uid).getUserLoginTime()) {
LOGGER.info("kickOldUser->uid={},requestTime={},userLoginTime={}",
uid, requestTime, GameMessageHandler.currentSessions.get(uid).getUserLoginTime());
return false;
}
}
if (!OnlineUserManager.checkUidOnline(uid)) {
LOGGER.info("kickOldUser->uid={};isNotOnline", uid);
return false;
}
ISession oldSession = OnlineUserManager.getSessionByUid(uid);
if (oldSession == null) {
LOGGER.info("kickOldUser->uid={};oldSessionisNull", uid);
OnlineUserManager.userOffline(uid);
return false;
}
oldSession.setOfflineType(errorCode);
offLine(oldSession);
return true;
}
}

View File

@ -1,6 +1,8 @@
package com.ljsd.network.session;
import com.ljsd.jieling.netty.NettyGameSession;
import com.ljsd.jieling.netty.server.IChannel;
import com.ljsd.jieling.protocol.INetWorkHandler;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@ -51,14 +53,10 @@ public class ISession extends NettyGameSession {
private int heartBreatNums = 3;
public ISession() {
this.id = UUID.randomUUID().toString();
public ISession(IChannel channel, INetWorkHandler handler) {
super(channel, handler);
}
@Override
public void postClose() {
}
public String getId() {
return id;

View File

@ -1,11 +0,0 @@
package com.ljsd.network.session;
import com.ljsd.jieling.session.GameSession;
import com.ljsd.jieling.session.GameSessionFactory;
public class ISessionFactory implements GameSessionFactory {
@Override
public GameSession createGameSession() {
return new ISession();
}
}

View File

@ -20,7 +20,7 @@ class OnlineRewardActivity extends AbstractActivity {
int[][] values = sActivityRewardConfig.getValues();
int missionProgress = activityProgressInfo.getProgrss();
long now = TimeUtils.now();
long loginTime = session.getLoginTime();
long loginTime = session.getUserLoginTime();
int limitTime = values[0][0];
long remainTime = now - loginTime - limitTime * TimeUtils.ONE_MINUTE + missionProgress * TimeUtils.ONE_SECOND;
if (now - loginTime - limitTime * TimeUtils.ONE_MINUTE + missionProgress * TimeUtils.ONE_SECOND < 0) {

View File

@ -390,7 +390,7 @@ public class SessionManager implements INetSession<ISession>, INetReceived<ISess
if(session.getFiveReady()==1){
PlayerManager playerInfoManager = user.getPlayerInfoManager();
playerInfoManager.setOffLineTime(TimeUtils.now());
long onlineTime = playerInfoManager.getOffLineTime() - session.getLoginTime();
long onlineTime = playerInfoManager.getOffLineTime() - session.getUserLoginTime();
playerInfoManager.addOnlineTime(onlineTime);
//更新在线时长
ActivityLogic.getInstance().updateActivityMissionProgress(user, ActivityType.OnlineReward,(int)(onlineTime/TimeUtils.ONE_SECOND));

View File

@ -19,7 +19,6 @@ public class ISession extends NettyGameSession {
private boolean kick;
private int fiveReady; //客户端可以接受服务器5点刷新
private byte[] fiveByteBuf; //五点推送数据缓存
private long loginTime;//BI用
private int lastMsgId;//最后客户端请求协议
@ -128,10 +127,6 @@ public class ISession extends NettyGameSession {
return this.indexToMessage.get(index);
}
public long getLoginTime() {
return loginTime;
}
public ConcurrentHashMap<Integer, IndicationMsg> getIndexToIndication() {
return indexToIndication;
}