示例#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();
        }
示例#2
0
        private void recieveMessage()
        {
            while (true)
            {
                try
                {
                    int    bufferLength = socket.Receive(recieveBuffer);
                    byte[] realBuffer   = new Byte[bufferLength];
                    Array.Copy(recieveBuffer, 0, realBuffer, 0, bufferLength);
                    string str = Encoding.Default.GetString(realBuffer);
                    Console.WriteLine("{0} : {1}.", socket.RemoteEndPoint, str);
                    string[] message = str.Split(messageSpiltSeperation);

                    UInt32 id_t = Convert.ToUInt32(message[0]);
                    // if (id_t != id)
                    //     continue;

                    byte type = Convert.ToByte(message[1]);
                    if (type < 0 || type >= (byte)COMMAND_TYPE.SIZE)
                    {
                        continue;
                    }

                    byte            param1   = Convert.ToByte(message[2]);
                    byte            param2   = Convert.ToByte(message[3]);
                    MessageToServer msgToSvr = new MessageToServer(id, (COMMAND_TYPE)type, param1, param2);
                    Program.messageQueue.Enqueue(msgToSvr);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    break;
                }
            }
        }
示例#3
0
        protected void OnRecieve(Object communication, EventArgs e)
        {
            Console.Write("Recieved;");
            //CommunicationImpl communicationImpl = communication as CommunicationImpl;
            MessageToServer  msg2svr             = (MessageToServer)((MessageEventArgs)e).message.Message;
            Tuple <int, int> playerCommunitionID = new Tuple <int, int>(((MessageEventArgs)e).message.Agent, ((MessageEventArgs)e).message.Client);

            if (msg2svr.IsSetTalent)
            {
                while (!Program.PlayerList.ContainsKey(playerCommunitionID))
                {
                    Thread.Sleep(20);
                }
                if (msg2svr.Talent < Talent.None || msg2svr.Talent >= Talent.Size)
                {
                    msg2svr.Talent = Talent.None;
                }
                Program.PlayerList[playerCommunitionID].Talent = msg2svr.Talent;
                Server.ServerDebug("Player " + playerCommunitionID.Item1 + "." + playerCommunitionID.Item2 + " has chose talent " + Program.PlayerList[playerCommunitionID].Talent);
                return;
            }

            //Server.ServerDebug("GameTime : " + Time.GameTime().TotalSeconds.ToString("F3") + "s");
            Program.PlayerList[playerCommunitionID].ExecuteMessage(msg2svr);
        }
示例#4
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;
         }
     }
 }
示例#5
0
        public void run()
        {
            Program.initTime = DateTime.Now;

            while (true)
            {
                if (Program.messageQueue.Count == 0)
                {
                    continue;
                }
                Program.gameTime = DateTime.Now - Program.initTime;
                Console.WriteLine("Time : " + Program.gameTime.TotalSeconds.ToString() + "s");

                MessageToServer msgToSvr = Program.messageQueue.Dequeue();
                if (msgToSvr.commandType < 0 || msgToSvr.commandType >= COMMAND_TYPE.SIZE)
                {
                    continue;
                }


                if (msgToSvr.commandType == COMMAND_TYPE.MOVE && msgToSvr.parameter1 >= 0 && msgToSvr.parameter1 < (byte)DIRECTION.SIZE)
                {
                    players[msgToSvr.senderID].move((DIRECTION)msgToSvr.parameter1);
                }
            }
        }
