/// <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); }
/// <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(); } } }
/// <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); }