Пример #1
0
        protected override void RunCore(ServerConfig config)
        {
            if (config is null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            Trace.WriteLine(TraceCategory.Networking, $"Running {GetType().Name} :{config.EndPoints.First().Port}...");

            lock (_tcpListenerEntries)
            {
                foreach (var item in config.EndPoints)
                {
                    var listener = new TcpListener(item);
                    listener.Start();

                    var thread = new Thread(AcceptWorker);
                    ObjectTracker.Default.Register(thread);
                    thread.IsBackground = true;
                    thread.Name         = "Listener for " + item;

                    var entry = new ListenerEntry
                    {
                        TcpListener = listener,
                        Thread      = thread,
                    };

                    thread.Start(entry);

                    _tcpListenerEntries.Add(entry);
                }
            }
        }
Пример #2
0
 public void Send(NetworkMessage message, ListenerEntry dest)
 {
     if (message == null)
     {
         throw new ArgumentException(nameof(message));
     }
     message.Destinations = dest;
     message.From         = ListenerEntry.Local;
     Dispatcher.Enqueue(message, Account);
 }
Пример #3
0
        /// <summary>
        /// Gets the next listener that happens at the same time. Interruptions do not prevent/interrupt other responses that
        /// also happened at the same time as the interruption.
        /// </summary>
        /// <returns></returns>
        public IEventResponder GetNextCurrentResponder()
        {
            if (listeners.Count == 0)
            {
                return(null);
            }
            ListenerEntry entry = listeners[0];

            if (entry.TickFraction != CurrentTickFraction)
            {
                return(null);
            }
            listeners.RemoveAt(0);
            return(entry.Listener);
        }
Пример #4
0
        /// <summary>
        /// Get the next listener to happen chronologically. Essentially the iterator for this event.
        /// </summary>
        /// <returns></returns>
        public IEventResponder GetNextResponder()
        {
            if (listeners.Count == 0)
            {
                return(null);
            }
            ListenerEntry entry = listeners[0];

            listeners.RemoveAt(0);
            //This should be impossible.
            if (CurrentTickFraction > entry.TickFraction)
            {
                throw new Exception("Listeners called in the wrong order!");
            }
            CurrentTickFraction = entry.TickFraction;
            return(entry.Listener);
        }
Пример #5
0
        public void Send(NetworkMessage message, ListenerEntry dest)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }
            message.Destinations = dest;
            message.From         = ListenerEntry.Local;

            Dispatcher.Enqueue(message, this);

            if (Disposed)
            {
                logger.Error("Error the message {0} wont be dispatched because the bot {1} is disposed !", message, this);
            }
            else if (!Running)
            {
                logger.Warn("Warning, enqueue {0} but the bot is stopped, the message will be processed once the bot {1} restart", message, this);
            }
        }
Пример #6
0
        private TraceListener LookupListener(string fileName)
        {
            ListenerEntry entry;

            for (int i = 0; i < listeners.Count; i++)
            {
                entry = (ListenerEntry)listeners[i];
                // FIXME: what to do on case-sensitive filesystems?
                if (String.Compare(entry.fileName, fileName, true) == 0)
                {
                    return(entry.listener);
                }
            }

            entry          = new ListenerEntry();
            entry.fileName = fileName;
            entry.listener = new TextWriterTraceListener(fileName);
            listeners.Add(entry);
            return(entry.listener);
        }
Пример #7
0
        public void Send(NetworkMessage message, ListenerEntry dest)
        {
            if (message == null) throw new ArgumentNullException("message");
            message.Destinations = dest;
            message.From = ListenerEntry.Local;

            Dispatcher.Enqueue(message, this);
        }
Пример #8
0
        public void Send(NetworkMessage message, ListenerEntry dest)
        {
            if (message == null) throw new ArgumentNullException("message");
            message.Destinations = dest;
            message.From = ListenerEntry.Local;

            Dispatcher.Enqueue(message, this);

            if (Disposed)
                logger.Error("Error the message {0} wont be dispatched because the bot {1} is disposed !", message, this);
            else if (!Running)
                logger.Warn("Warning, enqueue {0} but the bot is stopped, the message will be processed once the bot {1} restart", message, this);
        }
		private TraceListener LookupListener (string fileName)
		{
			ListenerEntry entry;

			for (int i = 0; i < listeners.Count; i++)
			{
				entry = (ListenerEntry) listeners[i];
				// FIXME: what to do on case-sensitive filesystems?
				if (String.Compare (entry.fileName, fileName, true) == 0)
					return entry.listener;
			}

			entry = new ListenerEntry ();
			entry.fileName = fileName;
			entry.listener = new TextWriterTraceListener (fileName);
			listeners.Add (entry);
			return entry.listener;
		}