• Как передать данные из класса третьего уровня в класс первого уровня?

    @tmtm653 Автор вопроса
    Space Purr,
    А чтобы п.3. выполнялся автоматически, можно сделать ?
    В `Globals` тоже событие делать или можно как-то получше сделать решение для автоматической передачи данных из `Globals` в класс `Form1`?
  • Как передать данные из класса третьего уровня в класс первого уровня?

    @tmtm653 Автор вопроса
    Space Purr,
    Обновил вопрос.

    Ели я правильно понял, то вы предлагаете, следующую логику:
    1. Запрос POST с JSON поступрает в класс `HttpProcessor.cs`;
    2. Событие `public event Action RequestContent;` автоматически передаёт JSON в класс `Globals`;
    3. Пользователь нажимает кнопку: данные из `Globals` переносятся в класс `Form1`;

    Вопросы.
    1. Правильно вас понял?
  • Как отправить данные из WebHook в WinForm?

    @tmtm653 Автор вопроса
    Петр @petermzg
    Пётр, я прошу прощения... если вам не трудно, не могли бы вы ещё чуток подсказать, куда двигаться..
    примеры, ссылки на документацию...

    Я про комментарий выше..

    хелп... ))))
  • Как отправить данные из WebHook в WinForm?

    @tmtm653 Автор вопроса
    Петр,
    Сделал так:
    1. С "codeproject.com" перешёл по ссылке на "github.com". ссылка (https://github.com/jeske/SimpleHttpServer).
    2. Создал проект WinForm.
    3. Добавил ссылку на библиотеку проект SimpleHttpServer
    ..\SimpleHttpServer\bin\Debug\SimpleHttpServer.dll

    4. В Form1 добавил метод
    private void Form1_Load(object sender, EventArgs e)
    {
                StartHttpServer();
    }
    
    
    static void StartHttpServer()
            {
                try
                {           
    
                    // var route_config = new List<Models.Route>()
                    var route_config = new List<Route>()
                    {
                        new Route
                        {
                            Name = "Привет обработчик (Hello Handler)",
                            UrlRegex = @"^/$",
                            Method = "GET",
    
                            Callable = (HttpRequest request) =>
                            {
                                return new HttpResponse()
                                {
                                    ContentAsUTF8 = "Привет от простого сервера Http (Hello from SimpleHttpServer)",
                                    ReasonPhrase = "OK",
                                    StatusCode = "200"
                                };
                            }
                        }, 
                        //new Route {   
                        //    Name = "FileSystem Static Handler",
                        //    UrlRegex = @"^/Static/(.*)$",
                        //    Method = "GET",
                        //    Callable = new FileSystemRouteHandler() { BasePath = @"C:\Tmp", ShowDirectories=true }.Handle,
                        //},
                    };
    
                        HttpServer httpServer = new HttpServer(8080, route_config);
    
                        Thread thread = new Thread(new ThreadStart(httpServer.Listen));
                        thread.Start();
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                    string t = ex.StackTrace;
                    // throw;
                    MessageBox.Show(s + " \r\n "
                                      + t);
                }
    
            }

    Вопросы
    1. Правильно ли я подключил сервер к WinForm?
    2. Как получить данные из POST запроса к моему приложению?
  • Как отправить данные из WebHook в WinForm?

    @tmtm653 Автор вопроса
    1.
    Я конечно не знаю, где регистрируется это webhook, но если на удаленном Viber сервере ...

    Регистрацию webhook на удаленном сервере Viber я решил.

    2.
    то он не сможет отправить вам запрос на локальный компьютер, если у вас нет выделенного IP. ...

    В Обновление_1 к вопросу я написал как я решил эту проблему.
    Вроде.

    3.
    Если web server не находиться внутри вашего WinForm приложения ...

    Может вам несложно подсказать наиболее оптимальный пример или документацию актуальные на данный момент.
    Боюсь уйти в дебри... Может есть какие особенности...
  • Как отправить данные из WebHook в WinForm?

    @tmtm653 Автор вопроса
    Обновил вопрос (см. Обновление_1).
    1. Ели я правильно понял, то два варианта:
    - Вар-1(предварительный).
    - .net mvc server - размещается на локальном компьютере;
    - WinForm" - размещается на локальном компьютере;
    - Вар-2(для эксплуатации прилож.).
    - .net mvc server - размещается на хостинге;
    - WinForm" - размещается на локальном компьютере;
    Я правильно понял ситуацию?
    В моём случае я пока рассматриваю "Вар-1".

    1.1. Если п.1 - Да. То для "Вар-1" и "Вар-2" нужно разрабатывать [web sockets]?

    2. Если я правильно понял для "Вар-1" делаем одно "решение" в котором размещаем два проекта "WinForm" и "WebApl"?
    2. 1 Если п.1 - Да. Когда приложение готово, то логика работы следующая:
    - пользователь. запускает приложение "WinForm";
    - "WinForm" запускает "WebApl";
    Я правильно понимаю?

    3. Дублирую "Вопрос-1" ТС. Как сделать, чтобы если WebHook получает POST запрос, то полученный JSON отправлялся в "WinForm"?
    Т.е. я так понимаю, в "контроллере" в методе, который получает данные через POST запрос, наверное должно быть какое-то событие, которое отправляет полученные данные в приложение "WinForm"?
  • Как правильно сделать "Webhook"?

    @tmtm653 Автор вопроса
    Вы правы.
    "RouteConfig.cs"
    Выглядит так
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace WebAppl1
    {
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    }


    HookController.cs
    Сделал метод
    [HttpPost]
            public void Index()
            // public void Index(HttpContext context)
            // public ActionResult Index(HttpContext context)
            // public ActionResult Index()
            {
                try
                {
                    // HttpContext context = new HttpContext();
    
                    // Stream s = context.Request.InputStream;
                    // Stream s = Context.Request.InputStream;
                    // or  Stream s  =  HttpContext.Current.Request.InputStream;
                    //s.Position = 0;
                    //StreamReader reader = new StreamReader(s);
                    // string jsonText = reader.ReadToEnd();
    
                    // return View(); 
                    // Other code that converts json text to classes
                }
                catch (Exception e)
                {
                    // .....
                }
            }


    Работает.
    "Postman". Нажимаю "SEND", код останавливается на точке останова в этом методе.

    Не могли бы вы подсказать ещё пару вопросов?

    Вопросы.
    1. Как работает API для моего случая?
    Документация Viber REST API - ссылка.
    Допустим я зарегистрировал адрес ВебХук на сервере Viber.
    Тогда если на сервере Viber происходят какие либо события, то на мой ВебХук будет приходить сообщения в формате JSON. Состав JSON будет в зависимости от события.
    Я правильно понял?

    2. Если вопрос "1" я правильно понял, как получить JSON, который отправляет мне Viber сервер?
    В "Postman" POST запрос с JSON я оформил так.
    5d1b3822e7a7a216571386.png