Esempio n. 1
0
        /// <summary>
        /// 转发协议
        /// </summary>
        /// <param name="args">协议包</param>
        protected void Shoot(ReceivedEventArgs args)
        {
            Shoot_Request request = new Shoot_Request();

            ByteFormatter.Deserialize(request, args.Buffer, ProtocolHead.HeadSize);
            IPEndPoint   remoteEndPoint = new IPEndPoint(request.RemoteIp, request.RemotePort);
            SocketResult result         = SendAsync(request.Tag,
                                                    remoteEndPoint,
                                                    request.Buffer,
                                                    p => p.ProtocolId == request.ProtocolId,
                                                    p =>
            {
                Shoot_Response shoot = new Shoot_Response
                {
                    Result = Convert.ToByte(SocketResult.Success),
                    Buffer = p.Buffer
                };
                List <byte> responseBuffer = Protocol.Response(args.TimeStamp, shoot);
                args.Channel.Send(args.RemoteEndPoint, responseBuffer);
            });

            if (result != SocketResult.Success)
            {
                Shoot_Response response = new Shoot_Response
                {
                    Result = Convert.ToByte(result),
                    Buffer = new List <byte>()
                };
                args.Channel.Send(remoteEndPoint, Protocol.Response(args.TimeStamp, response));
            }
        }
Esempio n. 2
0
        private void buttonInboundSend_Click(object sender, EventArgs e)
        {
            string sendData = this.textBoxClientSend.Text;
            //SocketResult result = SocketHelper.SendData("127.0.0.1", (int)this.numericUpDownClientPort.Value, sendData);

            SocketConfig config = new SocketConfig();

            config.Port           = (int)this.numericUpDownClientPort.Value;
            config.IPAddress      = "127.0.0.1";
            config.SendEndSign    = "</XMLRequestMessage>";
            config.ReceiveEndSign = "</XMLResponseMessage>";
            config.IncludeHeader  = false;

            SocketResult result = SocketHelper.SendData(config, sendData);

            if (result.Type == SocketResultType.Success)
            {
                this.textBoxClientReceive.Text = result.ReceivedString;
            }
            else
            {
                //MessageBox.Show(result.ExceptionInfor, result.Type.ToString());
            }
            Application.DoEvents();
        }
Esempio n. 3
0
        private static async Task Server_OnAccepted(IOCPBase server, int num, System.Net.Sockets.Socket socket)
        {
            while (true)
            {
                try
                {
                    SocketResult result = await server.SendAsync(socket, Encoding.UTF8.GetBytes(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));

                    Console.WriteLine("send result:" + result.SocketError);
                    if (result.SocketError != System.Net.Sockets.SocketError.Success)
                    {
                        server.CloseClientSocket(socket);
                        return;
                    }
                    result = await server.ReceiveAsync(socket);

                    Console.WriteLine("receive result:" + result.SocketError);
                    if (result.SocketError != System.Net.Sockets.SocketError.Success)
                    {
                        server.CloseClientSocket(socket);
                        return;
                    }
                    await Task.Delay(1000);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("error:" + ex.Message);
                    server.CloseClientSocket(socket);
                    return;
                }
            }
        }
        public override void Execute(SocketServer server, SocketSession session, SockectRequestMessage requestInfo)
        {
            try
            {
                SubscribeItem subscribeItem;
                if (requestInfo.TryReadFromJsonStream(out subscribeItem))
                {
                    var _MQMServer = (MQMServer)server;
                    _MQMServer.MessageQueueAgent.Subscribe(subscribeItem.PublisherId, subscribeItem);
                    var result = SocketResult <string> .Create(message : "订阅主题成功!");

                    session.SendObjectToJsonStream(RouteCode, result);
                }
            }
            catch (NotAuthenticationException)
            {
                var result = SocketResult <string> .Create(code : "500", message : "未经授权的操作!");

                session.SendObjectToJsonStream(RouteCode, result);
            }
            catch (Exception ex)
            {
                var result = SocketResult <string> .Create(code : "600", message : string.Format("订阅主题过程中发生无法预知错误,{0}!", ex.Message));

                session.SendObjectToJsonStream(RouteCode, result);
            }
        }
