예제 #1
0
 private void Plugins_OnPluginsLoaded()
 {
     SQL = new MySQLEntityClient(Config.DatabaseAddress, Config.DatabaseUsername, Config.DatabasePassword, Config.DatabaseName, Config.DatabasePort, true);
     connection = new MySqlConnection(SQL.ConnectionString);
     connection.Open();
     SQL.Connect();
     Logger.Log($"Connected: {SQL.Connected}");
     CheckSchema();
 }
        public async Task Run(Action <string> Log)
        {
            Log("Connecting to database...");
            UconomyConfiguration config     = Uconomy.Instance.Configuration.Instance;
            MySqlConnection      connection = new MySqlConnection($"server={config.DatabaseAddress};Database={config.DatabaseName};Uid={config.DatabaseUsername};Pwd={config.DatabasePassword};Port={config.DatabasePort}");
            await connection.OpenAsync();

            var Client = new MySQLEntityClient(connection);

            Log("connected to database!");
            Log("Finding all Item Assets...");
            //Dictionary<ushort, string> Items = new Dictionary<ushort, string>();

            var itemsWriter = new TransactionalBulkInserter <ZaupItem>(connection, main.ItemsTable);
            var Items       = new List <ushort>();

            Asset[] ItemAssets = Assets.find(EAssetType.ITEM).Where(x => (x is ItemAsset IA && IA.assetOrigin == EAssetOrigin.WORKSHOP)).ToArray();

            int Truncated = 0;

            foreach (Asset asset in ItemAssets)
            {
                if (asset is ItemAsset IA)
                {
                    if (!Items.Contains(asset.id))
                    {
                        Items.Add(asset.id);
                        itemsWriter.Insert(new ZaupItem()
                        {
                            ID = asset.id, ItemName = AssetNameTool.GetAssetName(asset, ref Truncated), BuyBack = 0, Cost = 0
                        });
                    }
                }
            }
            Log($"Found {Items.Count} items.");
            Log("Finding all Item Assets...");
            var vehiclesWriter = new TransactionalBulkInserter <ZaupVehicle>(connection, main.VehiclesTable);
            var vehicles       = new List <ushort>();

            Asset[] VehicleAssets = Assets.find(EAssetType.VEHICLE).Where(x => (x is VehicleAsset IA && IA.assetOrigin == EAssetOrigin.WORKSHOP)).ToArray();
            foreach (Asset asset in VehicleAssets)
            {
                if (asset is VehicleAsset va)
                {
                    if (!vehicles.Contains(asset.id))
                    {
                        vehicles.Add(asset.id);
                        vehiclesWriter.Insert(new ZaupVehicle()
                        {
                            ID = asset.id, VehicleName = AssetNameTool.GetAssetName(asset, ref Truncated), Cost = 0
                        });
                    }
                }
            }

            Log($"Found {vehicles.Count} vehicles.");

            if (Truncated > 0)
            {
                Log($"WARNING: Some item names were too long to fit in the database, {Truncated} item/vehicle names were truncated to 32 characters.");
            }

            Log("Writing data to table...");

            Stopwatch sw = new Stopwatch();

            sw.Start();

            vehiclesWriter.Commit();
            var r = itemsWriter.Commit();

            sw.Stop();

            Log($"Upload Complete in {sw.ElapsedMilliseconds}ms  (@ {Math.Round((vehicles.Count + Items.Count) / (double)(sw.ElapsedMilliseconds * 1000), 2)} p/s), rows modified: {r}.");
        }