/// <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> /// Сюда нам придет запрос на авторизацию /// </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 OnGalaxyRegistration(ApprovalConnection approvalConnection, byte[] data) { //но мы не станем пока что реализовывать регистрацию, поэтому просто её запретим для любых случаев approvalConnection.Deny(2, "Регистрация не активна"); //Обратите внимание, даже вслучае успешной авторизации желательно отправить Deny пакет. а в качестве маркера успеха использовать какой либо код ответа // например approvalConnection.Deny(0, "Регистрация успешна"); }