Beispiel #1
0
        public bool Connect(string clientName, string password)
        {
            CSCloudRequest request = new CSCloudRequest();
            request.ClientName = clientName;
            request.Command = new CSCloudCommand();
            request.Command.Code = CSCloudCommandCode.CONNECT;

            string serverPw = ConfigurationManager.AppSettings[KEY_PASSWORD];
            if (string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(clientName)
                || !string.Equals(password, serverPw, StringComparison.InvariantCulture))
            {
                LogRequest(request, CSCloudSeverity.WARNING, "Invalid client credentials.");
                return false;
            }

            // Client authenticated , initialize session

            OperationContext.Current.Channel.Faulted += (sender, args) =>
                {
                    LogRequest(request, CSCloudSeverity.ERROR, string.Format("CLient: {0} has faulted :\n", clientName, args.ToString()));
                    Console.WriteLine("{0} - Client '{1}' connection failed.", DateTime.Now, clientName);
                };
            OperationContext.Current.Channel.Closed += (sender, args) =>
                {
                    LogRequest(request, CSCloudSeverity.ERROR, string.Format("Client: {0} has closed", clientName));
                    Console.WriteLine("{0} - Client '{1}' connection closed.", DateTime.Now, clientName);
                };

            var callback = OperationContext.Current.GetCallbackChannel<ICSCloudClient>();
            if (ClientConnected != null) ClientConnected(this, new ClientConnectedEventArgs(callback));

            return true;
        }
Beispiel #2
0
        public CSCloudResponse Connect(CSCloudServerProxyHttp.ICSCloudServer server, CSCloudLogServerProxy.ICSCloudLogService logService)
        {
            if (server == null) throw new ArgumentNullException("server");

            this.server = server;
            this.logService = logService;

            CSCloudResponse response = new CSCloudResponse();
            CSCloudRequest request = new CSCloudRequest();
            request.ClientName = this.GetName();
            request.Command = new CSCloudCommand();
            request.Command.Code = CSCloud.Enums.CSCloudCommandCode.CONNECT;
            response.Request = request;

            bool connected = false;
            try
            {
                connected = server.Connect(this.GetName(), ConfigurationManager.AppSettings[KEY_PASSWORD]);

                if (connected)
                {
                    if (logService == null)
                    {
                        response.Result = CSCloud.Enums.CSCloudResult.WARNIG;
                        var msg = string.Format("No Log Service is available , client {0} can not log it's activities", this.GetName());
                        response.Messages = new string[] { msg };

                        Debug.WriteLine(msg);
                    }
                    else
                    {
                        response.Result = CSCloud.Enums.CSCloudResult.SUCCESS;
                        LogResponse(response, CSCloud.Enums.CSCloudSeverity.INFO);
                    }
                }
                else
                {
                    response.Result = CSCloud.Enums.CSCloudResult.ERROR;
                    LogResponse(response, CSCloud.Enums.CSCloudSeverity.WARNING); //TODO JBG Decide on how conditions like these are logged
                }
            }
            catch (Exception ex)
            {
                response.Result = CSCloud.Enums.CSCloudResult.ERROR;
                response.Messages = new string[] { ex.Message };
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.ERROR, response.ToString(), ex.StackTrace);
            }

            return response;
        }
        public static void LogRequest(this ICSCloudLogService logService, CSCloudRequest request, CSCloud.Enums.CSCloudSeverity severity, string message = null, string stackTrace = null)
        {
            if (logService == null) return;

            try
            {
                if (request == null) throw new ArgumentNullException("request");

                logService.Log(CSCloudLogEntry.FromRequest(request, severity, message, stackTrace));
            }
            catch (Exception ex)
            {
                Debug.WriteLine(string.Format("Could not log request to Log Service: {2}\n{0}\n{1}", ex.Message, ex.StackTrace, request.ToString()));
            }
        }
        public static CSCloudLogEntry FromRequest(CSCloudRequest request, CSCloudSeverity severity, string message, string stackTrace = null)
        {
            if (request == null) return null;

            CSCloudLogEntry log = new CSCloudLogEntry();
            log.Date = DateTime.UtcNow;
            log.Severity = severity;

            StringBuilder sb = new StringBuilder();
            sb.AppendLine(request.ToString());
            if (message != null) sb.AppendLine().Append(message);
            if (stackTrace != null) sb.AppendLine().AppendLine(stackTrace);
            log.Message = sb.ToString();

            return log;
        }
Beispiel #5
0
        private CSCloudResponse Test(CSCloudRequest request)
        {
            CSCloudResponse response = new CSCloudResponse();
            response.Request = request;

            try
            {
                response.Result = CSCloud.Enums.CSCloudResult.WARNIG; //TODO JBG Testing
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.INFO);
                //TODO JBG Success with warning condition
            }
            catch (Exception ex)
            {
                response.Result = CSCloud.Enums.CSCloudResult.ERROR;
                response.Messages = new string[] { ex.Message };
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.ERROR, response.ToString(), ex.StackTrace);
            }

            return response;
        }