Esempio n. 5
0
 /// <summary>
 /// 向所有监听客户端发送数据
 /// </summary>
 /// <param name="target">监听目标</param>
 /// <param name="data">数据</param>
 /// <param name="endMessage">是否末尾数据</param>
 /// <returns></returns>
 async Task IWebSocket.SendListenerAsync(string target, SocketResult data, bool?endMessage)
 {
     foreach (var client in m_socket_listener[target])
     {
         await client.SendAsync(data, endMessage);
     }
 }
Esempio n. 6
0
        public override void Execute(SocketServer server, SocketSession session, SockectRequestMessage requestInfo)
        {
            try
            {
                PublisherInformaction publisher;
                if (requestInfo.TryReadFromJsonStream(out publisher))
                {
                    var _MQMServer = (MQMServer)server;
                    if (_MQMServer.MessageQueueAgent.Authentication(new ClientIndetity()
                    {
                        IsWebSite = publisher.IsWebSite, PublisherId = publisher.PublisherId, SessionId = session.SessionID, WebSiteHost = publisher.WebSiteHost
                    }, publisher.MQMToken))
                    {
                        var result = SocketResult <string> .Create(message : "欢迎登录消息中间件!");

                        session.SendObjectToJsonStream(RouteCode, result);
                    }
                }
            }
            catch (NotAuthenticationException)
            {
                var result = SocketResult <string> .Create(code : "501", message : "授权登陆失败!");

                session.SendObjectToJsonStream(RouteCode, result);
            }
            catch (Exception ex)
            {
                var result = SocketResult <string> .Create(code : "600", message : string.Format("授权登陆过程中发生无法预知错误,{0}!", ex.Message));

                session.SendObjectToJsonStream(RouteCode, result);
            }
        }
Esempio n. 7
0
 void error(SocketResult _result, string _msg)
 {
     Debug.LogErrorFormat("[ClientBase.error] state = {2} , result = {0} , msg = {1}", _result, _msg, State);
     if (State != ClientState.Closed)
     {
         OnError(_result, _msg);
     }
 }
Esempio n. 8
0
        public bool SendMLLPNotification(string hl7msg)
        {
            _entity.Context.Log.Write("Begin sending HL7 notification.");
            SocketResult ret = _client.SendData(hl7msg);

            _entity.Context.Log.Write(string.Format("End sending HL7 notification. Result: {0}.", ret.Type.ToString()));
            //SendLogMessage(hl7msg, ret);
            return(ret.Type == SocketResultType.Success);
        }
Esempio n. 9
0
 /// <summary>
 /// 发送数据
 /// </summary>
 /// <param name="data">数据</param>
 /// <param name="endMessage">是否末尾数据</param>
 async Task IWebSocket.SendAsync(SocketResult data, bool?endMessage)
 {
     ArraySegment <byte> arg = new ArraySegment <byte>(
         UTF8Encoding.Default.GetBytes(
             JsonConvert.SerializeObject(data)
             )
         );
     await m_socket.SendAsync(arg, WebSocketMessageType.Text, endMessage.GetValueOrDefault(true), CancellationToken.None);
 }
Esempio n. 10
0
 /// <summary>
 /// 传输数据
 /// </summary>
 /// <param name="SendType"></param>
 /// <param name="Result"></param>
 /// <param name="Session"></param>
 /// <param name="SendPort"></param>
 /// <returns></returns>
 public static SocketMiddleData Middle(SendTypeEnum SendType, SocketResult Result, SocketSession Session = null, int?SendPort = null)
 {
     return(new SocketMiddleData()
     {
         SendType = SendType,
         MiddleResult = Result,
         Session = Session,
         SendPort = SendPort
     });
 }
Esempio n. 11
0
        public bool SendMLLPQuery(string query, out string result)
        {
            _entity.Context.Log.Write("Begin sending HL7 query.");
            SocketResult ret = _client.SendData(query);

            _entity.Context.Log.Write(string.Format("End sending HL7 query. Result: {0}.", ret.Type.ToString()));
            result = ret.ReceivedString;
            //SendLogMessage(query, ret);
            return(ret.Type == SocketResultType.Success);
        }