示例#6
0
        public bool Registration(string username, string password)
        {
            MessageToServer message = new MessageToServer
            {
                Command  = CommandToServer.ASK_REGISTRATION,
                Username = username,
                Password = password
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            if (received.Command == CommandFromServer.ACCEPTED)
            {
                UserInfo.Id       = received.Id;
                UserInfo.Name     = received.Name;
                UserInfo.Username = username;
                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#7
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();                       //检查是否该开始游戏了
            }
        }
示例#8
0
        private void Form1_KeyPress(object sender, KeyPressEventArgs e) //键盘进行特殊操作
        {
            switch (e.KeyChar)
            {
            case 'q':
            case 'Q':
                int             y    = this.PointToClient(Control.MousePosition).X;
                int             x    = this.PointToClient(Control.MousePosition).Y;
                MessageToServer msg1 = new MessageToServer();
                msg1.PlayerID           = playerid;
                msg1.TeamID             = teamid;
                msg1.MessageType        = MessageType.Attack;
                msg1.Angle              = Math.Atan2(y - PlayerLabelSet[selfguid].label.Location.X, x - PlayerLabelSet[selfguid].label.Location.Y);//目前为弧度
                msg1.TimeInMilliseconds = (int)(1000.0 * Math.Sqrt(Math.Pow((double)(y - PlayerLabelSet[selfguid].label.Location.X - 5), 2) + Math.Pow((double)(x - PlayerLabelSet[selfguid].label.Location.Y - 5), 2)) * Program.cell / MapcellHeight / bulletspeed + 0.5);
                Program.clientCommunicator.SendMessage(msg1);
                break;

            case 'w':
            case 'W':
                MessageToServer msg2 = new MessageToServer();
                msg2.MessageType = MessageType.Use;
                msg2.PlayerID    = playerid;
                msg2.TeamID      = teamid;
                //TO DO:发消息
                Program.clientCommunicator.SendMessage(msg2);
                break;

            case 'e':
            case 'E':
                MessageToServer msg3 = new MessageToServer();
                msg3.MessageType = MessageType.Pick;
                msg3.PlayerID    = playerid;
                msg3.TeamID      = teamid;
                //TO DO:发消息
                for (int i = 1; i < 11; i++)
                {
                    msg3.PropType = (PropType)i;
                    Program.clientCommunicator.SendMessage(msg3);
                }
                break;

            case 'r':
            case 'R':
                MessageToServer msg4 = new MessageToServer();
                msg4.MessageType = MessageType.Throw;
                msg4.PlayerID    = playerid;
                msg4.TeamID      = teamid;
                //TO DO:发消息
                Program.clientCommunicator.SendMessage(msg4);
                break;

            case 'a':
            case 'A':
                Application.Exit();
                break;

            default: break;
            }
        }
示例#9
0
 internal void SendMessage(MessageToServer receivedMessage, Socket handler)
 {
     if (_database.SelectContact(receivedMessage.Id, receivedMessage.TargetId) == null)
     {
         _database.Insert(new Contact(receivedMessage.Id, receivedMessage.TargetId));
     }
     _database.Insert(new Message(receivedMessage.Id, receivedMessage.TargetId, receivedMessage.NewMessage));
 }
示例#10
0
 public void SendMessage(MessageToServer msg)
 {
     Message message = new Message();
     message.Content = msg;
     message.PacketType = PacketType.MessageToServer;
     byte[] bytes;
     message.WriteTo(out bytes);
     Send(bytes);
 }
示例#11
0
        internal void GetContacts(MessageToServer receivedMessage, Socket handler)
        {
            MessageFromServer message = new MessageFromServer
            {
                Users = _database.SelectContacts(receivedMessage.Id)
            };

            handler.Send(message.EncodeMessage());
        }
示例#12
0
        internal void SearchContacts(MessageToServer receivedMessage, Socket handler)
        {
            MessageFromServer message = new MessageFromServer
            {
                Users = _database.SearchUsers(receivedMessage.Name)
            };

            handler.Send(message.EncodeMessage());
        }
示例#13
0
        internal void LoadMessages(MessageToServer receivedMessage, Socket handler)
        {
            MessageFromServer message = new MessageFromServer
            {
                Messages = _database.SelectMessages(receivedMessage.Id, receivedMessage.TargetId)
            };

            handler.Send(message.EncodeMessage());
        }
示例#14
0
        public async void StartReceiving(Socket handler)
        {
            await Task.Run(() =>
            {
                try
                {
                    while (true)
                    {
                        try {
                            byte[] bytes = new Byte[3072];
                            int bytesRec = handler.Receive(bytes);
                            MessageToServer receivedMessage = MessageToServer.DecodeMessage(bytes);

                            switch (receivedMessage.Command)
                            {
                            case CommandToServer.ASK_AUTHORIZATION:
                                _commands.Authorize(receivedMessage, handler);
                                break;

                            case CommandToServer.ASK_REGISTRATION:
                                _commands.Register(receivedMessage, handler);
                                break;

                            case CommandToServer.SEND_MESSAGE:
                                _commands.SendMessage(receivedMessage, handler);
                                break;

                            case CommandToServer.GET_CONTACTS:
                                _commands.GetContacts(receivedMessage, handler);
                                break;

                            case CommandToServer.SEARCH_CONTACTS:
                                _commands.SearchContacts(receivedMessage, handler);
                                break;

                            case CommandToServer.GET_MESSAGES:
                                _commands.LoadMessages(receivedMessage, handler);
                                break;

                            default:
                                break;
                            }
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
                catch (Exception)
                {
                    // user disconnected?
                }
            });
        }
示例#15
0
        internal void SendMessage(string text, int id)
        {
            MessageToServer message = new MessageToServer
            {
                Command    = CommandToServer.SEND_MESSAGE,
                Id         = UserInfo.Id,
                TargetId   = id,
                NewMessage = text,
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
        }
示例#16
0
        protected override void OnReceive(MessageToServer msg)
        {
#if DEBUG
            Console.WriteLine($"Recieve message: from teamID {msg.TeamID}, playerID {msg.PlayerID}: {msg.MessageType}");
#endif
            switch (msg.MessageType)
            {
            case MessageType.AddPlayer:
                SendAddPlayerResponse(msg, AddPlayer(msg));
                break;

            case MessageType.Move:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.MovePlayer(communicationToGameID[msg.TeamID, msg.PlayerID], msg.TimeInMilliseconds, msg.Angle);
                }
                break;

            case MessageType.Attack:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Attack(communicationToGameID[msg.TeamID, msg.PlayerID], msg.TimeInMilliseconds, msg.Angle);
                }
                break;

            case MessageType.Pick:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Pick(communicationToGameID[msg.TeamID, msg.PlayerID], ConvertTool.ToGamePropType(msg.PropType));
                }
                break;

            case MessageType.Use:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Use(communicationToGameID[msg.TeamID, msg.PlayerID]);
                }
                break;

            case MessageType.Throw:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Throw(communicationToGameID[msg.TeamID, msg.PlayerID], msg.TimeInMilliseconds, msg.Angle);
                }
                break;

            case MessageType.Send:
                SendMessageToTeammate(msg);
                break;
            }
        }
