Exemplo n.º 1
0
        /// <summary>
        /// 处理消息
        /// </summary>
        /// <param name="eventJson"></param>
        /// <returns></returns>
        private async Task HandlerMessageAsync(string eventJson)
        {
            OnEventMessage?.Invoke(eventJson);
            IEvent        @event       = eventJson.JsonToObject <BaseEvent>();
            IEventHandler eventHandler = _eventBus.GetEventHandler(@event.EventHandler);

            @event = (IEvent)eventJson.JsonToObject(eventHandler.EventType);
            await eventHandler.HandlerAsync(@event, ClientWebSocket);
        }
Exemplo n.º 2
0
        private void ThreadCheckSocket()
        {
            Thread.CurrentThread.Priority = ThreadPriority.Normal;
            CountStateTest = 0;
            Random RandomWait = new Random();

            IsThreadRunning = true;

            while ((_SocketClient != null) && _SocketClient.Connected)
            {
                if (SendSocketDataAvailableNotification && (_SocketClient.Available > 0))
                {
#if FIRE_EVENT_BY_BEGININVOKE
                    if (OnDataAvailable != null)
                    {
                        OnDataAvailable.BeginInvoke(this, new SocketPortDataEventArgs(new SocketPortData(SocketMessageType.SocketDataAvailable, this)), null, null);
                    }
#else
                    if (OnDataAvailable != null)
                    {
                        OnDataAvailable(this, new SocketPortDataEventArgs(new SocketPortData(SocketMessageType.SocketDataAvailable, this)));
                    }
#endif
                }
                Thread.Sleep(RandomWait.Next(10));

                if (CountStateTest > SocketBreakUpCount)
                {
                    break;
                }
            }

            if ((_SocketClient != null) && _SocketClient.Connected)
            {
                _SocketClient.Close();
            }
            _SocketClient = null;

#if FIRE_EVENT_BY_BEGININVOKE
            if (OnEventMessage != null)
            {
                OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected), null, null);
            }
#else
            if (OnEventMessage != null)
            {
                OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected));
            }
#endif

            IsThreadRunning = false;
        }
Exemplo n.º 3
0
        public void Disconnect()
        {
            // Socket.DisconnectAsync() is new in .NET 2.0 SP1
            // not available in original .NET 2.0

            SendSocketDataAvailableNotification = false;
            if (IsConnected)
            {
                try
                {
                    DisconnectDone.Reset();
                    SocketClient.BeginDisconnect(false, new AsyncCallback(DisconnectCallBack), SocketClient);
                    DisconnectDone.WaitOne();
                    SocketClient = null;
                    //if (OnEventMessage != null) { OnEventMessage(this, new EventSocketPortMessage(SocketPortMessageType.Disconnected)); }

#if FIRE_EVENT_BY_BEGININVOKE
                    if (OnEventMessage != null)
                    {
                        OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected), null, null);
                    }
#else
                    if (OnEventMessage != null)
                    {
                        OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Disconnected));
                    }
#endif
                }
#if DEBUG_SOCKET
                catch (Exception e)
                {
                    AccessoryLibrary.ShowException(e);
                    DisconnectDone.Set();
                }
#else
                catch (Exception ex)
                {
                    DisconnectDone.Set();
                    logger.Error(ex.ToString() + "\n");
                }
#endif
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 开始监听
        /// </summary>
        /// <returns></returns>
        private async void StartListeningAsync()
        {
            try
            {
                if (_isListening)
                {
                    return;
                }
                _isListening = true;
                while (ClientWebSocket.State == WebSocketState.Open)
                {
                    var serverByteArray           = new byte[655300000];
                    var buffer                    = new ArraySegment <byte>(serverByteArray);
                    WebSocketReceiveResult wsData = await ClientWebSocket.ReceiveAsync(buffer, _cancellationToken);

                    var bRec = new byte[wsData.Count];
                    Array.Copy(serverByteArray, bRec, wsData.Count);
                    string eventJson = _clientConfig.EncodingType.GetString(bRec);
                    OnEventMessage?.Invoke(eventJson);
                    IEvent        @event       = eventJson.JsonToObject <BaseEvent>();
                    IEventHandler eventHandler = _eventBus.GetEventHandler(@event.EventHandler);
                    @event = (IEvent)eventJson.JsonToObject(eventHandler.EventType);
                    await eventHandler.HandlerAsync(@event, ClientWebSocket);
                }
            }
            catch (Exception exception)
            {
                if (_isManualClose)
                {
                    return;
                }
                await StopAsync(false);

                OnSubMessage?.Invoke("与服务器断开连接", "重要");
                OnException?.Invoke(exception);
                OnClose?.Invoke();
            }
            finally
            {
                _isListening = false;
            }
        }
Exemplo n.º 5
0
        public void Connect()
        {
            IPAddress IP = null;

            IPAddress.TryParse(RemoteIpAddress, out IP);
            SendSocketDataAvailableNotification = false;

            if (IP == null)
            {
                try
                {
                    IPAddress[] IPS = Dns.GetHostAddresses(RemoteIpAddress);
                    if ((IPS != null) && (IPS.Length > 0))
                    {
                        IP = IPS[0];
                    }
                }
#if DEBUG_SOCKET
                catch (Exception e)
                {
                    AccessoryLibrary.ShowException(e);
                }
#else
                catch (Exception ex)
                {
                    logger.Error(ex.ToString() + "\n");
                }
#endif
            }

            if (IP != null)
            {
                SocketClient          = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                SocketClient.Blocking = false;
                try
                {
#if FIRE_EVENT_BY_BEGININVOKE
                    if (OnEventMessage != null)
                    {
                        OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Connecting), null, null);
                    }
#else
                    if (OnEventMessage != null)
                    {
                        OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Connecting));
                    }
#endif
                    SocketClient.ReceiveBufferSize = ClientSocketControl.ReceiveBufferSize;

                    ConnectDone.Reset();
                    SocketClient.BeginConnect(new IPEndPoint(IP, IpPortNumber), new AsyncCallback(ConnectCallBack), SocketClient);
                    ConnectDone.WaitOne();

                    if (IsConnected)
                    {
                        BeginSocketThread();
                        SendSocketDataAvailableNotification = true;

#if FIRE_EVENT_BY_BEGININVOKE
                        if (OnEventMessage != null)
                        {
                            OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.Connected), null, null);
                        }
#else
                        if (OnEventMessage != null)
                        {
                            OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.Connected));
                        }
#endif
                    }
                    else
                    {
                        SocketClient.Close();
                        SocketClient = null;

#if FIRE_EVENT_BY_BEGININVOKE
                        if (OnEventMessage != null)
                        {
                            OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed), null, null);
                        }
#else
                        if (OnEventMessage != null)
                        {
                            OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed));
                        }
#endif
                    }
                }
                catch (Exception ex)
                {
                    ConnectDone.Set();
                    SocketClient.Close();
                    SocketClient = null;
                    logger.Error(ex.ToString() + "\n");

#if FIRE_EVENT_BY_BEGININVOKE
                    if (OnEventMessage != null)
                    {
                        OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed), null, null);
                    }
#else
                    if (OnEventMessage != null)
                    {
                        OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed));
                    }
#endif
                }
            }
            else
            {
#if FIRE_EVENT_BY_BEGININVOKE
                if (OnEventMessage != null)
                {
                    OnEventMessage.BeginInvoke(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed), null, null);
                }
#else
                if (OnEventMessage != null)
                {
                    OnEventMessage(this, new SocketPortMessageEventArgs(SocketMessageType.ConnectFailed));
                }
#endif
            }
        }