Esempio n. 12
0
        private void SenderMessage()
        {
            Program.Context.Log.Write(LogType.Information, string.Format("Thread {0} is start...", Thread.CurrentThread.ManagedThreadId));

            string strSend = _strSendMsg;

            strSend = strSend.Replace("\r\n", "\r");

            SocketClient       client    = new SocketClient();
            SocketClientConfig clientCfg = new SocketClientConfig();

            clientCfg.SendTimeout    = Program.Context.ConfigMgr.Config.SocketConfig.SendTimeout;
            clientCfg.ReceiveTimeout = Program.Context.ConfigMgr.Config.SocketConfig.ReceiveTimeout;
            clientCfg.ReceiveResponseBufferSizeKB = Program.Context.ConfigMgr.Config.SocketConfig.ReceiveResponseBufferSizeKB;
            clientCfg.CodePageCode = Program.Context.ConfigMgr.Config.SocketConfig.CodePageCode;
            clientCfg.CodePageName = Program.Context.ConfigMgr.Config.SocketConfig.CodePageName;
            clientCfg.IPAddress    = _strIPAddr;
            clientCfg.Port         = _iPort;

            //Thread.Sleep(100000);
            DateTime     dtBegin = DateTime.Now;
            SocketResult result  = client.SendData(clientCfg, strSend);
            DateTime     dtEnd   = DateTime.Now;

            TimeSpan procTime = dtEnd.Subtract(dtBegin);

            if (result.Type == SocketResultType.Success)
            {
                Program.Context.Log.Write(string.Format("Thread {0} send HL7 message success", Thread.CurrentThread.ManagedThreadId));
                if (_bDumpResponse)
                {
                    Program.Context.Log.Write(LogType.Information, result.ReceivedString);
                }
            }
            else
            {
                Program.Context.Log.Write(string.Format("Thread {0} send HL7 message failed.", Thread.CurrentThread.ManagedThreadId));
            }

            lock (this)
            {
                _currentNumber--;
            }

            Program.Context.Log.Write(LogType.Information, string.Format("Thread {0} is end", Thread.CurrentThread.ManagedThreadId));
            Program.Context.Log.Write(LogType.Information, string.Format("-----------Thread {0} is sumary -----------------", Thread.CurrentThread.ManagedThreadId));
            Program.Context.Log.Write(LogType.Information, "\tStart at " + dtBegin.ToString("yyyy-MM-dd HH:mm:ss.fffffff"));
            Program.Context.Log.Write(LogType.Information, "\tEnd at " + dtEnd.ToString("yyyy-MM-dd HH:mm:ss.fffffff"));
            Program.Context.Log.Write(LogType.Information, "\tProcess Time :  " + procTime.TotalMilliseconds);
            Program.Context.Log.Write(LogType.Information, "--------------------------------------------------------");
        }
Esempio n. 13
0
        private void buttonSend_Click(object sender, EventArgs e)
        {
            string strIP      = this.textBoxIP.Text;
            int    numPort    = (int)this.numericUpDownPort.Value;
            string strSend    = this.textBoxSend.Text;
            string strReceive = string.Empty;

            if (this.checkBoxReplace0D.Checked)
            {
                strSend = strSend.Replace("\r\n", "\r");    // replace ODOA with OD
            }

            SocketClient       client    = new SocketClient();
            SocketClientConfig clientCfg = new SocketClientConfig();

            clientCfg.SendTimeout    = Program.Context.ConfigMgr.Config.SocketConfig.SendTimeout;
            clientCfg.ReceiveTimeout = Program.Context.ConfigMgr.Config.SocketConfig.ReceiveTimeout;
            clientCfg.ReceiveResponseBufferSizeKB = Program.Context.ConfigMgr.Config.SocketConfig.ReceiveResponseBufferSizeKB;
            clientCfg.CodePageCode = Program.Context.ConfigMgr.Config.SocketConfig.CodePageCode;
            clientCfg.CodePageName = Program.Context.ConfigMgr.Config.SocketConfig.CodePageName;
            clientCfg.IPAddress    = strIP;
            clientCfg.Port         = numPort;

            DateTime     dtBegin = DateTime.Now;
            SocketResult result  = client.SendData(clientCfg, strSend);
            DateTime     dtEnd   = DateTime.Now;

            TimeSpan procTime = dtEnd.Subtract(dtBegin);

            this.labelProcessingTime.Text = string.Format("in {0} ms.", procTime.TotalMilliseconds.ToString());

            if (result.Type == SocketResultType.Success)
            {
                UpdateGUIHandler d = delegate(string content)
                {
                    this.textBoxReceive.Text = content.Replace("\r", "\r\n");
                };
                this.textBoxReceive.Invoke(d, result.ReceivedString);
            }
            else
            {
                MessageBox.Show(this,
                                string.Format("Result: {0}\r\n\r\nInformation:{1}",
                                              result.Type.ToString(),
                                              result.ExceptionInfor),
                                this.Text,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);
            }
        }
