C/S通信


//卡牌信息需要的类库
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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值