Beispiel #1
0
        /// <summary>
        /// Main loop for the server. It should handle everything except login.
        /// </summary>
        /// <param name="runInterval">Frame time in miliseconds</param>
        public void run(long runInterval)
        {
            Chronos.setInterval(runInterval);      // sunucu dongusunu her 1 runInterval milisaniyede tamamlayacak.

            while (true)
            {
                try
                {
                    while (true)
                    {
                        Chronos.waitForTheRightMoment();    // fps yi ayarliyor.

                        processUserMessages();

                        stepAllGames();
                    }
                }
                catch (Exception e)
                {
                    Console.Write(e.ToString() + "\nStack Trace:\n" + e.StackTrace);
                }
            }
        }
Beispiel #2
0
        public static void Run()
        {
            Chronos.setInterval(50);      // sunucu dongusunu her 50 milisaniyede tamamlayacak.

            while (true)
            {
                try
                {
                    while (true)
                    {
                        Chronos.waitForTheRightMoment();    // fps yi ayarliyor.
                        frameNumber++;

                        Client client;

                        while (justLeftClients.TryDequeue(out client))
                        {
                            if (clientUserMap.ContainsKey(client))
                            {
                                clientUserMap.Remove(client);
                            }
                            if (clientPlayerMap.ContainsKey(client))
                            {
                                clientPlayerMap.Remove(client);
                            }
                        }

                        //var tmp = arrivedMessages;  // mesajlari alip queue'ya atan koda yeni bir concurrentQueue verelim. o onu doldururken biz bunu bosaltalim.
                        //Interlocked.Exchange<ConcurrentQueue<MessageArrivedEventArgs>>(ref arrivedMessages, tmpArrivedMessages);    // TODO buranin fail olmayacagina emin ol.
                        //tmpArrivedMessages = tmp;
                        tmpArrivedMessages = arrivedMessages;

                        int maxMessagesPerIteration = 50;
                        MessageArrivedEventArgs messageArgs;
                        while (tmpArrivedMessages.TryDequeue(out messageArgs) && maxMessagesPerIteration-- > 0)
                        {
                            RawMessage message = messageArgs.message;
                            if (message.containsField("messageTypeId") == false)
                            {
                                continue;
                            }

                            IIncomingMessage incomingMessage;
                            if (TypeIdGenerator.incomingMessageIds.TryGetValue(message.getInt("messageTypeId"), out incomingMessage))
                            {
                                //Console.WriteLine(incomingMessage.GetType().Name);
                                incomingMessage.processMessage(messageArgs);
                            }
                        }

                        foreach (var arena in arenas)
                        {
                            arena.Update();
                        }
                        arenas.RemoveAll(a => a.awaitsDestruction);

                        queue.Update();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString() + "\nStack Trace:\n" + e.StackTrace);
                }
            }
        }