示例#17
0
 public void sendMessage(MessageToServer msgToSvr)
 {
     try
     {
         byte[] sendByte = Encoding.Default.GetBytes(msgToSvr.ToString());
         socket.Send(sendByte, sendByte.Length, 0);
     }
     catch (Exception ex)
     {
         Console.WriteLine("发送失败。");
         Console.WriteLine(ex);
         throw;
     }
 }
示例#18
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();                       //检查是否该开始游戏了
            }
        }
示例#19
0
        private void OnReceive(MessageToServer msg)
        {
            switch (msg.MessageType)
            {
            case MessageType.AddPlayer:
                SendAddPlayerResponse(msg, AddPlayer(msg));
                break;

            case MessageType.Move:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.MovePlayer(communicationToGameID[msg.TeamID, msg.PlayerID], msg.TimeInMilliseconds, msg.Angle);
                }
                break;

            case MessageType.Attack:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Attack(communicationToGameID[msg.TeamID, msg.PlayerID], msg.TimeInMilliseconds, msg.Angle);
                }
                break;

            case MessageType.Pick:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Pick(communicationToGameID[msg.TeamID, msg.PlayerID], ConvertTool.ToGamePropType(msg.PropType));
                }
                break;

            case MessageType.Use:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Use(communicationToGameID[msg.TeamID, msg.PlayerID]);
                }
                break;

            case MessageType.Throw:
                if (ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))
                {
                    game.Throw(communicationToGameID[msg.TeamID, msg.PlayerID], msg.TimeInMilliseconds, msg.Angle);
                }
                break;

            case MessageType.Send:
                SendMessageToTeammate(msg);
                break;
            }
        }
