Exemple #1
0
 public MyGameServer(string ip, string port) : base(ip, port)
 {
     rand              = new Random();
     roomManager       = new RoomManager(10);
     player_Room       = new Dictionary <string, int>();
     curFreeRoom       = roomManager.GetRoom();
     parser            = new MyParser();
     ipname_PlayerName = new Dictionary <string, string>();
 }
Exemple #2
0
        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="client_socket"></param>
        private void RecieveMsg(IAsyncResult client_socket)
        {
            if (!isRunning)
            {
                return;
            }
            Socket   client = (Socket)client_socket.AsyncState;
            MyParser parser = _allParser[client.RemoteEndPoint.ToString()];

            //byte[] _buffer = new byte[_bufferLength];
            try
            {
                //接收字节数据并返回长度
                int n = client.EndReceive(client_socket);
                //Console.WriteLine(BitConverter.ToString(_buffer));
                //if (n == 0)
                //{
                //    return;//断开连接
                //}
                parser.ConstructPacket(_allBuffers[client.RemoteEndPoint.ToString()], n);
                byte[] temp = null;
                //数据处理
                while ((temp = parser.GetSingleData()) != null)
                {
                    //将消息转化为字符串
                    string msg = parser.DecoderData(temp);
                    //Console.WriteLine(msg);
                    HandleRecievedData(client.RemoteEndPoint.ToString(), msg);
                    HandleRecievedData(client.RemoteEndPoint.ToString(), temp);
                }
                //该用户已经离线
                if (!_allNames.Contains(client.RemoteEndPoint.ToString()))
                {
                    Console.WriteLine("玩家(" + client.RemoteEndPoint.ToString() + ")离线");

                    return;
                }
                client.BeginReceive(
                    _allBuffers[client.RemoteEndPoint.ToString()],
                    0,
                    _bufferLength,
                    SocketFlags.None,
                    new AsyncCallback(RecieveMsg), client);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.WriteLine("玩家(" + client.RemoteEndPoint.ToString() + ")离线");
                Disconnected(client.RemoteEndPoint.ToString());
                return;
            }
        }
        static void Main(string[] args)
        {
            //IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
            //string ipaddr = "";
            //foreach(var ip in ips)
            //{
            //    Console.WriteLine(ip.ToString());
            //    if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
            //    {
            //        ipaddr = ip.ToString();
            //        break;
            //    }
            //}
            Console.WriteLine("请输入服务器IP地址:");
            string ip = Console.ReadLine();

            Console.WriteLine("请输入服务器端口号:");
            string       port   = Console.ReadLine();
            MyGameServer server = new MyGameServer(ip, port);

            server.StartListen();
            while (true)
            {
                string cmd = Console.ReadLine();
                if (cmd.Equals("exit"))
                {
                    break;
                }
                if (cmd.Equals("test"))
                {
                    RemoteCMD_Data recData = new RemoteCMD_Data();
                    recData.player.Name = "test";
                    MyParser parser = new MyParser();
                    string   msg    = LitJson.JsonMapper.ToJson(recData);
                    byte[]   buf    = parser.EncoderData(msg);
                    server.BroadcastMsg(null, buf);
                }
            }
        }