Вебсокет Websocket реализация клиента

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8
Всем привет!
Подскажите, пожалуйста, как привязать библиотеку WebSocket4Net к Zenno?
https://github.com/kerryjiang/WebSocket4Net
Добавляю в "Ссылки из GAC", но в списке библиотек она не появляется.
Или, может есть код на чистом C# или другая библиотека?
Сейчас работаю с этой библиотекой: https://github.com/sta/websocket-sharp
Но есть подозрение, что работает не совсем корректно. Хочу сравнить.
 

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8
Ошибки при подключении библиотеки такие:
Код:
Тип    Время    Сообщение
    11:36:34    Подключенее сборки к проекту D:\Program Files\(x86)\ZennoLab\RU\ZennoPoster Pro\5.17.0.0\Progs\ExternalAssemblies\WebSocket4Net45.dll не является .Net сборкой или не возможно получить доступ к сборке
Тип    Время    Сообщение
    11:36:34    "Подключенее сборки к проекту System.ApplicationException: Could not load exported type data for assembly 'WebSocket4Net, Version=0.15.2.11, Culture=neutral, PublicKeyToken=eb4e154b696bf72a' and type 'WebSocket4Net.JsonWebSocket'. ---> System.IO.FileNotFoundException: Не удалось загрузить файл или сборку ""SuperSocket.ClientEngine, Version=0.10.0.0, Culture=neutral, PublicKeyToken=ee9af13f57f00acc"" либо одну из их зависимостей. The system cannot find the file specified.
   в System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType)
   в System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters()
   в System.Reflection.RuntimeMethodInfo.GetParameters()
   в #Rye.#cze..ctor(#eze projectContent, Type type)
   в #Rye.#eze..ctor(Assembly assembly, String assemblyFullName, String assemblyLocation, String cachePath, Boolean documentationEnabled)
   --- Конец трассировки внутреннего стека исключений ---
   в #Rye.#eze..ctor(Assembly assembly, String assemblyFullName, String assemblyLocation, String cachePath, Boolean documentationEnabled)
   в ActiproSoftware.SyntaxEditor.Addons.DotNet.Dom.AssemblyCodeRepository.#2ye.#BGe(AssemblyCodeRepositoryOptions #qgb, ResolveEventHandler #B1f)
   в ActiproSoftware.SyntaxEditor.Addons.DotNet.Dom.AssemblyCodeRepository.Add(Assembly assembly, String assemblyFullName, DotNetProjectResolver projectResolver)
   в ActiproSoftware.SyntaxEditor.Addons.DotNet.Dom.DotNetProjectResolver.AddExternalReference(Assembly assembly, String assemblyFullName)
   в ZennoLab.DotNetResolver.DotNetResolver.AddExternalReference(String path)
   в ZennoLab.ProjectMaker.Controls.ProjectEditor.ProjectBar.StaticBlockSettings.GACReferences.jNVwVBFsTQGkcbG5HkQA(Object , Object )
   в ZennoLab.ProjectMaker.Controls.ProjectEditor.ProjectBar.StaticBlockSettings.GACReferences.FbUVyMmmKk(Object  , OkButtonClickArgs  )"
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
а у тебя именно WebSocket4Net45.dll компилируется при сборке ? у меня только WebSocket4Net.dll

2019-08-21_145522.png


ну и добавляется в зенно нормально

2019-08-21_145816.png
 
  • Спасибо
Реакции: vmc

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8
а у тебя именно WebSocket4Net45.dll компилируется при сборке
45 - это я версию добаивил в имя файла, вручную переименовав. Чтобы не перезапуская ПМ, протестировать сразу все .dll из файла.
Может, совсем неправильно делаю.
1. Скачиываю файл .nupkg по ссылке с гитхаба: https://www.nuget.org/api/v2/package/WebSocket4Net/0.15.2
2. Открываю его как архив
3. Внутри из папки lib пытаюсь подключить файлы WebSocket4Net.dll, лежащие в подпапках: lib\net20 .. lib\net45 и lib\netstandard1.3

То есть, сам я не компилирую, никогда не компилировал вручную .dll. Если это не сложно, можешь показать, как скомпилировать из гитхаба, чтобы приняла Зена?
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
3. Внутри из папки lib пытаюсь подключить файлы WebSocket4Net.dll, лежащие в подпапках: lib\net20 .. lib\net45 и lib\netstandard1.3
Непонятно из Вашего описания, Вы переносите файл WebSocket4Net.dll в папку ExternalAssemblies?
 
  • Спасибо
