21

Re: Роздуми щодо клієнт-серверної взаємодії.

koala написав:

Звісно що ні. У вас є об'єкт "повідомлення" (SuperArg, якщо вам так зручно) з нащадками. Це повідомлення, звісно, має смикати не безпосередньо базу, а певний об'єкт, який і надає доступ до бази чи чогось там. Далі, гадаю, безглуздо розмовляти без коду.

ну дивітся. От є SuperArg і його нащадок TryToLogin з методом, котрий має зробити запит до БД, тут я описав код для запиту відразу в методі, але якщо навіть я створю об'єкт, до котрого буде звертатись метод Execute для доступу до БД, то всеодно ж треба, щоб цей об'єкт був описаний як в клієнті, так і на сервері?

      abstract class SuperArg
        {
            abstract public void Execute();
        }

        class TryToLogin : SuperArg
        {
            public override void Execute()
            {
                string request = "call SP_LogIn(" + "'" + log + "'" + "," + "'" + psw + "'" + ")";
                MySqlCommand myCommand = new MySqlCommand(request, myConnection);
                int value = 0;
                try
                {
                    Console.WriteLine("trying open connection to db");
                    myConnection.Open();
                    value = Int32.Parse(myCommand.ExecuteScalar().ToString());
                    myConnection.Close();
                    Console.WriteLine("value = " + value);
                    Console.WriteLine("done sending req to bd. Value = " + value);
                    conn.user_id = value;
                }
                catch (Exception e)
                {
                    myConnection.Close();
                    Console.WriteLine(e.Message);
                }
            }
        }

p.s. тут myConnection - це об'єкт MySQLConnection, котрий потрібен для доступу до БД, він десь там вище ініціалізується.

22

Re: Роздуми щодо клієнт-серверної взаємодії.

А винести його в окрему бібліотеку релігія забороняє?

23

Re: Роздуми щодо клієнт-серверної взаємодії.

koala написав:

А винести його в окрему бібліотеку релігія забороняє?

так ви хочете винести отой потрібний об'єкт в бібліотеку, а потім клієнту не підключать її, а серверу підключити?

24

Re: Роздуми щодо клієнт-серверної взаємодії.

Ви скаржилися, що треба двічі описувати - в клієнті і в сервері. Вам не видається логічним, що клієнт і сервер однієї програми користуються одними бібліотеками?
І, ще раз, об'єкт "повідомлення" не має виконувати дії на сервері самостійно, він має працювати з методами на сервері, які вже зроблять те, що треба. Тобто:

class TryToLogin:Message
{
  public string login, md5pass;
  public override void Execute()
  {
    server_main_object.requestLogin(login, md5pass);
  }
}

В результаті дані передаються в класі, а методи виконуються на сервері. От про це я кажу.
До речі, цікаво, чи можна заборонити виконання методів в одному оточенні (клієнті) і дозволити в іншому (сервері) на рівні компілятора? Гадаю, можна, але ліньки шукати. Ну, або юзати switch при десереалізації :)

25

Re: Роздуми щодо клієнт-серверної взаємодії.

koala написав:

Ви скаржилися, що треба двічі описувати - в клієнті і в сервері. Вам не видається логічним, що клієнт і сервер однієї програми користуються одними бібліотеками?
І, ще раз, об'єкт "повідомлення" не має виконувати дії на сервері самостійно, він має працювати з методами на сервері, які вже зроблять те, що треба. Тобто:

class TryToLogin:Message
{
  public string login, md5pass;
  public override void Execute()
  {
    server_main_object.requestLogin(login, md5pass);
  }
}

В результаті дані передаються в класі, а методи виконуються на сервері. От про це я кажу.
До речі, цікаво, чи можна заборонити виконання методів в одному оточенні (клієнті) і дозволити в іншому (сервері) на рівні компілятора? Гадаю, можна, але ліньки шукати. Ну, або юзати switch при десереалізації :)

а цей server_main_object має бути тілько на сервері?

26

Re: Роздуми щодо клієнт-серверної взаємодії.

Логічно, що так. До речі, це може бути єдиним параметром для Execute.

27

Re: Роздуми щодо клієнт-серверної взаємодії.

koala написав:

Логічно, що так. До речі, це може бути єдиним параметром для Execute.

так от я Вас про що й питаю, у нас є метод, котрий працює з об'єктом, котрий є лише на сервері, але метод цей описаний і на сервері, і на клієнті, то як стрічка

server_main_object.requestLogin(login, md5pass);

буде компілюватись на стороні клієнта, якщо в тому клієнті просто немає об'єкта

server_main_object

???

28

Re: Роздуми щодо клієнт-серверної взаємодії.

Десь так:

public override void Execute(Main server_main_object)
{
  server_main_object...
}

29

Re: Роздуми щодо клієнт-серверної взаємодії.

koala написав:

Десь так:

public override void Execute(Main server_main_object)
{
  server_main_object...
}

ну зрозуміло кароч хД