public static void Main()
        {
            #region Speed Test

            Arbiter a = new Arbiter("Arbiter");

            ManualTransportClient d1 = new ManualTransportClient("d1");
            a.AddClient(d1);

            ManualTransportClient d2 = new ManualTransportClient("d1");
            a.AddClient(d2);

            DateTime start = DateTime.Now;

            // The current speed is around 3.200 messages / sec; the workload is on the serialization.
            for (int i = 0; i < 100; i++)
            {
                OperationMessage om = new OperationMessage();
                d1.SendAddressed(d2.SubscriptionClientID, om);
            }

            Console.WriteLine(DateTime.Now - start);

            #endregion

            Console.ReadKey();
        }
        public override bool ArbiterInitialize(Arbiter.Arbiter arbiter)
        {
            bool result = base.ArbiterInitialize(arbiter);

            // Make sure to add sources as soon as possible, since there might be some requests coming in for them.
            InitializeSources();

            return result;
        }
Example #3
0
        public override bool ArbiterInitialize(Arbiter.Arbiter arbiter)
        {
            bool result = base.ArbiterInitialize(arbiter);

            // Make sure to add sources as soon as possible, since there might be some requests coming in for them.
            InitializeSources();

            return(result);
        }
        /// <summary>
        /// Name of the platform must be unique.
        /// </summary>
        public Platform(string name)
            : base(name, false)
        {
            TracerHelper.TraceEntry();

            Arbiter.Arbiter arbiter = new Arbiter.Arbiter("Platform");
            //TracerHelper.TracingEnabled = false;
            arbiter.AddClient(this);
        }
        /// <summary>
        /// 
        /// </summary>
        public ExecutionManager(Arbiter arbiter)
        {
            _arbiter = arbiter;
            _threadPool = new ThreadPoolEx(typeof(ExecutionManager).Name);
            _threadPool.MaximumSimultaniouslyRunningThreadsAllowed = 20;
            _threadPool.MaximumTotalThreadsAllowed = 25;

            _timeOutMonitor.EntityTimedOutEvent += new HandlerDelegate<TimeOutable>(_timeOutMonitor_EntityTimedOutEvent);
        }
Example #6
0
        /// <summary>
        /// Name of the platform must be unique.
        /// </summary>
        public Platform(string name)
            : base(name, false)
        {
            TracerHelper.TraceEntry();

            Arbiter.Arbiter arbiter = new Arbiter.Arbiter("Platform");
            //TracerHelper.TracingEnabled = false;
            arbiter.AddClient(this);
        }
        /// <summary>
        /// 
        /// </summary>
        public ExecutionManager(Arbiter arbiter)
        {
            _arbiter = arbiter;
            _threadPool = new ThreadPoolFastEx(typeof(ExecutionManager).Name);
            //_threadPool.MaximumSimultaniouslyRunningThreadsAllowed = 20;

            // Clear them promptly, since otherwise we seem to get stuck.
            _threadPool.ThreadIdle = TimeSpan.FromSeconds(1);

            _threadPool.MaximumThreadsCount = 25;

            _timeOutMonitor.EntityTimedOutEvent += new HandlerDelegate<TimeOutable>(_timeOutMonitor_EntityTimedOutEvent);
        }
        /// <summary>
        /// 
        /// </summary>
        public override bool ArbiterInitialize(Arbiter.Arbiter arbiter)
        {
            if (base.ArbiterInitialize(arbiter) == false)
            {
                return false;
            }

            //ChangeOperationalState(OperationalStateEnum.Operational);

            RegisterSourceMessage register = new RegisterSourceMessage(_sourceType, true);
            register.RequestResponce = false;
            this.Send(register);

            return true;
        }
Example #9
0
        /// <summary>
        ///
        /// </summary>
        public override bool ArbiterInitialize(Arbiter.Arbiter arbiter)
        {
            if (base.ArbiterInitialize(arbiter) == false)
            {
                return(false);
            }

            //ChangeOperationalState(OperationalStateEnum.Operational);

            RegisterSourceMessage register = new RegisterSourceMessage(_sourceType, true);

            register.RequestResponce = false;
            this.Send(register);

            return(true);
        }