Beispiel #6
0
        private CSCloudResponse Report(CSCloudRequest request)
        {
            CSCloudResponse response = new CSCloudResponse();
            response.Request = request;

            try
            {
                response.Result = CSCloud.Enums.CSCloudResult.ERROR; //TODO JBG Testing
                response.Messages = new string[] { "Nothing to report..." }; //TODO JBG
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.INFO);
            }
            catch (Exception ex)
            {
                response.Result = CSCloud.Enums.CSCloudResult.ERROR;
                response.Messages = new string[] { ex.Message };
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.ERROR, response.ToString(), ex.StackTrace);
            }

            return response;
        }
Beispiel #7
0
        private CSCloudResponse InvalidCommand(CSCloudRequest request)
        {
            CSCloudResponse response = new CSCloudResponse();
            response.Request = request;
            response.Result = CSCloud.Enums.CSCloudResult.ERROR;
            string err = string.Format("Invalid command: {0}", request.Command.Code.ToString());
            response.Messages = new string[] { err };

            LogResponse(response, CSCloud.Enums.CSCloudSeverity.ERROR);

            return response;
        }
Beispiel #8
0
        private CSCloudResponse Disconnect(CSCloudRequest request)
        {
            CSCloudResponse response = new CSCloudResponse();
            response.Request = request;

            try
            {
                response.Result = CSCloud.Enums.CSCloudResult.SUCCESS;
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.INFO);
                server.Disconnect(this.GetName());
            }
            catch (Exception ex)
            {
                response.Result = CSCloud.Enums.CSCloudResult.ERROR;
                response.Messages = new string[] { ex.Message };
                LogResponse(response, CSCloud.Enums.CSCloudSeverity.ERROR, response.ToString(), ex.StackTrace);
            }

            return response;
        }
Beispiel #9
0
        //public async Task<CSCloudResponse> ICSCloudClient.ExecuteCommandAsync(CSCloudRequest request)
        //{
        //    CSCloudRequest request = (CSCloudRequest)command;
        //    XmlSerializer deserializer = new XmlSerializer(typeof(CSCloudCommand));
        //    StringReader sr = new StringReader(request.Command.Text);
        //    CSCloudCommand csCommand = (CSCloudCommand)deserializer.Deserialize(sr);
        //    Task<CSCloudResponse> task = null;
        //    switch (csCommand.Code)
        //    {
        //        case CSCloud.Enums.CSCloudCommandCode.COMPILE:
        //            task = Task<CSCloudResponse>.Factory.StartNew(() => { return Compile(request); });
        //            break;
        //        case CSCloud.Enums.CSCloudCommandCode.TEST:
        //            task = Task<CSCloudResponse>.Factory.StartNew(() => { return Test(request); });
        //            break;
        //        case CSCloud.Enums.CSCloudCommandCode.REPORT:
        //            task = Task<CSCloudResponse>.Factory.StartNew(() => { return Report(request); });
        //            break;
        //        case CSCloud.Enums.CSCloudCommandCode.DISCONNECT:
        //            task = Task<CSCloudResponse>.Factory.StartNew(() => { return Disconnect(request); });
        //            break;
        //        default:
        //            task = Task<CSCloudResponse>.Factory.StartNew(() => { return InvalidCommand(request); });
        //            break;
        //    }
        //    return await task;
        //}
        public CSCloudResponse ExecuteCommand(CSCloudRequest request)
        {
            CSCloudCommand csCommand = CSCloudCommand.FromXml(request.Command.GetXml());
            CSCloudResponse response = null;

            switch (csCommand.Code)
            {
                case CSCloud.Enums.CSCloudCommandCode.COMPILE:
                    response = Compile(request);
                    break;
                case CSCloud.Enums.CSCloudCommandCode.TEST:
                    response = Test(request);
                    break;
                case CSCloud.Enums.CSCloudCommandCode.REPORT:
                    response = Report(request);
                    break;
                case CSCloud.Enums.CSCloudCommandCode.DISCONNECT:
                    response = Disconnect(request);
                    break;
                default:
                    response = InvalidCommand(request);
                    break;
            }

            return (CSCloudResponse)response;
        }
Beispiel #10
0
        private CSCloudResponse SendCommand(ICSCloudClient client, CSCloudCommand command)
        {
            var request = new CSCloudRequest();
            request.ClientName = client.GetName();
            request.Command = command;
            CSCloudResponse response = null;

            try
            {
                LogRequest(request, CSCloudSeverity.INFO, string.Format("Client: {0} has been sent Command: {1}", client.GetName(), request.ToString()));
                response = client.ExecuteCommand(request);
                LogResponse(response, CSCloudSeverity.INFO);

                if (CommandSent != null) CommandSent(this, new CommandSentEventArgs(client, command));
            }
            catch (Exception ex)
            {
                LogResponse(response, CSCloudSeverity.ERROR, ex.Message, ex.StackTrace);
            }

            return response;
        }
Beispiel #11
0
        public void Disconnect(string ClientName)
        {
            var callback = OperationContext.Current.GetCallbackChannel<ICSCloudClient>();
            CSCloudRequest request = new CSCloudRequest();
            request.ClientName = callback.GetName();
            request.Command = new CSCloudCommand();
            request.Command.Code = CSCloudCommandCode.DISCONNECT;
            LogRequest(request, CSCloudSeverity.INFO, string.Format("Client: {0} has disconnected", request.ClientName));

            if (ClientDisconnected != null) ClientDisconnected(this, new ClientConnectedEventArgs(callback));
        }