Esempio n. 1
0
        /// <sumary>
        /// Cleanup for shutdown or recycle
        /// </sumary>
        public void cleanup()
        {
            //Loop through each arena
            foreach (Arena arena in _arenas.Values.ToList())
            {
                foreach (Player p in arena.Players.ToList())
                {
                    if (p == null)
                    {
                        continue;
                    }

                    //Make sure his stats get updated
                    //NOTE: player client destroy will auto send a dc packet
                    p.destroy();
                }
            }

            if (!_bStandalone)
            {
                //If we are shutting down, update the zone
                if (_shutdown)
                {
                    CS_ZoneUpdate <Database> update = new CS_ZoneUpdate <Database>();
                    update.zoneName        = _name;
                    update.zoneDescription = _description;
                    update.zoneIP          = _bindIP;
                    update.zonePort        = _bindPort;
                    update.zoneIsAdvanced  = _isAdvanced;
                    update.zoneActive      = 0; //Going Inactive
                    _db.send(update);
                }

                //Disconnect from the database gracefully..
                _db.send(new Disconnect <Database>());
            }

            //Shut off our irc connection
            if (ircClient.IsConnected)
            {
                ircClient.Disconnect();
            }

            //End all threads
            _pingResponder.End();
            base.end();

            //Add a little delay...
            Thread.Sleep(2000);
        }
Esempio n. 2
0
        /// <summary>
        /// Handles a zone update packet and updates the database
        /// </summary>
        static public void Handle_CS_ZoneUpdate(CS_ZoneUpdate <Zone> pkt, Zone zone)
        {
            using (InfantryDataContext db = zone._server.getContext())
            {
                Data.DB.zone zEntry = db.zones.SingleOrDefault(z => z.id == zone._zone.id);
                if (zEntry != null)
                {
                    //Update the zone for our directory server
                    zEntry.name        = pkt.zoneName;
                    zEntry.description = pkt.zoneDescription;
                    zEntry.ip          = pkt.zoneIP;
                    zEntry.port        = pkt.zonePort;
                    zEntry.advanced    = Convert.ToInt16(pkt.zoneIsAdvanced);
                    zEntry.active      = pkt.zoneActive;

                    db.SubmitChanges();
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Creates a new packet based on the typeID and the received content
        /// inside the buffer. The user has to create an own implementation
        /// of this interface.
        /// </summary>
        public PacketBase createPacket(NetworkClient client, ushort typeID, byte[] buffer, int offset, int size)
        {               //Ready our packet base
            PacketBase packet = null;

            size--;

            //Was it a system packet?
            if (buffer[offset++] == 0)
            {
                //Yes, find the appropriate type
                return(createSystemPacket(typeID, buffer, offset, size));
            }

            //So what was the typeid?
            switch (typeID)
            {
            case CS_Auth <T> .TypeID:
                packet = new CS_Auth <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerLogin <T> .TypeID:
                packet = new CS_PlayerLogin <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerUpdate <T> .TypeID:
                packet = new CS_PlayerUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerLeave <T> .TypeID:
                packet = new CS_PlayerLeave <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerBanner <T> .TypeID:
                packet = new CS_PlayerBanner <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerStatsRequest <T> .TypeID:
                packet = new CS_PlayerStatsRequest <T>(typeID, buffer, offset, size);
                break;

            case CS_Whisper <T> .TypeID:
                packet = new CS_Whisper <T>(typeID, buffer, offset, size);
                break;

            case CS_JoinChat <T> .TypeID:
                packet = new CS_JoinChat <T>(typeID, buffer, offset, size);
                break;

            case CS_LeaveChat <T> .TypeID:
                packet = new CS_LeaveChat <T>(typeID, buffer, offset, size);
                break;

            case CS_PrivateChat <T> .TypeID:
                packet = new CS_PrivateChat <T>(typeID, buffer, offset, size);
                break;

            case CS_ModCommand <T> .TypeID:
                packet = new CS_ModCommand <T>(typeID, buffer, offset, size);
                break;

            case CS_Squads <T> .TypeID:
                packet = new CS_Squads <T>(typeID, buffer, offset, size);
                break;

            case CS_ChatQuery <T> .TypeID:
                packet = new CS_ChatQuery <T>(typeID, buffer, offset, size);
                break;

            case Disconnect <T> .TypeID:
                packet = new Disconnect <T>(typeID, buffer, offset, size);
                break;

            case CS_Ban <T> .TypeID:
                packet = new CS_Ban <T>(typeID, buffer, offset, size);
                break;

            case CS_SquadMatch <T> .TypeID:
                packet = new CS_SquadMatch <T>(typeID, buffer, offset, size);
                break;

            case CS_ModQuery <T> .TypeID:
                packet = new CS_ModQuery <T>(typeID, buffer, offset, size);
                break;

            case CS_ChatCommand <T> .TypeID:
                packet = new CS_ChatCommand <T>(typeID, buffer, offset, size);
                break;

            case CS_StatsUpdate <T> .TypeID:
                packet = new CS_StatsUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_ArenaUpdate <T> .TypeID:
                packet = new CS_ArenaUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_ZoneUpdate <T> .TypeID:
                packet = new CS_ZoneUpdate <T>(typeID, buffer, offset, size);
                break;

            default:
                //An undefined packet.
                packet = new PacketDummy(typeID, buffer, offset, size);
                break;
            }

            return(packet);
        }