Websocket как сделать? - страница 4

 
Алексей Барбашин:

Федор, на чем Вы остановились?

Собственно сижу, туплю.

Вылезло окно с Usercontrol. На этом все.

 

Нашел вот такой пример:

using System;
using System.Text;
using System.Threading.Tasks;
using System.Net.WebSockets;
using System.Threading;
using System.Net;

namespace BinaryWSDemo
{
    class BinaryWS
    {
        private ClientWebSocket ws = new ClientWebSocket();
        private Uri uri = new Uri("wss://ws.binaryws.com/websockets/v3?app_id=1089");
            
        public async Task SendRequest(string data)
        {
                
                while(this.ws.State == WebSocketState.Connecting){};
            if (this.ws.State != WebSocketState.Open)
            {
                throw new Exception("Connection is not open.");
            }
            
            var reqAsBytes = Encoding.UTF8.GetBytes(data);
            var ticksRequest = new ArraySegment<byte>(reqAsBytes);

            await this.ws.SendAsync(ticksRequest,
                WebSocketMessageType.Text,
                true,
                CancellationToken.None);
            
            Console.WriteLine("The request has been sent: ");
            Console.WriteLine(data);
            Console.WriteLine("\r\n \r\n");

            
        }
        
        public async Task StartListen(){
                WebSocketReceiveResult result;
                while (this.ws.State == WebSocketState.Open){
                var buffer = new ArraySegment<byte>(new byte[1024]);
                    do
                    {
                        result = await this.ws.ReceiveAsync(new ArraySegment<byte>(buffer.Array), CancellationToken.None);

                        if (result.MessageType == WebSocketMessageType.Close)
                        {
                                Console.WriteLine("Connection Closed!");
                                break;
                        }
                        else
                        {
                            var str = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                            Console.WriteLine("Received Data at: " + DateTime.Now);
                            Console.WriteLine(str);
                            Console.WriteLine("\r\n");
                        }

                    } while (!result.EndOfMessage);
                }
        }
        
        public async Task Connect(){
                Console.WriteLine("Prepare to connect to: " + this.uri.ToString());
                Console.WriteLine("\r\n");
                
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
                await ws.ConnectAsync(uri, CancellationToken.None);
                
                Console.WriteLine("The connection is established!");
                Console.WriteLine("\r\n");
        }

        static void Main(string[] args)
        {
            
                        string data = "{\"ticks\":\"R_100\"}";
            
                        var bws = new BinaryWS();
                        bws.Connect().Wait();
                        
                        bws.SendRequest(data).Wait();
                        bws.StartListen();
            
            Console.ReadLine();
        }
    }
}

Пытаюсь его запустить в Visual Studio code это C#

 
Алексей Барбашин:

Это работать не будет. ClientWebSocket поддерживается не во всех версия windows.

Я предложил Вам проверенный способ, но Вы хотите пойти своим путем и набить свои шишки. Ваше право.

Тогда Вам в принципе не зачем лезть на шарп. Раз Вы хорошо знаете джаву, то на ней и пишите dll.

Я не говорил что хорошо знаю java. Я установил, создал проект, что дальше делать не знаю. Нужно искать примеры.

 
Алексей Барбашин:

Федор, а с какой целью ты обратился за помощью на форум? Готовый пример никто не даст, так как каждый проект по своему уникален. Только кирпичики могут быть одинаковыми. Именно их тебе и предлагают.

Давай начнем с простого: ты вообще опыт программирования имеешь? Ну хотя бы на mql? Что такое "класс" в программировании ты знаешь?

Да, конечно

 
Fedor Arkhipov:

Привет всем!

Появилась задача получать котировки с huobi через websocket и строить offline график по этим котировкам.

Я так понял, что стандартными средствами это организовать нельзя.

Появилась мысль написать dll на java и при помощи нее получать котировки.

Возможна такая реализация?

Я такого еще никогда не делал, буду очень признателен за помощь!

использовать из Mql DLL вызывающий Java, это покруче чем гланды через жп :-)

но если очень хочется, то можно. Но дополнительно надо на достаточном уровне владеть С и понимать как внутри MT устроены threads, как и когда они создаются/переделываются.

как дружить Java и C/C++ много статей, в первый-же заход в гугл даётся https://www.codeproject.com/Articles/993067/Calling-Java-from-Cplusplus-with-JNI&nbsp;

как дружить C/C++ и Mql смотрите местные статьи

можно один раз сесть и сделать прослойку Mql->(с/c++ dll)->Java. Оно видится очень матерным в плане отладки (эмоции придётся держать в узде), но один раз сделать потом пользоваться. 

PS/ и есть чувство что Mql идёт в сторону шарп, а оно с явой совсем не дружит..то есть в 6-й версии усилия пропадут зря

Calling Java from C++ with JNI
  • cth027
  • www.codeproject.com
How do we return an array of integers from Java to C++. And this question follows up to 2d and 3d arrays as well. Also what would be the method to call Java function (assuming we are calling static function). Example: ID: method = m_pJVMInstance->m_pEnv->GetStaticMethodID(class, "getIntDataS", "([Ljava/lang/String;)[I"); Calling: jint...
[Удален]  
Fedor Arkhipov:

Я не говорил что хорошо знаю java. Я установил, создал проект, что дальше делать не знаю. Нужно искать примеры.

Будьте реалистом, осилите протокол между клиентом/сервером? Берите готовую либу под биржу, иначе утоните.

 
Алексей Барбашин:

 Да, русская версия.


 
Алексей Барбашин:

По шагам пойдем? :)

Ну если вы мне поможите.
 
Алексей Барбашин:

Конечно помогу. И надеюсь не только я. Только ты постарайся активнее отвечать на сообщения.

ok
 

Сделал