/// <summary> /// Сюда нам придет запрос на авторизацию /// </summary> /// <param name="approvalConnection">Временное не авторизированное соеденение</param> /// <param name="data">Массив байт, данные присланные вместе с запросом авторизации</param> private void OnGalaxyConnect(ApprovalConnection approvalConnection, byte[] data) { Console.WriteLine("Авторизация"); MessageAuth message = MessageAuth.Deserialize <MessageAuth>(data); //преобразовывем массив байт в читабельное сообщение //тут нам следовало бы провести какую либо проверку правильности логина и пароля //Но сейчас мы не станем этого делать, и просто разрешить соеденение всем в чьих логинах содержится test if (message.login.Contains("test")) { MessageFirst response = new MessageFirst(); //Создадим пакет который мы отправим клиенту вместе с разрешением коннекта response.id = DataBaseEmitator.GetNewUserID(); // Получаем ид ClientConnection connection; // Раз мы решили авторизировать клиента, то следует создать уже постоянное соеденение connection = approvalConnection.Approve(response, response.id); // возвращяем данные вместе с разрешением, так же мы получим уже рабочий экземпляр авторизированного соеденения Client client = new Client(connection, response.id); Server.clientManager.AddClient(client); } else { //Ну а раз test в логине не нашлось, то соеденение не разрешаем //Тут нам нужно отправить два оргумента // первый это код ошибки, вы можете указать его любым, от вернется клиенту для дайнейшей обработки // второй это читабельное сообщение об ошибки, впрочим это не обязательно approvalConnection.Deny(1, "Нам не нравится ваш логин"); } }
/// <summary> /// Сюда нам придет запрос на авторизацию /// </summary> /// <param name="approvalConnection">Временное не авторизированное соеденение</param> /// <param name="data">Массив байт, данные присланные вместе с запросом авторизации</param> private void OnGalaxyConnect(ApprovalConnection approvalConnection, byte[] data) { MessageAuth message = MessageAuth.Deserialize <MessageAuth>(data); //преобразовывем массив байт в читабельное сообщение //тут нам следовало бы провести какую либо проверку правильности логина и пароля //Но сейчас мы не станем этого делать, и просто разрешить соеденение всем в чьих логинах содержится test if (message.login.Contains("test")) { MessageApproval response = new MessageApproval(); //Создадим пакет который мы отправим клиенту вместе с разрешением коннекта response.name = message.login; int clientID = Tools.GetNewID(); // Получаем ид ClientConnection connection; // Раз мы решили авторизировать клиента, то следует создать уже постоянное соеденение Client client = new Client(); // Создаем собственную реализацию клиента // возвращяем данные вместе с разрешением, так же мы получим уже рабочий экземпляр авторизированного соеденения // так же приклепляем собственную реализацию клиента, для того что бы в бущем, можно было её оперативно получить из коннекшена connection = approvalConnection.Approve(response, clientID, client); client.Init(connection, clientID); } else { //Ну а раз test в логине не нашлось, то соеденение не разрешаем //Тут нам нужно отправить два оргумента // первый это код ошибки, вы можете указать его любым, от вернется клиенту для дайнейшей обработки // второй это читабельное сообщение об ошибки, впрочим это не обязательно approvalConnection.Deny(1, "Нам не нравится ваш логин"); } }
/// <summary> /// Метод авторизации вызываемый из UI /// </summary> public void Auth() { //Создаем новое сообщение аунтефикации, которое мы положили в GalaxyTemplateCommon MessageAuth messageAuth = new MessageAuth(); if (login.text.Length < 4) { status.text = "Какой то очень короткий логин"; return; } status.text = "Подключение..."; messageAuth.login = login.text; messageAuth.password = password.text; GalaxyApi.connection.Connect(messageAuth); // Отправляем запрос на сервер }