示例#20
0
        public List <Contact> Contacts(int id)
        {
            MessageToServer message = new MessageToServer
            {
                Command = CommandToServer.GET_CONTACTS,
                Id      = id
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            return(received.Users);
        }
示例#21
0
        public List <Contact> SearchContacts(string search)
        {
            MessageToServer message = new MessageToServer
            {
                Command = CommandToServer.SEARCH_CONTACTS,
                Name    = search
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            return(received.Users);
        }
示例#22
0
        private bool AddPlayer(MessageToServer msg)
        {
            if (game.GameMap.Timer.IsGaming)                    //如果正在游戏,不能加入角色
            {
                return(false);
            }

            if (!ValidTeamIDAndPlayerID(msg.TeamID, msg.PlayerID))             //PlayerID或TeamID不正确
            {
                return(false);
            }

            lock (addPlayerLock)
            {
                if (communicationToGameID[msg.TeamID, msg.PlayerID] != GameObject.invalidID)                        //已经有这个玩家了,不能再添加了
                {
                    return(false);
                }

                Game.PlayerInitInfo playerInitInfo = new Game.PlayerInitInfo(GetBirthPointIdx(msg.TeamID, msg.PlayerID), ConvertTool.ToGameJobType(msg.JobType), msg.TeamID);
                if (playerInitInfo.jobType == THUnity2D.JobType.InvalidJobType)
                {
                    return(false);                                                                                  //非法职业
                }
                bool legalJob = false;
                foreach (var enumMem in typeof(THUnity2D.JobType).GetFields())
                {
                    if (playerInitInfo.jobType.ToString() == enumMem.Name)
                    {
                        legalJob = true;
                        break;
                    }
                }
                if (!legalJob)
                {
                    return(false);                                  //非法职业,职业数值超出枚举范围
                }
                long newPlayerID = game.AddPlayer(playerInitInfo);
                if (newPlayerID == GameObject.invalidID)
                {
                    return(false);
                }
                communicationToGameID[msg.TeamID, msg.PlayerID] = newPlayerID;

                return(true);
            }
        }
示例#23
0
        internal List <Message> GetMessages(int id)
        {
            MessageToServer message = new MessageToServer
            {
                Command  = CommandToServer.GET_MESSAGES,
                Id       = UserInfo.Id,
                TargetId = id
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            return(received.Messages);
        }
示例#24
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);
     }
 }
示例#25
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);
        }
示例#26
0
        internal void Authorize(MessageToServer receivedMessage, Socket handler)
        {
            User user = _database.SelectOneUser(receivedMessage.Username);

            if (user != null)
            {
                if (user.Password == receivedMessage.Password)
                {
                    _connectedUsers.Add(receivedMessage.Username, handler);
                    MessageFromServer message = new MessageFromServer()
                    {
                        Command = CommandFromServer.ACCEPTED,
                        Id      = user.Id,
                        Name    = user.Name
                    };
                    handler.Send(message.EncodeMessage());
                    return;
                }
            }
            Reject(handler);
        }
示例#27
0
        internal static void Main()
        {
            ws          = new WebSocket("ws://localhost:8080");
            ws.OnError += (sender, args) =>
            {
                //Console.WriteLine(args.Exception.ToString());
            };
            ws.OnOpen += (o, args) =>
            {
                var join = new Join
                {
                    Name     = Prompt("name: "),
                    Password = Prompt("pass: "******"room: ")
                };
                ws.Send(join.ToByteArray());
            };

            ws.OnMessage += HandleJoinResponse;

            ws.Connect();

            while (true)
            {
                var chat = new MessageToServer()
                {
                    ChatToServer = new MessageToServer.Types.Chat {
                        Text = Console.ReadLine(),
                    },
                    Time = 0,
                };
                ws.Send(chat.ToByteArray());
                foreach (var b in chat.ToByteArray())
                {
                    Console.Write(b.ToString() + ", ");
                }
                Console.WriteLine();
            }
        }