Реакции: vmc

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
я думаю что зависимости тогда не хватает SuperSocket.ClientEngine.dll, при компиляции с гитхаба получается две либы

2019-08-21_161505.png


Если это не сложно, можешь показать, как скомпилировать из гитхаба, чтобы приняла Зена?
скачиваешь zip с гитхаба, разархивируешь, запускаешь в студии файл

2019-08-21_161657.png


пересобираешь решение, на выходе получаешь dll

P.S. у меня с nuget тоже не хотит зенно принимать
 
  • Спасибо
Реакции: vmc

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
DLL
 

Вложения

  • 43,9 КБ Просмотры: 150
  • Спасибо
Реакции: vmc

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8
Благодарю за библиотеки!
Библиотека появилась в списке. Буду кодить)
Studio запустил, у меня триальная, срок закончился. Зарегистрирую и скомпилирую.
Ещё раз огромное спасибо!
 

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8
@ssXXXss
Библиотеку загрузил, не могу понять, как открыть вебсокет и попасть вовнутрь "слушания потока".
В ранее использованной библиотеке websocket-sharp есть событие
Код:
ws.OnMessage += (sender, e) => {
}
Внутри которого могу обращаться к переменной e.
Можете показать участок кода, как сделать подобное в WebSocket4Net?

Затык в том, что в примере указываются функции, у которых в аргументах другие функции. Как это реализовать в Зене, не совсем понимаю.
Код:
using WebSocket4Net;
WebSocket websocket = new WebSocket("ws://localhost:2012/");
websocket.Opened += new EventHandler(websocket_Opened);
websocket.Error += new EventHandler<ErrorEventArgs>(websocket_Error);
websocket.Closed += new EventHandler(websocket_Closed);
websocket.MessageReceived += new EventHandler(websocket_MessageReceived);
websocket.Open();

private void websocket_Opened(object sender, EventArgs e)
{
     websocket.Send("Hello World!");
}
 
Последнее редактирование:

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Библиотеку загрузил, не могу понять, как открыть вебсокет и попасть вовнутрь "слушания потока".
я честно с ней не работал, но простой пример так можно

2019-08-21_233700.png


P.S. по подсказкам только так как нет примеров на гитхабе, а так даже не подскажу
 
  • Спасибо
Реакции: vmc

vmc

Client
Регистрация
15.03.2015
Сообщения
72
Благодарностей
13
Баллы
8

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
  • Спасибо
Реакции: vmc

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
общий код

C#:
using WebSocket4Net;

namespace TEST
{
    public class TestSocket
    {
        public WebSocket websocket;
     
        public void openConnection(IZennoPosterProjectModel project)
        {
            websocket = new WebSocket("ws://example.com");
            websocket.Opened += new EventHandler(websocket_Opened);
            websocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(websocket_Error);
            websocket.Closed += new EventHandler(websocket_Closed);
            websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(websocket_MessageReceived);
            websocket.DataReceived += new EventHandler<DataReceivedEventArgs>(websocket_MessageReceived);
         
            websocket.Open();
            websocket.Dispose();
        }
     
        private void websocket_Opened(object sender, EventArgs e)
        {
             websocket.Send("Hello World!");
        }
     
        private void websocket_MessageReceived(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        private void websocket_Closed(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        private void websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
        {
            throw new NotImplementedException();
        }
    }
}
вызываем

C#:
var rec = new TEST.TestSocket();
rec.openConnection(project);
что делает код я не знаю, уже говорил что с вебсокетом не работал, но есть одна проблемка, если закоментить строку websocket.Dispose(); то РМ вылетает, а так отрабатывает

туплю))) надо было в using обернуть, ну или получается dispose вызывать

C#:
using WebSocket4Net;

namespace TEST
{
    public class TestSocket
    {
        public WebSocket websocket;
       
        public void openConnection(IZennoPosterProjectModel project)
        {
            using (var websocket = new WebSocket("ws://example.com"))
            {
                websocket.Opened += new EventHandler(websocket_Opened);
                websocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(websocket_Error);
                websocket.Closed += new EventHandler(websocket_Closed);
                websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(websocket_MessageReceived);
                websocket.DataReceived += new EventHandler<DataReceivedEventArgs>(websocket_MessageReceived);
               
                websocket.Open();
            }
        }
       
        private void websocket_Opened(object sender, EventArgs e)
        {
             websocket.Send("Hello World!");
        }
       
        private void websocket_MessageReceived(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        private void websocket_Closed(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

        private void websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
        {
            throw new NotImplementedException();
        }
    }
}
 
Последнее редактирование:
  • Спасибо
Реакции: vmc

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)