Esempio n. 14
0
 /// <summary>
 /// 向所有客户端发送数据
 /// </summary>
 /// <param name="data">数据</param>
 /// <param name="endMessage">是否末尾数据</param>
 async Task IWebSocket.SendAllAsync(SocketResult data, bool?endMessage)
 {
     foreach (var item in m_socket_list)
     {
         if (item.Socket.State == WebSocketState.Open)
         {
             await item.SendAsync(data, endMessage.GetValueOrDefault(true));
         }
         else
         {
             m_socket_list.Remove(item);
         }
     }
 }
Esempio n. 15
0
        /// <summary>
        /// 发送字节流
        /// </summary>
        /// <param name="remoteEndPoint">udp远程地址,如果为null表示tcp发送</param>
        /// <param name="buffer">字节流</param>
        /// <param name="match">响应匹配函数,不使用匹配标识不等待响应</param>
        /// <param name="action">成功响应后的异步回调,默认为null,表示同步等待响应</param>
        /// <param name="receiveBuffer">同步等待响应后得到的响应字节流,默认为null</param>
        /// <param name="timeout">等待响应时间,默认为3秒</param>
        /// <returns>发送结果</returns>
        public SocketResult Send(IPEndPoint remoteEndPoint, List <byte> buffer, Func <ReceivedEventArgs, bool> match = null, Action <ReceivedEventArgs> action = null, List <byte> receiveBuffer = null, int timeout = 3000)
        {
            if (match == null)
            {
                return(SendCore(remoteEndPoint, buffer));
            }
            else
            {
                long timeStamp = TimeStampConvert.ToUtcTimeStamp();
                if (action == null)
                {
                    AutoResetEvent resetEvent = new AutoResetEvent(false);
                    lock (_lockObj)
                    {
                        _responseItems.AddLast(new ResponseItem
                        {
                            Match         = match,
                            Action        = null,
                            ReceiveBuffer = receiveBuffer,
                            ResetEvent    = resetEvent,
                            TimeStamp     = timeStamp + timeout
                        });
                    }

                    SocketResult result = SendCore(remoteEndPoint, buffer);
                    if (result == SocketResult.Success)
                    {
                        result = resetEvent.WaitOne(timeout) ? SocketResult.Success : SocketResult.Timeout;
                    }
                    return(result);
                }
                else
                {
                    lock (_lockObj)
                    {
                        _responseItems.AddLast(new ResponseItem
                        {
                            Match         = match,
                            Action        = action,
                            ReceiveBuffer = receiveBuffer,
                            ResetEvent    = null,
                            TimeStamp     = timeStamp + timeout
                        });
                    }
                    return(SendCore(remoteEndPoint, buffer));
                }
            }
        }
Esempio n. 16
0
        /// <summary>
        /// 接收数据
        /// </summary>
        /// <returns></returns>
        async Task <SocketResult> IWebSocket.ReceiveAsync()
        {
            byte[] buffer = new byte[2048];

            var data = await m_socket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

            UTF8Encoding.Default.GetString(buffer);
            int count = 0;

            for (; count < buffer.Length; count++)
            {
                if (buffer[count] == '\0')
                {
                    break;
                }
            }
            string rcv_data = UTF8Encoding.Default.GetString(buffer, 0, count);
            //return JObject.Parse(rcv_data);
            JObject      json = JObject.Parse(rcv_data);
            SocketResult res  = new SocketResult(json["target"].ToString(), json["method"].ToString(), json["data"]);

            return(res);
        }
