コード例 #1
0
ファイル: Client.cs プロジェクト: roifok/AutoFollow
        public static void ClientInitialize()
        {
            if (!AutoFollow.Enabled)
            {
                return;
            }

            if (DateTime.UtcNow.Subtract(LastUnexpectedException).TotalSeconds < 1)
            {
                return;
            }

            ConnectionAttempts++;

            try
            {
                if (!ClientConnected && AutoFollow.Enabled)
                {
                    var serverPort = Settings.Network.ServerPort;
                    Server.ServerUri = new Uri(Server.ServerUri.AbsoluteUri.Replace(Server._basePort.ToString(), serverPort.ToString()));

                    Log.Info("Initializing Client Service connection to {0} Attempt={1}", Server.ServerUri.AbsoluteUri + "Follow", ConnectionAttempts);

                    var binding = new BasicHttpBinding
                    {
                        OpenTimeout            = TimeSpan.FromMilliseconds(5000),
                        SendTimeout            = TimeSpan.FromMilliseconds(5000),
                        CloseTimeout           = TimeSpan.FromMilliseconds(500),
                        MaxBufferSize          = int.MaxValue,
                        MaxReceivedMessageSize = int.MaxValue,
                        MaxBufferPoolSize      = int.MaxValue,
                        TransferMode           = TransferMode.Streamed
                    };

                    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
                    var endPointAddress = new EndpointAddress(Server.ServerUri.AbsoluteUri + "Follow/?wsdl");
                    _httpFactory = new ChannelFactory <IService>(binding, endPointAddress);
                    _httpProxy   = _httpFactory.CreateChannel();

                    OnClientInitialized?.Invoke();
                    ClientConnected = true;
                }
            }
            catch (Exception ex)
            {
                Log.Info("Exception in ClientInitialize() {0} Attempt={1}", ex, ConnectionAttempts);
                LastUnexpectedException = DateTime.UtcNow;
            }

            if (ConnectionAttempts > 5 && !ClientConnected)
            {
                Thread.Sleep(5000);
            }
        }
コード例 #2
0
        protected override void OnMessage(MessageEventArgs e)
        {
            if (!e.IsText)
            {
                return;
            }

            var msg = e.Data;

            logger.Debug(new LogReceivedMessage
            {
                Message = msg,
                Session = ID
            }.ToJson());

            string msgType = null;

            try
            {
                msgType = JObject.Parse(msg)["type"]?.ToObject <string>();

                switch (msgType)
                {
                case "Authorization":
                    OnAuthorization?.Invoke(this, Authorization.FromJson(msg));
                    return;

                case "Client.Initialized":
                    OnClientInitialized?.Invoke(this, ClientInitialized.FromJson(msg));
                    return;

                case "Client.Register":
                    OnClientRegister?.Invoke(this, ClientRegister.FromJson(msg));
                    return;

                case "Config.Change":
                    if (Configurer)
                    {
                        OnConfigChange?.Invoke(this, ConfigChange.FromJson(msg));
                    }

                    return;

                case "Config.Register":
                    Configurer = true;
                    Subscriber = true;
                    OnConfigRegister?.Invoke(this);
                    return;

                case "Config.Start":
                    if (Configurer)
                    {
                        OnConfigStart?.Invoke(this);
                    }

                    return;

                case "Config.Stop":
                    if (Configurer)
                    {
                        OnConfigStop?.Invoke(this);
                    }

                    return;

                case "Execution.StartRequest":
                    OnExecutionRequest?.Invoke(this, ExecutionStartRequest.FromJson(msg));
                    return;

                case "Execution.Started":
                    OnExecutionStarted?.Invoke(this, ExecutionStarted.FromJson(msg));
                    return;

                case "Execution.Stopped":
                    OnExecutionStopped?.Invoke(this, ExecutionStopped.FromJson(msg));
                    return;

                case "Info.Message":
                    OnInfo?.Invoke(this, InfoMessage.FromJson(msg));
                    return;

                case "Info.Subscribe":
                    if (!Subscriber)
                    {
                        Subscriber = true;
                        OnSubscribe?.Invoke(this);
                    }

                    return;

                case "Info.Unsubscribe":
                    Subscriber = false;
                    return;

                default:
                    logger.Info(new LogReceivedUnknownMessageType
                    {
                        MessageType = msgType,
                        Session     = ID
                    }.ToJson());

                    return;
                }
            }
            catch (Exception ex)
            {
                //logger.Error()
                logger.Error(new LogMessageHandlingError
                {
                    Exception   = ex,
                    MessageType = msgType,
                    Session     = ID
                }.ToJson());
            }
        }