Beispiel #1
0
        static void Main(string[] args)
        {
            Console.WriteLine($"My id is {int.Parse(args[1])}");
            CSharpClient client = new CSharpClient();

            client.OnReceive += delegate()
            {
                IMsg msg = client.Take();
                MessageToOneClient mm = msg.Content as MessageToOneClient;
                Console.WriteLine($"Message type::{msg.PacketType}");
                Console.WriteLine(mm);
            };
            Console.WriteLine("Connecting......");
            if (client.Connect("127.0.0.1", 7777))
            {
                Console.WriteLine("成功连接Agent.");
            }
            else
            {
                Console.WriteLine("连接Agent失败.");
            }


            MessageToServer mm = new MessageToServer();

            mm.PlayerID = int.Parse(args[1]);
            mm.TeamID   = int.Parse(args[0]);
            mm.JobType  = Communication.Proto.JobType.Job1;
            client.SendMessage(mm);

            Console.ReadLine();
            client.Stop();
            client.Dispose();
        }
Beispiel #2
0
 public void OnReciveShort(MessageToOneClient msg)  //连接是否成功
 {
     if (msg.MessageType == MessageType.ValidPlayer)
     {
     }
     else
     {
         MessageBox.Show("Invalid Player");
         Starting starting = new Starting();
         Application.Run(starting);
         MessageToServer msg1 = new MessageToServer();
         msg1.MessageType = MessageType.AddPlayer;
         Program.watch    = starting.watch;
         Program.teamID   = Program.watch?1911:starting.teamid;
         Program.playerID = Program.watch ? 1911 : starting.playerid;
         Program.jobType  = starting.job;
         Program.clientCommunicator.Stop();
         msg1.TeamID   = Program.teamID;
         msg1.PlayerID = Program.playerID;
         msg1.JobType  = starting.job;
         if (Program.clientCommunicator.Connect("127.0.0.1", starting.port))
         {
             Program.clientCommunicator.SendMessage(msg1);
         }
         else
         {
             MessageBox.Show("连接Agent失败");
             return;
         }
     }
 }
Beispiel #3
0
        private void SendAddPlayerResponse(MessageToServer msgRecv, bool isValid)   //作为对 AddPlayer 消息的响应,给客户端发送信息
        {
            if (msgRecv.PlayerID == 1911 && msgRecv.TeamID == 1911)                 // 观战
            {
                Console.WriteLine("A new spectator comes to watch this game.");
                return;
            }

            MessageToOneClient msg2Send = new MessageToOneClient();

            msg2Send.PlayerID    = msgRecv.PlayerID;
            msg2Send.TeamID      = msgRecv.TeamID;
            msg2Send.MessageType = isValid ? MessageType.ValidPlayer : MessageType.InvalidPlayer;

            serverCommunicator.SendMessage(msg2Send);

            if (isValid)
            {
                Console.WriteLine("A new player with teamID {0} and playerID {1} joined the game.", msgRecv.TeamID, msgRecv.PlayerID);
            }
            else
            {
                Console.WriteLine("The request of a player declaring to have teamID {0} and playerID {1} to join the game has been rejected.", msgRecv.TeamID, msgRecv.PlayerID);
            }

            lock (addPlayerLock)
            {
                CheckStart();                       //检查是否该开始游戏了
            }
        }
Beispiel #4
0
        public void SendMessage(MessageToOneClient msg)
        {
            Message message = new Message();

            message.Content    = msg;
            message.PacketType = PacketType.MessageToOneClient;
            byte[] bytes;
            message.WriteTo(out bytes);
            Send(bytes);
        }
