public void ConnectRoom() { MessageRoomEnter message = new MessageRoomEnter(); message.id = myId; GalaxyApi.send.SendMessageToServer((byte)CommandType.roomEnter, message, GalaxyCoreCommon.GalaxyDeliveryType.reliable); }
/// <summary> /// Отправляем игроку который хотел войти в комнату ответ с разрешением входа. /// </summary> /// <param name="clientConnection">Коннект клиента</param> private void SendRoomEnterSusses(ClientConnection clientConnection) { MessageRoomEnter message = new MessageRoomEnter(); // создаем новое сообщение message.id = this.id; // текущий ид инстанса message.name = this.name; //текущее имя инстанса clientConnection.SendMessage((byte)CommandType.roomEnter, message, GalaxyDeliveryType.reliable); // отправляем сообщение if (Server.debugLog) { Client client = Server.clientManager.GetClientByConnection(clientConnection); Console.WriteLine("Клиент ID:" + client.id + " присоеденился к комнате ID:" + this.id); } }
/// <summary> /// Реализация обработки входящих сообщений /// </summary> /// <param name="code">Код сообщения который мы приложили со стороны клиента</param> /// <param name="data">Массив байт (сообщение)</param> /// <param name="clientConnection">Экземпляр подключения клиента</param> public void IncomingMessage(byte code, byte[] data, ClientConnection clientConnection) { // распределяем сообщения по заданному нами же коду, для удобства используем Enum switch ((CommandType)code) { case CommandType.roomCreate: //передаем запрос о создании комнаты менеджер инстансов Server.instanceManager.CreateRoom(data, clientConnection); break; case CommandType.roomGetList: //Передаем запрос о получении списка комнат //По сколько этот запрос может быть довольно долгим, а время его выполнения нас не сильно волнует //мы вызываем его отдельным таском Task.Run(() => Server.instanceManager.GetAllRoomsInfo(clientConnection)); break; case CommandType.roomEnter: MessageRoomEnter message = MessageRoomEnter.Deserialize <MessageRoomEnter>(data); if (message.id == 0) { return; } Server.instanceManager.ClientEnter(message.id, clientConnection); break; //В остальных случаях отправляем сообщение в инстанс default: if (clientConnection.instanse == null) { return; } clientConnection.instanse.TossMessage(code, data, clientConnection); break; } }