using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WebSocket4Net;
// https://archive.codeplex.com/?p=websocket4net
namespace TopNugetPackages
{
public class WebSocketMainDriver : ITopNugetPackages
{
private WebSocket websocket = null;
private readonly string UserId = "TIM";
private readonly string LoginKey = "sp";
private readonly int AppId = 3;
private readonly string VersionNo = "8.7";
private readonly string ReleaseNo = "1.0";
private readonly string BuildNo = "1.0";
private readonly string SystemId = "SP_F";
private readonly int LangNo = 0;
private bool _loggedIn = false;
public WebSocketMainDriver()
{
websocket = new WebSocket("ws://192.168.123.136:8063/");
websocket.Opened += Websocket_Opened;
websocket.Error += Websocket_Error;
websocket.Closed += Websocket_Closed;
websocket.MessageReceived += Websocket_MessageReceived;
websocket.DataReceived += Websocket_DataReceived;
websocket.Open();
}
private void Websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
{
}
private void Websocket_Closed(object sender, EventArgs e)
{
}
private void Websocket_Opened(object sender, EventArgs e)
{
// login
var LoginTime = DateTime.Now.ToFileTime();
var loginStr = string.Format($"4104,0,{UserId},{LoginKey},{AppId},{VersionNo},{ReleaseNo},{BuildNo},{SystemId},{LoginTime},{LangNo}\r\n");
websocket.Send(loginStr);
}
private void Websocket_DataReceived(object sender, DataReceivedEventArgs e)
{
var str = Encoding.Default.GetString(e.Data);
if (str != null)
HandleReceived(str);
}
private void Websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
{
HandleReceived(e.Message);
}
private void OnError(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
{
}
private void HandleReceived(string data)
{
if (data.StartsWith("4104"))
{
if (data.EndsWith("0\r\n"))
{
_loggedIn = true;
websocket.Send("4107,0,HSIH1,0,1,0"); // subscribe price
}
}
else if (data.StartsWith("4102"))
{
Console.WriteLine(data); // price response data
}
}
// Sample to use Websocket4Net
// Connect, send and receive data
public void DoIt()
{
Thread.Sleep(100000);
}
}
}