Beispiel #5
0
        private void SendAddPlayerResponse(MessageToServer msgRecv, bool isValid)               //作为对 AddPlayer 消息的响应,给客户端发送信息
        {
            MessageToOneClient msg2Send = new MessageToOneClient();

            msg2Send.PlayerID    = msgRecv.PlayerID;
            msg2Send.TeamID      = msgRecv.TeamID;
            msg2Send.MessageType = isValid ? MessageType.ValidPlayer : MessageType.InvalidPlayer;

            serverCommunicator.SendMessage(msg2Send);

            lock (addPlayerLock)
            {
                CheckStart();                       //检查是否该开始游戏了
            }
        }
Beispiel #6
0
 public void OnReciveShort(MessageToOneClient msg)  //连接是否成功
 {
     if (msg.MessageType == MessageType.ValidPlayer)
     {
     }
     else
     {
         MessageBox.Show("Invalid Player");
         Starting starting = new Starting();
         Application.Run(new Starting());
         MessageToServer msg1 = new MessageToServer();
         msg1.MessageType = MessageType.AddPlayer;
         msg1.TeamID      = starting.teamid;
         msg1.PlayerID    = starting.playerid;
         msg1.JobType     = starting.job;
         Program.clientCommunicator.SendMessage(msg1);
     }
 }
Beispiel #7
0
        private void SendMessageToTeammate(MessageToServer msgRecv)
        {
            if (!ValidTeamIDAndPlayerID(msgRecv.TeamID, msgRecv.PlayerID) || !ValidTeamIDAndPlayerID(msgRecv.TeamID, msgRecv.ToPlayerID))
            {
                return;
            }
            if (msgRecv.Message.Length > 64)
            {
                return;
            }
            MessageToOneClient msg = new MessageToOneClient();

            msg.PlayerID    = msgRecv.ToPlayerID;
            msg.TeamID      = msgRecv.TeamID;
            msg.Message     = msgRecv.Message;
            msg.MessageType = MessageType.Send;
            serverCommunicator.SendMessage(msg);
            game.SendMessage(communicationToGameID[msgRecv.TeamID, msgRecv.PlayerID], communicationToGameID[msg.TeamID, msg.PlayerID], msgRecv.Message);
        }
