//卡牌信息需要的类库
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//类库
namespace CardInformationDll
{
[Serializable]
public class Card
{
private string id;
private string property;
private string name;
private string attack;
public override string ToString()
{
return string.Format("Id:" + this.id + "属性:" + property + "卡牌名称:" + name + "攻击力:" + attack);
}
public Card()
{
}
public Card(string id, string property, string name, string attack)
{
this.id = id;
this.property = property;
this.name = name;
this.attack = attack;
}
public string Id
{
get
{
return id;
}
set
{
id = value;
}
}
public string Property
{
get
{
return property;
}
set
{
property = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Attack
{
get
{
return attack;
}
set
{
attack = value;
}
}
}
}
//服务器代码段
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using OfficeOpenXml;
using Server.GameServer;
using System.Collections;
using CardInformationDll;
using GameNet.SerializableEntity;
using Server.GameServer.ImpServer;
using System.Net;
using System.Net.Sockets;
namespace CardGame_Server
{
class Server
{
static ArrayList CardList = new ArrayList();
static void Main(string[] args)
{
//加载信息
LoadInformation();
SocketServerFactory factory = new SocketServerFactory();
IServer server = factory.CreateServer();
IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());
server.RegisterOnClientConnect(OnClientConnected);
server.RegisterOnMessageReceive(OnReceiceClientMessage);
server.Start(ip[1].ToString(), 6666, 100);
//server.Start("127.0.0.1", 6666, 100);
}
//当客户端连接上时将卡牌列表信息发送给客户端
private static void OnClientConnected(RemoteClient client, Hashtable clientTable)
{
Message msg = new Message();
if (clientTable.Count == 1)
{
Console.WriteLine("第一个用户登录");
msg.Add("server", "blueclient");
msg.Add("cardlist", CardList);
client.SendMessage(msg);
}
else
{
Console.WriteLine("第二个用户登录");
msg.Add("server", "redclient");
msg.Add("cardlist", CardList);
client.SendMessage(msg);
}
}
//接收客户端发来的消息
//选人完成
static bool isBlue = false;
static bool isRed = false;
static string blueword = "";
static string redword = "";
private static void OnReceiceClientMessage(RemoteClient client, Hashtable clientTable, Message msg)
{
object clientMsg = msg.Get("client");
if (clientMsg == null)
return;
#region -------------选人结束
//第一个客户端
if (clientMsg.Equals("blue"))
{
string blueindex = msg.Get("index").ToString();
string bluecardname = msg.Get("name").ToString();
blueword = blueindex;
if (blueindex == null)
return;
msg.Remove("client");
msg.Add("server", "whereindex");
msg.Add("bindex", blueindex);
msg.Add("cardname", bluecardname);
foreach (RemoteClient everyClient in clientTable.Values)
{
if (client != everyClient)
everyClient.SendMessage(msg);
}
}
//第二个客户端
if (clientMsg.Equals("red"))
{
string redindex = msg.Get("index").ToString();
string redcardname = msg.Get("name").ToString();
redword = redindex;
if (redindex == null)
return;
Console.WriteLine(redindex + "红色选人角色");
msg.Remove("client");
msg.Add("server", "whereindex");
msg.Add("rindex", redindex);
msg.Add("cardname", redcardname);
foreach (RemoteClient everyClient in clientTable.Values)
{
if (client != everyClient)
everyClient.SendMessage(msg);
}
}
if (blueword == "3" && redword == "3")
{
Console.WriteLine("游戏开始");
Message msgs = new Message();
msgs.Add("server", "action");
foreach (RemoteClient everyClient in clientTable.Values)
{
everyClient.SendMessage(msgs);
}
blueword = "";
redword = "";
}
#endregion
#region --------------告诉客户端选择的那几个英雄
//告诉每一个客户端蓝色方选择的第几个英雄
if (clientMsg.Equals("blueindex"))
{
string blueindex = msg.Get("index").ToString();
if (blueindex == null)
return;
Console.WriteLine(blueindex + "蓝色选人角色");
msg.Remove("client");
msg.Add("server", "whereindex");
msg.Add("bindex", blueindex);
foreach (RemoteClient everyClient in clientTable.Values)
{
if (client != everyClient)
everyClient.SendMessage(msg);
}
}
//告诉每一个客户端红色方选择的第几个英雄
if (clientMsg.Equals("redindex"))
{
string redindex = msg.Get("index").ToString();
if (redindex == null)
return;
Console.WriteLine(redindex + "红色选人角色");
msg.Remove("client");
msg.Add("server", "whereindex");
msg.Add("rindex", redindex);
foreach (RemoteClient everyClient in clientTable.Values)
{
if (client != everyClient)
everyClient.SendMessage(msg);
}
}
#endregion
#region --------------判断两个客户端登录 并进入选人界面
//判断两个客户端登录 并进入选人界面
if (clientMsg.Equals("bluelogin"))
{
Console.WriteLine("----------------");
isBlue = true;
}
if (clientMsg.Equals("redlogin"))
{
Console.WriteLine("===============");
isRed = true;
}
if (isBlue == true && isRed == true)
{
Message msgs = new Message();
msgs.Add("server", "login");
foreach (RemoteClient item in clientTable.Values)
{
item.SendMessage(msgs);
}
isBlue = false;
isRed = false;
}
#endregion
}
}
}
//需要引入的类库
引用
EPPlus 读取Excel表格引用
using System.IO;
using OfficeOpenXml;
using Server.GameServer;
using System.Collections;
using CardInformationDll;
using GameNet.SerializableEntity;
using Server.GameServer.ImpServer;