Exemple #1
0
        public static long GetStatistics(string statType)
        {
            switch (statType)
            {
            case "Ping":
                return((long)PingMs);

            case "SentBytes":
                return(NetworkMain.ClientConnection.Statistics.SentBytes);

            case "ReceivedBytes":
                return(NetworkMain.ClientConnection.Statistics.ReceivedBytes);

            case "Latency":
                return((long)NetworkMain.ClientConnection.ServerConnection.AverageRoundtripTime);

            case "TimeOffset":
                return(TimeOffset);

            case "LastSendTime":
                return((long)(LunaNetworkTime.UtcNow - LastSendTime).TotalMilliseconds);

            case "LastReceiveTime":
                return((long)(LunaNetworkTime.UtcNow - LastReceiveTime).TotalMilliseconds);

            case "MessagesInCache":
                return(MessageStore.GetMessageCount(null));

            case "MessageDataInCache":
                return(MessageStore.GetMessageDataCount(null));
            }
            return(0);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            MessageStore <object> ms = new MessageStore <object>(capacity: 80000);

            ThreadPool.SetMinThreads(32, 32);

            Console.WriteLine("{0}-bit process", IntPtr.Size * 8);
            Console.WriteLine("{0} writer(s), {1} reader(s)", NumWriters, NumReaders);
            Console.WriteLine("Running for {0}..", RunTime);

            // queue writers
            for (int writerNum = 0; writerNum < NumWriters; writerNum++)
            {
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    for (int i = 0; ; i++)
                    {
                        ms.Add("This is my awesome object!");
                    }
                }, null);
            }

            // queue readers
            long totalMessagesRecvd = 0;

            for (int readerNum = 0; readerNum < NumReaders; readerNum++)
            {
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    ulong firstMessageIdToReceive = 0;
                    while (true)
                    {
                        var x = ms.GetMessages(firstMessageIdToReceive);
                        ulong firstMessageIdReceived = x.FirstMessageId;
                        firstMessageIdToReceive      = firstMessageIdReceived + (ulong)x.Messages.Length;

                        if (x.Messages.Length > 0)
                        {
                            Interlocked.Add(ref totalMessagesRecvd, x.Messages.Length);
                        }
                        else
                        {
                            // back off if there is no more data
                            Thread.Sleep(10);
                        }
                    }
                }, null);
            }

            // let the program run for 10 seconds
            Thread.Sleep(RunTime);
            ulong totalMessagesWritten = ms.GetMessageCount();

            Console.WriteLine();
            Console.WriteLine("Throughput:");
            Console.WriteLine("{0:N0} total messages written", totalMessagesWritten);
            Console.WriteLine("  ({0:N0} messages per writer per second)", totalMessagesWritten / RunTime.TotalSeconds / NumWriters);
            Console.WriteLine("{0:N0} total messages received", totalMessagesRecvd);
            Console.WriteLine("  ({0:N0} messages per reader per second)", totalMessagesRecvd / RunTime.TotalSeconds / NumReaders);
        }
Exemple #3
0
        public void TestMsgMessageStore()
        {
            var msg1 = Factory.CreateNew <VesselSrvMsg, VesselPositionMsgData>();

            Assert.AreEqual(0, MessageStore.GetMessageCount(typeof(VesselSrvMsg)));
            Assert.AreEqual(0, MessageStore.GetMessageDataCount(typeof(VesselPositionMsgData)));

            var msg2 = Factory.CreateNew <VesselSrvMsg, VesselPositionMsgData>();

            Assert.AreEqual(0, MessageStore.GetMessageCount(typeof(VesselSrvMsg)));
            Assert.AreEqual(0, MessageStore.GetMessageDataCount(typeof(VesselPositionMsgData)));

            //Set first message as "used"
            msg1.Recycle();

            Assert.AreEqual(1, MessageStore.GetMessageCount(typeof(VesselSrvMsg)));
            Assert.AreEqual(1, MessageStore.GetMessageDataCount(typeof(VesselPositionMsgData)));

            //If we retrieve a new message the first one should be reused
            var msg3 = Factory.CreateNew <VesselSrvMsg, VesselPositionMsgData>();

            msg2.Recycle();
            msg3.Recycle();

            Assert.AreEqual(2, MessageStore.GetMessageCount(typeof(VesselSrvMsg)));
            Assert.AreEqual(2, MessageStore.GetMessageDataCount(typeof(VesselPositionMsgData)));

            var msg4 = Factory.CreateNew <VesselSrvMsg, VesselPositionMsgData>();

            Assert.AreEqual(1, MessageStore.GetMessageCount(typeof(VesselSrvMsg)));
            Assert.AreEqual(1, MessageStore.GetMessageDataCount(typeof(VesselPositionMsgData)));
        }
        static void Main(string[] args)
        {
            MessageStore<object> ms = new MessageStore<object>(capacity: 80000);
            ThreadPool.SetMinThreads(32, 32);

            Console.WriteLine("{0}-bit process", IntPtr.Size * 8);
            Console.WriteLine("{0} writer(s), {1} reader(s)", NumWriters, NumReaders);
            Console.WriteLine("Running for {0}..", RunTime);

            // queue writers
            for (int writerNum = 0; writerNum < NumWriters; writerNum++)
            {
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    for (int i = 0; ; i++)
                    {
                        ms.Add("This is my awesome object!");
                    }
                }, null);
            }

            // queue readers
            long totalMessagesRecvd = 0;
            for (int readerNum = 0; readerNum < NumReaders; readerNum++)
            {
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    ulong firstMessageIdToReceive = 0;
                    while (true)
                    {
                        var x = ms.GetMessages(firstMessageIdToReceive);
                        ulong firstMessageIdReceived = x.FirstMessageId;
                        firstMessageIdToReceive = firstMessageIdReceived + (ulong)x.Messages.Length;

                        if (x.Messages.Length > 0)
                        {
                            Interlocked.Add(ref totalMessagesRecvd, x.Messages.Length);
                        }
                        else
                        {
                            // back off if there is no more data
                            Thread.Sleep(10);
                        }

                    }
                }, null);
            }

            // let the program run for 10 seconds
            Thread.Sleep(RunTime);
            ulong totalMessagesWritten = ms.GetMessageCount();

            Console.WriteLine();
            Console.WriteLine("Throughput:");
            Console.WriteLine("{0:N0} total messages written", totalMessagesWritten);
            Console.WriteLine("  ({0:N0} messages per writer per second)", totalMessagesWritten / RunTime.TotalSeconds / NumWriters);
            Console.WriteLine("{0:N0} total messages received", totalMessagesRecvd);
            Console.WriteLine("  ({0:N0} messages per reader per second)", totalMessagesRecvd / RunTime.TotalSeconds / NumReaders);
        }