Beispiel #8
0
    void Start()
    {
        Debug.Log("开始初始化参数");
        propManager   = GetComponent <PropManager>();
        heroManager   = GetComponent <HeroManager>();
        bulletManager = GetComponent <BulletManager>();
        Debug.Log(Application.dataPath);
        string str = File.ReadAllText(Application.streamingAssetsPath + "/JobTest.txt");

        /*TextAsset txt = Resources.Load("JobTest") as TextAsset;
         * string[] s = txt.text.Split(' ');*/
        string[] s = str.Split(' ');
        port     = (ushort)float.Parse(s[0]);
        teamId   = (int)float.Parse(s[1]);
        playerId = (int)float.Parse(s[2]);
        jobN     = (int)float.Parse(s[3]);
        // TO DO:初始化通信
        messageToServer         = new MessageToServer();
        csharpClient            = new CSharpClient();
        csharpClient.OnReceive += delegate()
        {
            //Debug.Log("Message Received.");
            if (csharpClient.TryTake(out IMsg iMsg))
            {
                switch (iMsg.PacketType)
                {
                case PacketType.MessageToClient:
                {
                    MessageToClient msg = iMsg.Content as MessageToClient;
                    //Debug.Log("msg received");
                    switch (msg.MessageType)
                    {
                    case MessageType.StartGame:
                        GameStart(msg); break;

                    case MessageType.Gaming:
                        Refresh(msg); break;

                    case MessageType.EndGame:
                        GameOver(); break;

                    default: break;
                    }
                    break;
                }

                case PacketType.MessageToOneClient:
                {
                    MessageToOneClient msg = iMsg.Content as MessageToOneClient;
                    //Debug.Log("msg received");
                    switch (msg.MessageType)
                    {
                    case MessageType.ValidPlayer:
                        Debug.Log("Info Valid");
                        break;

                    case MessageType.InvalidPlayer:
                        Debug.Log("Info Invalid");
                        break;

                    case MessageType.Send:
                        Debug.Log("Info Send");
                        break;

                    default: break;
                    }
                    break;
                }

                default: break;
                }
            }
            else
            {
                Debug.Log("Failed to pop a message");
            }
        };
        if (csharpClient.Connect("127.0.0.1", port))
        {
            Debug.Log("成功连接Agent.");
        }
        else
        {
            Debug.Log("连接Agent失败.");
            Application.Quit();
        }
        messageToServer.MessageType = MessageType.AddPlayer;
        messageToServer.TeamID      = teamId;
        messageToServer.PlayerID    = playerId;
        switch (jobN)
        {
        case 0: messageToServer.JobType = JobType.Job0; break;

        case 1: messageToServer.JobType = JobType.Job1; break;

        case 2: messageToServer.JobType = JobType.Job2; break;

        case 3: messageToServer.JobType = JobType.Job3; break;

        case 4: messageToServer.JobType = JobType.Job4; break;

        case 5: messageToServer.JobType = JobType.Job5; break;

        case 6: messageToServer.JobType = JobType.Job6; break;
        }

        csharpClient.SendMessage(messageToServer);
        //WebClient
        heros                = new ConcurrentDictionary <long, HeroScript>();
        props                = new ConcurrentDictionary <long, PropScript>();
        bullets              = new ConcurrentDictionary <long, BulletScript>();
        isCharactersExisted  = new ConcurrentDictionary <long, bool>();
        isPropsExisted       = new ConcurrentDictionary <long, bool>();
        isBulletsExisted     = new ConcurrentDictionary <long, bool>();
        laidList             = new ConcurrentDictionary <long, bool>();
        TaskQueue            = new ConcurrentQueue <KeyValuePair <long, GameObjInfo> >();
        LaidQueue            = new ConcurrentQueue <GameObjInfo>();
        isReady              = false;
        myAngle              = 0;
        isNewMessageToServer = false;
        for (int i = 0; i < 50; i++)
        {
            for (int j = 0; j < 50; j++)
            {
                mapColor[i, j]  = 0;
                cellColor[i, j] = 0;
            }
        }
        Debug.Log("参数初始化完成");
    }
Beispiel #9
0
        static void Main(string[] args)
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //取得开始命令
            AOption?options = null;

            Parser.Default.ParseArguments <AOption>(args).WithParsed(o => { options = o; });
            Int64      teamid, playerid;
            ClientData client;

            if (options == null)
            {
                Starting starting = new Starting();
                Application.Run(starting);
                teamid   = starting.teamid;
                playerid = starting.playerid;
                client   = new ClientData(starting.teamid, starting.playerid, starting.job, starting.port);
            }
            else
            {
                teamid   = options.teamID;
                playerid = options.playerID;
                client   = new ClientData(options.teamID, options.playerID, (JobType)options.job, options.ServerPort);
            }
            if (clientCommunicator.Connect("127.0.0.1", client.port))
            {
            }
            else
            {
                MessageBox.Show("连接Agent失败");
                return;
            }
            //向server发消息
            MessageToServer msg = new MessageToServer();

            msg.MessageType = MessageType.AddPlayer;
            msg.TeamID      = teamid;
            msg.PlayerID    = playerid;
            msg.JobType     = client.jobType;
            //TO DO:发出消息
            clientCommunicator.OnReceive += delegate()
            {
                if (clientCommunicator.TryTake(out IMsg msg))
                {
                    client.messageline.Add(new Tuple <IMsg, long>(msg, System.Environment.TickCount64));
                }
            };
            client.messageline = new BlockingCollection <Tuple <IMsg, long> >();
            int bulletspeed;

            switch (client.jobType)
            {
            default:
            case JobType.Job0:
                bulletspeed = Program.basicBulletMoveSpeed;
                break;

            case JobType.Job1:
                bulletspeed = Program.basicBulletMoveSpeed * 2;
                break;

            case JobType.Job2:
                bulletspeed = Program.basicBulletMoveSpeed / 2;
                break;

            case JobType.Job3:
                bulletspeed = Program.basicBulletMoveSpeed / 2;
                break;

            case JobType.Job4:
                bulletspeed = Program.basicBulletMoveSpeed * 4;
                break;

            case JobType.Job5:
                bulletspeed = Program.basicBulletMoveSpeed;
                break;

            case JobType.Job6:
                bulletspeed = Program.basicBulletMoveSpeed;
                break;
            }
            client.gameform = new Form1(teamid, playerid, bulletspeed, client.jobType);
            new Thread(() =>
            {
                while (true)
                {
                    if (client.messageline.TryTake(out Tuple <IMsg, long> msg))
                    {
                        if (msg.Item1.PacketType == PacketType.MessageToOneClient)
                        {
                            MessageToOneClient mm = msg.Item1.Content as MessageToOneClient;
                            if (mm.TeamID == teamid && mm.PlayerID == playerid)
                            {
                                client.OnReciveShort(mm);
                            }
                        }
                        else if (msg.Item1.PacketType == PacketType.MessageToClient)
                        {
                            MessageToClient mm = msg.Item1.Content as MessageToClient;
                            if (mm.TeamID == teamid && mm.PlayerID == playerid)
                            {
                                client.OnReciveNormal(mm, msg.Item2);
                            }
                        }
                    }
                }
            }
                       ).Start();
            clientCommunicator.SendMessage(msg);
            Application.Run(client.gameform);
            Application.Exit();
        }
