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