Example #10
0
        public static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                WorkingDirectory = args[0];
            }

            foreach (var a in args)
            {
                Console.WriteLine(a);
            }

            if (string.IsNullOrEmpty(WorkingDirectory))
            {
                WorkingDirectory = Path.Combine(Directory.GetCurrentDirectory(), "WorkingDirectory");
                Logger.Initialization();
                Logger.Warning($"Не указана рабочая директория, программа будет работать в директории {WorkingDirectory}");
            }
            else
            {
                Logger.Initialization();
            }

            Logger.Log("Арбитр запущен");

            Console.CancelKeyPress += Console_CancelKeyPress;

            Arbiter arbiter = new Arbiter();

            while (!IsCancelled)
            {
                try
                {
                    arbiter.Update();
                    if (arbiter.sleep)
                    {
                        Thread.Sleep(1000);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error($"Message: {ex.Message}\nStackTrace: {ex.StackTrace}");
                }
            }
        }
        public override bool ArbiterInitialize(Arbiter arbiter)
        {
            bool result = base.ArbiterInitialize(arbiter);

            _transportServer = new MessageContainerTransportServer();
            if (_transportServer.Initialize(_serverUriBase) == false)
            {
                base.ArbiterUnInitialize();

                _transportServer = null;
                return false;
            }

            _transportServer.MessageContainerReceivedEvent += new HandlerDelegate<String, MessageContainer>(_transport_MessageReceivedEvent);
            _transportServer.ClientConnected += new HandlerDelegate<string>(_transportServer_ClientConnected);
            _transportServer.ClientDisConnected += new HandlerDelegate<string>(_transportServer_ClientDisconnected);

            return result;
        }
Example #12
0
        public override bool ArbiterInitialize(Arbiter arbiter)
        {
            bool result = base.ArbiterInitialize(arbiter);

            _transportServer = new MessageContainerTransportServer();
            if (_transportServer.Initialize(_serverUriBase) == false)
            {
                base.ArbiterUnInitialize();

                _transportServer = null;
                return(false);
            }

            _transportServer.MessageContainerReceivedEvent += new HandlerDelegate <String, MessageContainer>(_transport_MessageReceivedEvent);
            _transportServer.ClientConnected    += new HandlerDelegate <string>(_transportServer_ClientConnected);
            _transportServer.ClientDisConnected += new HandlerDelegate <string>(_transportServer_ClientDisconnected);

            return(result);
        }
        public override bool ArbiterInitialize(Arbiter arbiter)
        {
            bool result = base.ArbiterInitialize(arbiter);

            lock (this)
            {
                if (_transportClient != null)
                {
                    throw new Exception("Already initialized.");
                }

                _transportClient = new MessageContainerTransportClient();
                _transportClient.ConnectionStatusChangedEvent += new MessageContainerTransportClient.ConnectionStatusChangedDelegate(_transportClient_ConnectionStatusChangedEvent);
                _transportClient.MessageContainerReceivedEvent += new HandlerDelegate<MessageContainer>(_transport_MessageReceivedEvent);
            }

            _transportClient.Initialize(_serverAddressUri);

            return result;
        }
        public override bool ArbiterInitialize(Arbiter arbiter)
        {
            bool result = base.ArbiterInitialize(arbiter);

            lock (this)
            {
                if (_transportClient != null)
                {
                    throw new Exception("Already initialized.");
                }

                _transportClient = new MessageContainerTransportClient();
                _transportClient.ConnectionStatusChangedEvent  += new MessageContainerTransportClient.ConnectionStatusChangedDelegate(_transportClient_ConnectionStatusChangedEvent);
                _transportClient.MessageContainerReceivedEvent += new HandlerDelegate <MessageContainer>(_transport_MessageReceivedEvent);
            }

            _transportClient.Initialize(_serverAddressUri);

            return(result);
        }