Beispiel #10
0
        private static int MainInternal(IPEndPoint serverend, ushort agentport)
        {
            dict.Clear();
            server.OnReceive += delegate(IServer sender, IntPtr connId, byte[] bytes)
            {
                if (!dict.Values.Contains(connId))
                {
                    Message message = new Message();
                    message.MergeFrom(bytes);                             //这里需不需要拷贝?
                    if (message.PacketType == PacketType.MessageToServer) //是否有其他可能?如何处理?
                    {
                        MessageToServer msg = message.Content as MessageToServer;
                        UInt64          key = ((UInt64)msg.PlayerID | ((UInt64)msg.TeamID << 32));
                        if (dict.ContainsKey(key))
                        {
                            Console.WriteLine($"More than one client claims to have the same ID {msg.TeamID} {msg.PlayerID}.");
                            return(HandleResult.Error);
                        }
                        dict.TryAdd(key, connId);//不可能false
                    }
                }
                client.Send(bytes, bytes.Length);
                return(HandleResult.Ok);
            };
            //去年是Client退出前还要专门发一个消息,今年不太清楚,暂且如此
            server.OnClose += delegate(IServer sender, IntPtr connId, SocketOperation socketOperation, int errorCode)
            {
                foreach (UInt64 id in dict.Keys)
                {
                    if (dict[id] == connId)
                    {
                        if (!dict.TryRemove(id, out IntPtr temp))
                        {
                            return(HandleResult.Error);
                        }
                        Console.WriteLine($"Player {id>>32} {id&0xffffffff} closed the connection.");
                        break;
                    }
                }
                return(HandleResult.Ok);
            };
            client.OnReceive += delegate(IClient sender, byte[] bytes)
            {
                MemoryStream istream = new MemoryStream(bytes);
                BinaryReader br      = new BinaryReader(istream);
                PacketType   type    = (PacketType)br.PeekChar();
                br.Close();//debug期间加的,也许有用也许没用
                istream.Dispose();
                if (type == PacketType.MessageToOneClient)
                {
                    Message m = new Message();
                    m.MergeFrom(bytes);
                    MessageToOneClient message = m.Content as MessageToOneClient;
                    UInt64             key     = ((UInt64)message.PlayerID | ((UInt64)message.TeamID << 32));

                    if (!dict.ContainsKey(key))
                    {
                        Console.WriteLine($"Error: No such player corresponding to ID {message.TeamID} {message.PlayerID}");
                        return(HandleResult.Error);
                    }
                    if (!server.Send(dict[key], bytes, bytes.Length))
                    {
                        Console.WriteLine($"向{dict[key]}发送失败。");
                    }
                    return(HandleResult.Ok);
                }
                foreach (IntPtr connId in server.GetAllConnectionIds())
                {
                    if (!server.Send(connId, bytes, bytes.Length))
                    {
                        Console.WriteLine($"向{connId}发送失败。");
                    }
                }
                return(HandleResult.Ok);
            };
            Console.WriteLine("Connecting......");
            if (!client.Connect(serverend.Address.ToString(), (ushort)serverend.Port))
            {
                Console.WriteLine("Failed to connect with the game server.");
            }
            else
            {
                int i;
                for (i = 0; i < 300; i++)
                {
                    if (client.IsConnected)
                    {
                        Console.WriteLine("Connect with the game server successfully.");
                        break;
                    }
                    else
                    {
                        Thread.Sleep(100);
                    }
                }
                if (i == 300)
                {
                    Console.WriteLine("Failed to connect with the game server.");
                }
            }
            server.Port = agentport;
            if (server.Start())
            {
                Console.WriteLine("Agent starts listening.");
            }
            else
            {
                Console.WriteLine("Agent starts unsuccessfully");
            }
            Thread.Sleep(int.MaxValue);
            dict.Clear();
            server.Stop();
            server.Dispose();
            client.Stop();
            client.Dispose();
            return(0);
        }