Esempio n. 17
0
        public HitbtcApiResult <int> SubscribeTicker(string symbol, Action <SocketData <TickerData> > onUpdate)
        {
            SocketResult          SocketResult = null;
            HitbtcApiResult <int> ApiResult    = new HitbtcApiResult <int>();

            int       streamId  = WebSocketList.Any() ? WebSocketList.Keys.Max() + 1 : 1;
            WebSocket WebSocket = new WebSocket(this.SocketUri);

            ConfigSecurity(WebSocket);

            WebSocket.Opened += new EventHandler((sender, e) =>
            {
                Dictionary <string, object> send = new Dictionary <string, object>();
                {
                    send.Add("method", "subscribeTicker");
                    send.Add("params", new Dictionary <string, string>()
                    {
                        { "symbol", symbol }
                    });
                    send.Add("id", streamId);
                };
                WebSocket.Send(JsonConvert.SerializeObject(send));
            });

            WebSocket.MessageReceived += new EventHandler <MessageReceivedEventArgs>((sender, e) =>
            {
                if (SocketResult == null)
                {
                    SocketResult = JsonConvert.DeserializeObject <SocketResult>(e.Message);

                    if (!SocketResult.Status)
                    {
                        OnError(sender, SocketResult.Error);
                    }
                }
                else
                {
                    SocketData <TickerData> SocketData = JsonConvert.DeserializeObject <JObject>(e.Message).ToObject <SocketData <TickerData> >();
                    if (SocketData.Data != null)
                    {
                        onUpdate(SocketData);
                    }
                }
            });

            ErrorMessage error = null;

            WebSocket.Error += new EventHandler <ErrorEventArgs>((sender, e) =>
            {
                error = new ErrorMessage()
                {
                    Message = e.Exception.Message
                };
                OnError(sender, error);
            });

            WebSocket.Closed += new EventHandler((sender, e) =>
            {
                WebSocket.Dispose();
                if (error == null)
                {
                    OnClose(sender, e);
                }
            });

            WebSocket.Open();
            WebSocketList.Add(streamId, WebSocket);
            ApiResult.Data = streamId;

            return(ApiResult);
        }