示例#28
0
        internal void Register(MessageToServer receivedMessage, Socket handler)
        {
            User user = _database.SelectOneUser(receivedMessage.Username);

            if (user != null)
            {
                Reject(handler);
            }
            else
            {
                _connectedUsers.Add(receivedMessage.Username, handler);
                user = new User(receivedMessage.Username, receivedMessage.Password, receivedMessage.Username);
                _database.Insert(user);
                user = _database.SelectOneUser(user.Username);
                MessageFromServer message = new MessageFromServer()
                {
                    Command = CommandFromServer.ACCEPTED,
                    Id      = user.Id,
                    Name    = user.Name
                };
                handler.Send(message.EncodeMessage());
            }
        }
示例#29
0
        private void LabelClick(object sender, EventArgs e)  //标签单击事件处理
        {
            MouseEventArgs mouseEventArgs = (MouseEventArgs)e;
            Label          label          = sender as Label;

            if (mouseEventArgs.Button == MouseButtons.Left)
            {
                int x = label.Location.X + mouseEventArgs.X;
                int y = label.Location.Y + mouseEventArgs.Y;
                if (x < Interval || x > Interval + 50 * MapcellWidth)
                {
                    return;
                }
                if (y < Interval || y > Interval + 50 * MapcellHeight)
                {
                    return;
                }
                int xnum       = (x - Interval) / MapcellWidth;
                int ynum       = (y - Interval) / MapcellHeight;
                int colorstate = ColorState[xnum, ynum];
                switch (colorstate)
                {
                case -2:      //出生点:深灰色+边框
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.FixedSingle;
                    MapInfoPic.BackColor   = Color.DarkGray;
                    MapInfoWord.Text       = "这是出生点";
                    break;

                case -1:      //墙体:黑色+边框
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.FixedSingle;
                    MapInfoPic.BackColor   = Color.Brown;
                    MapInfoWord.Text       = "这是墙体";
                    break;

                case 0:       //未染色区域:淡灰
                    MapInfoPic.BackColor   = Color.LightGray;
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.None;
                    MapInfoWord.Text       = "这是未染色区域";
                    break;

                case 1:       //队伍1:淡钢青色
                    MapInfoPic.BackColor   = Color.LightSteelBlue;
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.None;
                    MapInfoWord.Text       = "这是队伍1染色区域";
                    break;

                case 2:       //队伍2:淡绿色
                    MapInfoPic.BackColor   = Color.LightGreen;
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.None;
                    MapInfoWord.Text       = "这是队伍2染色区域";
                    break;

                case 3:       //队伍3:淡蓝色
                    MapInfoPic.BackColor   = Color.LightBlue;
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.None;
                    MapInfoWord.Text       = "这是队伍3染色区域";
                    break;

                case 4:       //队伍4:淡粉色
                    MapInfoPic.BackColor   = Color.LightPink;
                    MapInfoPic.BorderStyle = (BorderStyle)FormBorderStyle.None;
                    MapInfoWord.Text       = "这是队伍4染色区域";
                    break;
                }
            }
            else if (mouseEventArgs.Button == MouseButtons.Right && !watch)
            {
                if (PlayerLabelSet.ContainsKey(selfguid))
                {
                    int             y   = this.PointToClient(Control.MousePosition).X;
                    int             x   = this.PointToClient(Control.MousePosition).Y;
                    MessageToServer msg = new MessageToServer();
                    msg.PlayerID           = playerid;
                    msg.TeamID             = teamid;
                    msg.MessageType        = MessageType.Move;
                    msg.Angle              = Math.Atan2(y - PlayerLabelSet[selfguid].label.Location.X - 7, x - PlayerLabelSet[selfguid].label.Location.Y - 6);//目前为弧度
                    msg.TimeInMilliseconds = (int)(1000.0 * Math.Sqrt(Math.Pow((double)(y - PlayerLabelSet[selfguid].label.Location.X - 7), 2) + Math.Pow((double)(x - PlayerLabelSet[selfguid].label.Location.Y - 6), 2)) * Program.cell / MapcellHeight / movespeed + 0.5);
                    //TO DO:向server发移动指令消息
                    Program.clientCommunicator.SendMessage(msg);
                }
            }
        }
示例#30
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("参数初始化完成");
    }