Example #15
0
        public void Dispose()
        {
            _isDisposed = true;

            ThreadPoolFastEx threadPool = _threadPool;

            if (threadPool != null)
            {
                threadPool.Dispose();
                _threadPool = null;
            }

            Arbiter arbiter = _arbiter;

            if (arbiter != null)
            {
                arbiter.ClientAddedEvent   -= new ClientManagerClientUpdateDelegate(arbiter_ClientAddedEvent);
                arbiter.ClientRemovedEvent -= new ClientManagerClientUpdateDelegate(arbiter_ClientRemovedEvent);
                _arbiter = null;
            }
        }
Example #16
0
        /// <summary>
        ///
        /// </summary>
        public ProxyIntegrationAdapter(Uri serverIntegrationUri)
            : base(typeof(ProxyIntegrationAdapter).Name, false)
        {
            TracerHelper.Tracer.Clear(true);

            // Locate the trace file, next to the MT4IntegrationDLL, that is deployed inside the
            // corresponding MT4 expert/libraries folder.
            FileTracerItemSink sink = new FileTracerItemSink(TracerHelper.Tracer);

            sink.FilePath = Path.Combine(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Experts"),
                                         "OFxP.Expert." + GeneralHelper.GetFileCompatibleDateTime(DateTime.Now) + ".log");

            TracerHelper.Tracer.Add(sink);

            TracerHelper.TraceEntry();

            // This.
            Filter.Enabled = true;
            Filter.AllowOnlyAddressedMessages = false;
            Filter.AllowChildrenTypes         = true;
            Filter.AllowedNonAddressedMessageTypes.Add(typeof(TransportMessage));

            Arbiter.Arbiter arbiter = new Arbiter.Arbiter("IntegrationServer.Arbiter");
            arbiter.AddClient(this);

            // Integration server.
            _integrationServer = new TransportIntegrationServer(serverIntegrationUri);
            if (arbiter.AddClient(_integrationServer) == false)
            {// Failed to add/initialize integration server.
                _integrationServer = null;
                MessageBox.Show("Failed to initialize OFxP Integration Server." + System.Environment.NewLine + "Possibly another integration with the same address [" + serverIntegrationUri.ToString() + "] already running.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            ChangeOperationalState(OperationalStateEnum.Operational);
        }
        /// <summary>
        /// 
        /// </summary>
        public ProxyIntegrationAdapter(Uri serverIntegrationUri)
            : base(typeof(ProxyIntegrationAdapter).Name, false)
        {
            TracerHelper.Tracer.Clear(true);

            // Locate the trace file, next to the MT4IntegrationDLL, that is deployed inside the
            // corresponding MT4 expert/libraries folder.
            FileTracerItemSink sink = new FileTracerItemSink(TracerHelper.Tracer);

            sink.FilePath = Path.Combine(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "Experts"),
                "OFxP.Expert." + GeneralHelper.GetFileCompatibleDateTime(DateTime.Now) + ".log");

            TracerHelper.Tracer.Add(sink);

            TracerHelper.TraceEntry();

            // This.
            Filter.Enabled = true;
            Filter.AllowOnlyAddressedMessages = false;
            Filter.AllowChildrenTypes = true;
            Filter.AllowedNonAddressedMessageTypes.Add(typeof(TransportMessage));

            Arbiter.Arbiter arbiter = new Arbiter.Arbiter("IntegrationServer.Arbiter");
            arbiter.AddClient(this);

            // Integration server.
            _integrationServer = new TransportIntegrationServer(serverIntegrationUri);
            if (arbiter.AddClient(_integrationServer) == false)
            {// Failed to add/initialize integration server.
                _integrationServer = null;
                MessageBox.Show("Failed to initialize OFxP Integration Server." + System.Environment.NewLine + "Possibly another integration with the same address [" + serverIntegrationUri.ToString() + "] already running.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            ChangeOperationalState(OperationalStateEnum.Operational);
        }
Example #18
0
        /// <summary>
        /// Central sending function.
        /// </summary>
        /// <param name="receiverID">The ID of the receiver module. Can be <b>null</b> and this sends to all in the Arbiter.</param>
        protected TransportMessage[] DoSendCustom(bool isRequest, Guid sessionGuid,
                                                  Type expectedResponseMessageClassType, int responsesRequired,
                                                  ArbiterClientId?receiverId, ArbiterClientId?senderId, TransportMessage message, TimeSpan timeOut)
        {
            //TracerHelper.TraceEntry();

            SessionResults session = null;

            if (receiverId.HasValue && receiverId.Value.IsEmpty /*receiverId.Value.CompareTo(ArbiterClientId.Empty) == 0*/)
            {
                SystemMonitor.Error("Can not send an item to empty receiver. Use null to specify broadcast.");
                return(null);
            }

            // Preliminary verification.
            if (Arbiter == null)
            {
                SystemMonitor.OperationWarning("Using a client [" + this.GetType().Name + ":" + senderId.Value.ClientName + " to " + (receiverId.HasValue ? receiverId.Value.Id.Name : string.Empty) + " , " + message.GetType().Name + "] with no Arbiter assigned.");
                return(null);
            }

            message.IsRequest = isRequest;

            TransportInfoUnit infoUnit = new TransportInfoUnit(sessionGuid, senderId, receiverId);

            message.TransportInfo.AddTransportInfoUnit(infoUnit);

            bool sessionEventResult = false;

            if (expectedResponseMessageClassType != null)
            {// Responce waiting session.
                session = new SessionResults(responsesRequired, expectedResponseMessageClassType);
                lock (_communicationSessions)
                {// Register the session.
                    _communicationSessions.Add(sessionGuid, session);
                }
            }

            SystemMonitor.CheckError(message.TransportInfo.CurrentTransportInfo != null);
            Conversation conversation;

            if (receiverId == null)
            {
                // We shall not use the next level time out mechanism.
                conversation = Arbiter.CreateConversation(senderId.Value, message, TimeSpan.Zero);
            }
            else
            {// Addressed conversation.
                // We shall not use the next level time out mechanism.
                conversation = Arbiter.CreateConversation(senderId.Value, receiverId.Value, message, TimeSpan.Zero);
            }

            if (conversation != null && expectedResponseMessageClassType != null)
            {     // Responce waiting session (only if conversation was properly created).
                if (timeOut == TimeSpan.Zero)
                { // Wait forever.
                    sessionEventResult = session.SessionEndEvent.WaitOne();
                }
                else
                {// Wait given period.
                    sessionEventResult = session.SessionEndEvent.WaitOne(timeOut, false);
                }

                lock (_communicationSessions)
                {// Remote the session.
                    _communicationSessions.Remove(sessionGuid);
                }
            }

            message.TransportInfo.PopTransportInfo();

            if (expectedResponseMessageClassType == null)
            {// No responce waiting, just return.
                //TracerHelper.TraceExit();
                return(null);
            }

            // Responce waiting session.
            if (sessionEventResult == false)
            {// Timed out - only send and receives can time out, as the other ones do not have sessions!!
                TracerHelper.TraceError("Session has timed out [" + message.GetType().Name + "].");
                return(null);
            }

            //TracerHelper.TraceExit();
            return(session.Responses.ToArray());
        }
        public override bool ArbiterInitialize(Arbiter arbiter)
        {
            if (base.ArbiterInitialize(arbiter))
            {
                if (_persistedRemoteStatusSynchronizationSource != null)
                {
                    SetRemoteStatusSynchronizationSource(_persistedRemoteStatusSynchronizationSource);
                }
                return true;
            }

            return false;
        }
        /// <summary>
        /// 
        /// </summary>
        public virtual bool ArbiterInitialize(Arbiter arbiter)
        {
            lock (this)
            {
                if (_arbiter != null)
                {
                    SystemMonitor.Error("Arbiter value initialized more than once in a client.");
                }

                _arbiter = arbiter;
            }

            return true;
        }
 /// <summary>
 /// Override to handle an uninitializations needed.
 /// </summary>
 public virtual bool ArbiterUnInitialize()
 {
     lock (this)
     {
         _arbiter = null;
     }
     return true;
 }
Example #22
0
        static void Main(string[] args)
        {
            if(args.Length!=1)
            {
                Console.WriteLine("Please set a config file!");
                return;
            }

            //CancelEvent verdrahten
            Console.CancelKeyPress+=new ConsoleCancelEventHandler(Console_CancelKeyPress);

            //Highscore Pfad bauen
            string highscorePath=FileSystem.GetPath(args[0])+"highscore.xml";

            //Config auslesen
            XmlData Options=new XmlData(args[0]);

            string username=Options.GetElementAsString("xml.IRC.UserName");
            string realname=Options.GetElementAsString("xml.IRC.RealName");
            string ident=Options.GetElementAsString("xml.IRC.Ident");
            string server=Options.GetElementAsString("xml.IRC.Server");
            string channel=Options.GetElementAsString("xml.IRC.Channel");
            string userpassword=Options.GetElementAsString("xml.IRC.Password");

            //Bot anlegen
            Arbiter arbiter=new Arbiter(server, username, realname, ident, channel, highscorePath);

            //Jokes einlesen
            List<XmlNode> jokeNodes=Options.GetElements("xml.Jokes.Joke");

            foreach(XmlNode jokeNode in jokeNodes)
            {
                string category=jokeNode.Attributes["category"]!=null?jokeNode.Attributes["category"].Value:"";
                string jokeText=jokeNode.InnerText;
                arbiter.Jokes.Add(new Joke(category, jokeText));
            }

            //Quizfragen einlesen
            List<XmlNode> questionsNodes=Options.GetElements("xml.Quiz.Question");

            foreach(XmlNode questionNode in questionsNodes)
            {
                string category=questionNode.Attributes["category"].Value;
                string question=questionNode.Attributes["question"].Value;
                string success=questionNode.Attributes["success"]!=null?questionNode.Attributes["success"].Value:"";
                int points=Convert.ToInt32(questionNode.Attributes["points"].Value);
                List<string> hints=new List<string>();

                int keywordWeight=1;
                if(questionNode.Attributes.GetNamedItem("keywordWeight")!=null)
                {
                    keywordWeight=Convert.ToInt32(questionNode.Attributes["keywordWeight"].Value);
                }

                List<Keyword> keywords=new List<Keyword>();

                foreach(XmlNode child in questionNode.ChildNodes)
                {
                    if(child.Name=="Keyword")
                    {
                        int weight=1;

                        if(child.Attributes.GetNamedItem("keywordWeight")!=null)
                        {
                            string weightValue=child.Attributes["keywordWeight"].Value;

                            if(weightValue=="MAX")
                                weight=Int32.MaxValue;
                            else
                                weight=Convert.ToInt32(weightValue);
                        }

                        Keyword keyword=new Keyword(child.InnerText, weight);
                        keywords.Add(keyword);
                    }
                    else if(child.Name=="Hint")
                    {
                        hints.Add(child.InnerText);
                    }
                }

                //Frage zum Bot hinzufügen
                arbiter.Quiz.Questions.Add(new Question(category, question, hints, success, points, keywordWeight, keywords));
            }

            //Quotes einlesen
            List<XmlNode> quodeNodes=Options.GetElements("xml.Quotes.Quote");

            foreach(XmlNode quodeNode in quodeNodes)
            {
                string author=quodeNode.Attributes["author"].Value;
                string quoteText=quodeNode.InnerText;
                arbiter.Quotes.Add(new Quote(author, quoteText));
            }

            //Bot starten
            arbiter.Start(userpassword);
        }
 public override bool ArbiterInitialize(Arbiter.Arbiter arbiter)
 {
     return base.ArbiterInitialize(arbiter);
 }
 public override bool ArbiterInitialize(Arbiter.Arbiter arbiter)
 {
     return(base.ArbiterInitialize(arbiter));
 }