Skip to content
This repository has been archived by the owner on Dec 18, 2021. It is now read-only.

Commit

Permalink
用户可以多个服务器登录
Browse files Browse the repository at this point in the history
  • Loading branch information
pangliang committed Mar 17, 2016
1 parent defec03 commit 67ea6ba
Show file tree
Hide file tree
Showing 9 changed files with 86 additions and 70 deletions.
Expand Up @@ -5,7 +5,6 @@
import com.zhaoxiaodan.mirserver.gameserver.handler.GameLoginHandler;
import com.zhaoxiaodan.mirserver.network.PacketDispatcher;
import com.zhaoxiaodan.mirserver.network.debug.ExceptionHandler;
import com.zhaoxiaodan.mirserver.network.debug.MyLoggingHandler;
import com.zhaoxiaodan.mirserver.network.decoder.ClientPacketBit6Decoder;
import com.zhaoxiaodan.mirserver.network.decoder.ClientPacketDecoder;
import com.zhaoxiaodan.mirserver.network.encoder.ServerPacketBit6Encoder;
Expand Down Expand Up @@ -59,14 +58,14 @@ public void initChannel(SocketChannel ch) throws Exception {
new ClientPacketBit6Decoder(),
// new MyLoggingHandler(MyLoggingHandler.Type.Read),
new ClientPacketDecoder(GameClientPackets.class.getCanonicalName()),
new MyLoggingHandler(MyLoggingHandler.Type.Read),
// new MyLoggingHandler(MyLoggingHandler.Type.Read),

//编码
// new MyLoggingHandler(MyLoggingHandler.Type.Write),
new ServerPacketBit6Encoder(),
// new MyLoggingHandler(MyLoggingHandler.Type.Write),
new ServerPacketEncoder(),
new MyLoggingHandler(MyLoggingHandler.Type.Write),
// new MyLoggingHandler(MyLoggingHandler.Type.Write),
new ExceptionHandler(),
//分包分发
new PacketDispatcher(GameLoginHandler.class.getPackage().getName())
Expand Down
Expand Up @@ -3,13 +3,15 @@
import javax.persistence.*;

@Entity
public class ServerInfo{
@Id
@GeneratedValue
public int id;
@OrderColumn
@Column(unique = true)
public String name;
public String ip;
public int port;
public class ServerInfo {
@Id
@GeneratedValue
public int id;
@OrderColumn
@Column(unique = true)
public String name;
public String loginServerIp;
public int loginServerPort;
public String gameServerIp;
public int gameServerPort;
}
Expand Up @@ -6,19 +6,22 @@
import java.util.List;

@Entity
public class User{
public class User {

@Id
@GeneratedValue
public int id;
@Id
@GeneratedValue
public int id;

@Column(unique = true)
public String loginId;
public String password;
public String username;
public Date lastLoginTime;
public byte certification;
@Column(unique = true)
public String loginId;
public String password;
public String username;
public Date lastLoginTime;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "selectServerId")
public ServerInfo selectServer;
public byte certification;

@OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE)
public List<Player> players;
@OneToMany(mappedBy = "user", cascade = CascadeType.REMOVE)
public List<Player> players;
}
Expand Up @@ -4,7 +4,6 @@
import com.zhaoxiaodan.mirserver.loginserver.handlers.LoginHandler;
import com.zhaoxiaodan.mirserver.network.PacketDispatcher;
import com.zhaoxiaodan.mirserver.network.debug.ExceptionHandler;
import com.zhaoxiaodan.mirserver.network.debug.MyLoggingHandler;
import com.zhaoxiaodan.mirserver.network.decoder.ClientPacketBit6Decoder;
import com.zhaoxiaodan.mirserver.network.decoder.ClientPacketDecoder;
import com.zhaoxiaodan.mirserver.network.encoder.ServerPacketBit6Encoder;
Expand Down Expand Up @@ -55,13 +54,13 @@ public void initChannel(SocketChannel ch) throws Exception {
new ClientPacketBit6Decoder(),
// new MyLoggingHandler(MyLoggingHandler.Type.Read),
new ClientPacketDecoder(LoginClientPackets.class.getCanonicalName()),
new MyLoggingHandler(MyLoggingHandler.Type.Read),
// new MyLoggingHandler(MyLoggingHandler.Type.Read),

//编码
new ServerPacketBit6Encoder(),
// new MyLoggingHandler(MyLoggingHandler.Type.Write),
new ServerPacketEncoder(),
new MyLoggingHandler(MyLoggingHandler.Type.Write),
// new MyLoggingHandler(MyLoggingHandler.Type.Write),

new ExceptionHandler(),
//分包分发
Expand Down
Expand Up @@ -10,20 +10,25 @@

public class SelectCharacterHandler extends UserHandler {

@Override
public void onPacket(ClientPacket packet, User user) throws Exception {
@Override
public void onPacket(ClientPacket packet, User user) throws Exception {

LoginClientPackets.SelectCharacter request = (LoginClientPackets.SelectCharacter) packet;
LoginClientPackets.SelectCharacter request = (LoginClientPackets.SelectCharacter) packet;

for(Player player :user.players){
if(player.name.equals(request.characterName)){
session.sendPacket(new LoginServerPackets.StartPlay("192.168.0.166",7400));
return;
}
}
if (null == user.selectServer) {
session.sendPacket(new ServerPacket(Protocol.SM_STARTFAIL));
return;
}

session.sendPacket(new ServerPacket(Protocol.SM_STARTFAIL));
return ;
}
for (Player player : user.players) {
if (player.name.equals(request.characterName)) {
session.sendPacket(new LoginServerPackets.StartPlay(user.selectServer.gameServerIp, user.selectServer.gameServerPort));
return;
}
}

session.sendPacket(new ServerPacket(Protocol.SM_STARTFAIL));
return;
}

}
Expand Up @@ -3,9 +3,9 @@
import com.zhaoxiaodan.mirserver.db.DB;
import com.zhaoxiaodan.mirserver.gameserver.entities.ServerInfo;
import com.zhaoxiaodan.mirserver.gameserver.entities.User;
import com.zhaoxiaodan.mirserver.network.Protocol;
import com.zhaoxiaodan.mirserver.loginserver.LoginClientPackets;
import com.zhaoxiaodan.mirserver.loginserver.LoginServerPackets;
import com.zhaoxiaodan.mirserver.network.Protocol;
import com.zhaoxiaodan.mirserver.network.packets.ClientPacket;
import com.zhaoxiaodan.mirserver.network.packets.ServerPacket;
import org.hibernate.criterion.Restrictions;
Expand All @@ -15,22 +15,23 @@

public class SelectServerHandler extends UserHandler {

@Override
public void onPacket(ClientPacket packet, User user) throws Exception {
LoginClientPackets.SelectServer selectServer = (LoginClientPackets.SelectServer) packet;

List<ServerInfo> list = DB.query(ServerInfo.class,Restrictions.eq("name",selectServer.serverName));
if(1 != list.size())
{
session.sendPacket(new ServerPacket(Protocol.SM_ID_NOTFOUND));
return ;
}else{
user.certification = (byte)new Random().nextInt(200);
DB.update(user);

ServerInfo info = list.get(0);
session.sendPacket(new LoginServerPackets.SelectServerOk(info.ip,info.port, user.certification));
}
}
@Override
public void onPacket(ClientPacket packet, User user) throws Exception {
LoginClientPackets.SelectServer selectServer = (LoginClientPackets.SelectServer) packet;

List<ServerInfo> list = DB.query(ServerInfo.class, Restrictions.eq("name", selectServer.serverName));
if (1 != list.size()) {
session.sendPacket(new ServerPacket(Protocol.SM_ID_NOTFOUND));
return;
} else {
ServerInfo info = list.get(0);

user.certification = (byte) new Random().nextInt(200);
user.selectServer = info;
DB.update(user);

session.sendPacket(new LoginServerPackets.SelectServerOk(info.loginServerIp, info.loginServerPort, user.certification));
}
}

}
11 changes: 11 additions & 0 deletions README.md
@@ -1,4 +1,15 @@
# MirServer-Netty
学习Netty, 仿制Mir2服务器端

## 编译运行

编译:
```bash
> ./gradlew jar
```

初始化标准数据库:



- [用Netty做传奇2服务器-网络部分](http://www.zhaoxiaodan.com/java/%E7%94%A8Netty%E5%81%9A%E4%BC%A0%E5%A5%872%E6%9C%8D%E5%8A%A1%E5%99%A8-%E7%BD%91%E7%BB%9C%E9%83%A8%E5%88%86.html)
18 changes: 7 additions & 11 deletions Tools/src/main/java/com/zhaoxiaodan/mirserver/tools/ImportDB.java
@@ -1,7 +1,6 @@
package com.zhaoxiaodan.mirserver.tools;

import com.zhaoxiaodan.mirserver.db.DB;
import org.hibernate.Session;

import java.io.BufferedReader;
import java.io.FileInputStream;
Expand All @@ -12,8 +11,6 @@

public class ImportDB {

Session db;

public Map<String, String> tables = new HashMap<String, String>() {
{
put("SERVERINFO", "数据文件/MIR2_PUBLIC_SERVERINFO.csv");
Expand All @@ -34,21 +31,20 @@ public void importAll() {


for (String tableName : tables.keySet()) {
db = DB.getSession();
db.getTransaction().begin();
DB.getSession().getTransaction().begin();

String dataFile = tables.get(tableName);
doImport(tableName, dataFile);
System.out.println("导入 " + dataFile + " 成功 !!!");

db.getTransaction().commit();
DB.getSession().getTransaction().commit();
}


DB.getSession().close();
} catch (Exception e) {
e.printStackTrace();
if (db.isOpen())
db.getTransaction().rollback();
if (DB.getSession().isOpen())
DB.getSession().getTransaction().rollback();

}
}
Expand All @@ -57,7 +53,7 @@ public void importAll() {
public void doImport(String tableName, String fileName) throws Exception {

String deleteSql = "delete from " + tableName + ";";
db.createSQLQuery(deleteSql).executeUpdate();
DB.getSession().createSQLQuery(deleteSql).executeUpdate();

BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), Charset.forName("UTF-8")));
String line = reader.readLine();
Expand All @@ -79,7 +75,7 @@ public void doImport(String tableName, String fileName) throws Exception {

String sql = sb.substring(0, sb.length() - 1) + ";";
// System.out.println(sql);
db.createSQLQuery(sql).executeUpdate();
DB.getSession().createSQLQuery(sql).executeUpdate();
}
}

Expand Down
4 changes: 2 additions & 2 deletions 数据文件/MIR2_PUBLIC_SERVERINFO.csv
@@ -1,2 +1,2 @@
ID,IP,NAME,PORT
1,192.168.0.166,胖梁开发服务器,7000
ID,GAMESERVERIP,GAMESERVERPORT,LOGINSERVERIP,LOGINSERVERPORT,NAME
1,192.168.0.166,7400,192.168.0.166,7000,胖梁开发测试

0 comments on commit 67ea6ba

Please sign in to comment.