Beispiel #11
0
        static void Main()
        {
            CommServer server = new CommServer();

            server.Listen(8888);
            server.OnConnect += delegate()
            {
                Console.WriteLine("An agent connects.");
            };
            server.OnReceive += delegate()
            {
                byte[] data;
                IMsg   msg;
                if (server.TryTake(out msg))
                {
                    MessageToServer mm = msg.Content as MessageToServer;
                    Console.WriteLine($"Receive a message from {mm.PlayerID}");
                    Console.WriteLine($"Message type::{mm.MessageType}");
                    if (mm.MessageType == MessageType.Send)
                    {
                        Console.WriteLine(mm.Message);
                    }
                }
                else
                {
                    Console.WriteLine("fail to dequeue");
                }
            };
            Console.WriteLine("============================");
            Console.ReadLine();

            {
                MessageToOneClient m = new MessageToOneClient();
                m.PlayerID    = 0;
                m.TeamID      = 0;
                m.MessageType = MessageType.ValidPlayer;
                m.Guid        = 888;
                server.SendMessage(m);
                Console.WriteLine("已发送Validplayer");
            }

            Console.ReadLine();
            server.SendMessage(TestMessage(0, MessageType.StartGame));
            Console.WriteLine("已发送StartGame");
            Console.ReadLine();
            for (int i = 0; i < 100; i++)
            {
                server.SendMessage(TestMessage(i, MessageType.Gaming));
                Thread.Sleep(50);
            }
            Console.WriteLine("Gaming");
            Console.ReadLine();
            for (int i = 0; i < 100; i++)
            {
                server.SendMessage(TestMessage(i + 100, MessageType.Gaming));
                Thread.Sleep(50);
            }
            MessageToOneClient m2OC = new MessageToOneClient();

            m2OC.Guid        = 12345;
            m2OC.PlayerID    = 0;
            m2OC.TeamID      = 0;
            m2OC.MessageType = MessageType.Send;
            m2OC.Message     = "Hello world!";
            server.SendMessage(m2OC);
            Console.WriteLine("Msg sent");
            for (int i = 0; i < 100; i++)
            {
                server.SendMessage(TestMessage(i + 200, MessageType.Gaming));
                Thread.Sleep(50);
            }
            server.SendMessage(TestMessage(666, MessageType.EndGame));
            Console.WriteLine("GameOver");
            Console.ReadLine();
            server.Dispose();
            server.Stop();
        }