// Ищет игрока, если он не найден - добавляет,
        // иначе выполняет для найденного игрока команду
        public void AddAndRun(IPEndPoint ipendpoint, Command cmd)
        {
            var client = FindClient(ipendpoint);
            if (client == null)
            {
                m_Clients.Add(client = new Client(ipendpoint));
            }

            client.AddCommand(cmd);
        }
Exemple #2
0
        public void Send(IPEndPoint ipendpoint, Command cmd)
        {
            m_Stream.SetLength(0); // Очистка потока
            m_biFormatter.Serialize(m_Stream, cmd);
            var msg = m_Stream.ToArray();
            int sended = UDP.Send(msg, msg.Length, ipendpoint);

            // Если количество переданных байтов и предназначенных для
            // отправки совпадают, то 99,9% вероятности, что они доберутся
            // до адресата.
            if (sended != msg.Length)
            {
                Console.WriteLine("Возможны проблемы при отправке {0} ({1}/{2} bytes)", cmd.Name, sended, msg.Length);
            }
        }
Exemple #3
0
        static void Main(string[] args)
        {
            /*
             * По аналогии с сервером рекомендую использовать CommandWorker
             * для отправки команд и реализовать в основном потоке
             * обработку получаемых сообщений (т.е. клиент тоже является сервером).
             * ============================
             * Мультимедия: SFML
             * База данных: PostgreSQL
             * В VS необходимо установить расширение NuGet
             * Вся игровая логика, необходимая для клиента и сервера, находится в LS_GameLogic
             * Весь сетевой интерфейс, необходимый для клиента и сервера, находится в LS_Network
             *
             * Также, для совместного использования, нужно установить расширение GitExtensions
             *
            */

            IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 15000);
            var messenger = new Messenger();

            // Отправляем запрос на соединение
            var cmd = new Command("connect",
                new KeyValuePair<string, object>("login", "vasya"),
                new KeyValuePair<string, object>("password", "pupkin")
                );
            messenger.Send(ipendpoint, cmd);

            // Получаем ответ
            /*IPEndPoint ipendpoint2 = null;
            var stream = new System.IO.MemoryStream();
            cmd = messenger.Receive(ref stream, ref ipendpoint2);
            if (cmd.Name == "connect")
            {
                if ((bool)cmd.Args["success"] == true)
                    Console.WriteLine("Вы успешно подключились к серверу!");
                else Console.WriteLine("Ошибка, при попытке подключения к серверу");
            }
            else Console.WriteLine("Получена неизвестная команда от сервера: {0}", cmd.Name);*/

            LS_GameLogic.Game game = new Game();
            game.Run();
        }
 public void RunCommand(Command cmd)
 {
     CommandWorker.Instance.RunWorkerAsync(cmd);
 }
 public void Run(Client client, Command cmd)
 {
     client.AddCommand(cmd);
 }
 public ClientCommand(Client client, Command cmd)
 {
     m_Client = client;
     this.Name = cmd.Name;
     this.Args = cmd.Args;
 }