Esempio n. 18
0
        private void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            _timer.Stop();
            Program.Log.Write("# Timer tick begin.", XIMClientHelper.ModuleName);

            int index = 0;

            foreach (XIMOutboundMessage msg in Program.ConfigMgt.Config.Messages)
            {
                try
                {
                    index++;
                    List <XIMWrapper> resultList = null;
                    string            strPrefix  = "(" + index.ToString() + ") ";
                    Program.Log.Write(strPrefix + "Begin processing message (" + msg.GWEventType.ToString() + ") to (" + msg.HL7EventType.ToString() + ").", XIMClientHelper.ModuleName);

                    #region Data Processing

                    DataSet dataSet = _service.RequestData(msg.Rule, null);
                    if (dataSet == null)
                    {
                        Program.Log.Write(LogType.Warning, "Query data from GC Gateway database failed.");
                    }
                    else
                    {
                        List <DataSet> splitedDataSet = XIMClientHelper.SplitDataSet(dataSet);
                        if (splitedDataSet == null || splitedDataSet.Count < 1)
                        {
                            Program.Log.Write(LogType.Warning, "No record found in GC Gateway database query result.");
                        }
                        else
                        {
                            Program.Log.Write(strPrefix + "Query data from GC Gateway database succeeded (Record count:" + splitedDataSet.Count.ToString() + ").");
                            XMLTransformer transformer = XMLTransformer.CreateFromMessage(msg);
                            if (transformer == null)
                            {
                                Program.Log.Write(LogType.Warning, "Cannot find mapping XSL file for current message (XSL File:" + msg.XSLFileName + ").");
                            }
                            else
                            {
                                resultList = XIMClientHelper.Transform(transformer, splitedDataSet);
                                if (resultList == null || resultList.Count < 1)
                                {
                                    Program.Log.Write(LogType.Warning, "Transform from DataSet xml to XIM xml failed (XSL File:" + msg.XSLFileName + ").");
                                }
                                else
                                {
                                    Program.Log.Write(strPrefix + "Transform from DataSet xml to XIM xml succeeded (Document count:" + resultList.Count.ToString() + ").");
                                    if (resultList.Count > 1 && Program.ConfigMgt.Config.EnableDataMerging)
                                    {
                                        int pkIndex = Program.ConfigMgt.Config.DataMergingPKIndex;
                                        resultList = XIMClientHelper.MergeProcedureStep(resultList, pkIndex);
                                        if (resultList == null || resultList.Count < 1)
                                        {
                                            Program.Log.Write(LogType.Warning, "SPS merging failed (PK Index:" + pkIndex.ToString() + ").");
                                        }
                                        else
                                        {
                                            Program.Log.Write(strPrefix + "SPS merging succeeded (PK Index:" + pkIndex.ToString() + ") (Document count:" + resultList.Count.ToString() + ").");
                                        }
                                    }
                                    else
                                    {
                                        Program.Log.Write(strPrefix + "Skip SPS merging.");
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    #region Data Sending

                    if (resultList == null || resultList.Count < 1)
                    {
                        Program.Log.Write(LogType.Warning, "No availiable XIM document, skip data sending.");
                    }
                    else
                    {
                        int ximIndex = 1;
                        Program.Log.Write(strPrefix + "Sending XIM document...");
                        foreach (XIMWrapper xim in resultList)
                        {
                            string ximLogIndex = "(" + (ximIndex++).ToString() + "/" + resultList.Count.ToString() + ")";

                            bool result = false;
                            if (Program.ConfigMgt.Config.OutboundToFile)
                            {
                                result = !XIMClientHelper.SaveToFile(Program.ConfigMgt.Config, xim.XIMDocument);
                            }
                            else
                            {
                                SocketResult res = SocketHelper.SendData(Program.ConfigMgt.Config.SocketConfig, xim.XIMDocument);
                                result = (res == null || res.Type != SocketResultType.Success);
                            }

                            if (result)
                            {
                                Program.Log.Write(LogType.Warning, "Send XIM document failed. " + ximLogIndex);
                            }
                            else
                            {
                                Program.Log.Write(strPrefix, "Send XIM document succeeded. " + ximLogIndex);
                                if (_service.DischargeData(xim.GUIDList.ToArray()))
                                {
                                    Program.Log.Write(strPrefix, "Discharge data succeeded. " + ximLogIndex);
                                }
                                else
                                {
                                    Program.Log.Write(LogType.Warning, "Discharge data failed. " + ximLogIndex);
                                }
                            }
                        }
                        Program.Log.Write(strPrefix + "Send XIM document completed.");
                    }

                    #endregion

                    Program.Log.Write(strPrefix + "End processing message.", XIMClientHelper.ModuleName);
                }
                catch (Exception err)
                {
                    Program.Log.Write(err);
                }
            }

            Program.Log.Write("# Timer tick end.", XIMClientHelper.ModuleName);
            _timer.Start();
        }
Esempio n. 19
0
        private bool SendMessages(IClient cln)
        {
            if (cln == null)
            {
                return(false);
            }

            if (this.listViewMessage.Items.Count < 1)
            {
                MessageBox.Show(this,
                                "There are no HL7 message files in the list. Please click \"Reload Files\" to load the list first.",
                                this.Text,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
                return(false);
            }

            string folder    = this.textBoxPath.Text.Trim();
            string ackFolder = Path.Combine(folder, "ack");

            try
            {
                if (!Directory.Exists(ackFolder))
                {
                    Directory.CreateDirectory(ackFolder);
                }

                foreach (ListViewItem i in this.listViewMessage.Items)
                {
                    string fn = i.Text;
                    string f  = i.Tag as string;

                    string msg = "";
                    using (StreamReader sr = File.OpenText(f))
                    {
                        msg = sr.ReadToEnd();
                    }
                    msg = msg.Replace("\r\n", "\r");

                    DateTime     dtBegin = DateTime.Now;
                    SocketResult result  = cln.SendData(msg);
                    DateTime     dtEnd   = DateTime.Now;

                    if (result.Type == SocketResultType.Success)
                    {
                        string ackfn = fn + ".ack.txt";
                        string ackf  = Path.Combine(ackFolder, ackfn);
                        using (StreamWriter sw = File.CreateText(ackf))
                        {
                            sw.Write(result.ReceivedString);
                        }

                        i.SubItems[1].Text = ackfn;
                    }
                    else
                    {
                        i.SubItems[1].Text = result.Type.ToString() + ":" + result.ExceptionInfor;
                        break;
                    }

                    TimeSpan procTime = dtEnd.Subtract(dtBegin);
                    i.SubItems[2].Text = procTime.TotalMilliseconds.ToString();
                    i.SubItems[3].Text = dtBegin.ToString(LogHelper.DateTimeFomat);
                    i.SubItems[4].Text = dtEnd.ToString(LogHelper.DateTimeFomat);

                    Application.DoEvents();
                }

                return(true);
            }
            catch (Exception err)
            {
                Program.Context.Log.Write(err);
                MessageBox.Show(this,
                                "Error when sending HL7 message. \r\n\r\n" + err.Message,
                                this.Text,
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Warning);
                return(false);
            }
        }
Esempio n. 20
0
        public HuobiApiResult <int> SubscribeTicker(string symbol, Action <SocketData <TickerData> > onUpdate)
        {
            PingPong             pong;
            SocketResult         SocketResult = null;
            HuobiApiResult <int> ApiResult    = new HuobiApiResult <int>();

            int       streamId  = WebSocketList.Any() ? WebSocketList.Keys.Max() + 1 : 1;
            WebSocket WebSocket = new WebSocket(this.SocketUrl, sslProtocols: SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls);

            ConfigSecurity(WebSocket);

            WebSocket.Opened += new EventHandler((sender, e) =>
            {
                Dictionary <string, object> send = new Dictionary <string, object>();
                {
                    send.Add("sub", string.Format("market.{0}.depth.step0", symbol));
                    send.Add("id", streamId);
                };
                WebSocket.Send(JsonConvert.SerializeObject(send));
            });

            WebSocket.DataReceived += new EventHandler <DataReceivedEventArgs>((sender, e) =>
            {
                string result = ConvertGZIPtoJSON(e.Data);

                using (pong = JsonConvert.DeserializeObject <PingPong>(result))
                {
                    if (!pong.pong.Equals(0))
                    {
                        WebSocket.Send(JsonConvert.SerializeObject(new Dictionary <string, long>()
                        {
                            { "pong", pong.pong }
                        }));
                    }
                    else
                    {
                        if (SocketResult == null)
                        {
                            SocketResult = JsonConvert.DeserializeObject <SocketResult>(result);
                            if (SocketResult.Status.Equals("error"))
                            {
                                SocketResult.Error = JsonConvert.DeserializeObject <ErrorMessage>(result);
                                OnError(sender, SocketResult.Error);
                            }
                        }
                        else
                        {
                            try
                            {
                                var data = JsonConvert.DeserializeObject <JObject>(result);
                                SocketData <TickerData> SocketData = data.ToObject <SocketData <TickerData> >();
                                if (SocketData.Method != null)
                                {
                                    SocketData.Data = data.SelectToken("tick").ToObject <TickerData>();
                                    onUpdate(SocketData);
                                }
                            }
                            catch (Exception ex)
                            {
                                OnError(sender, new ErrorMessage()
                                {
                                    Message = ex.Message
                                });
                            }
                        }
                    }
                }
            });

            ErrorMessage error = null;

            WebSocket.Error += new EventHandler <SuperSocket.ClientEngine.ErrorEventArgs>((sender, e) =>
            {
                error = new ErrorMessage()
                {
                    Message = e.Exception.Message
                };
                OnError(sender, error);
            });

            WebSocket.Closed += new EventHandler((sender, e) =>
            {
                WebSocket.Dispose();
                if (error == null)
                {
                    OnClose(sender, e);
                }
            });

            WebSocket.Open();
            WebSocketList.Add(streamId, WebSocket);
            ApiResult.Data = streamId;

            return(ApiResult);
        }
Esempio n. 21
0
 protected virtual void OnError(SocketResult _result, string _msg)
 {
     State = ClientState.Disconnected;
     disconnect();
 }
Esempio n. 22
0
        internal void Loop()
        {
            try
            {
                // ReSharper disable once TooWideLocalVariableScope
                byte[] data;
                // ReSharper disable once TooWideLocalVariableScope
                SocketResult <SocketClient> result;
                // ReSharper disable once TooWideLocalVariableScope
                int length;
                while (loopFlag)
                {
                    try
                    {
                        data   = new byte[1024];
                        length = -1;
                        length = socket.Receive(data);

                        if (length < 1)
                        {
                            continue;
                        }

                        byte[] tmp = new byte[length];
                        Buffer.BlockCopy(data, 0, tmp, 0, length);

                        result = null;
                        //this.RemoteEndPoint = socket.RemoteEndPoint;
                        result = new SocketResult <SocketClient>()
                        {
                            Socket = this, Bytes = tmp, OnData = OnData
                        };

                        Thread processThread = new Thread(ProcessData <SocketClient>)
                        {
                            IsBackground = true
                        };
                        processThread.Start(result);
                    }
                    catch (SocketException ex)
                    {
                        Console.WriteLine(ex.Message);
                        if (ex.SocketErrorCode == SocketError.ConnectionReset || ex.SocketErrorCode == SocketError.ConnectionAborted)
                        {
                            //Console.WriteLine($"Server {socket.RemoteEndPoint} offline.");
                            socket.Shutdown(SocketShutdown.Both);
                            socket.Close();
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        continue;
                    }

                    Thread.Sleep(10);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            this.status = SocketStatus.Stop;
        }