public HttpResponseMessage UpdatePoolStatus([FromBody] VehiclePool value)
        {
            String resp;

            try
            {
                var context = new NestinDBEntities();
                var p       = context.VehiclePools.Where(x => x.VehiclePoolID == value.VehiclePoolID && x.ResID == value.ResID).First();

                if (p == null)
                {
                    resp = "{\"Response\":\"NotExist\"}";
                    var response = Request.CreateResponse(HttpStatusCode.BadRequest);
                    response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
                    return(response);
                }
                else
                {
                    p.Active = value.Active;
                    context.SaveChanges();

                    resp = "{\"Response\":\"Ok\"}";
                    var response = Request.CreateResponse(HttpStatusCode.OK);
                    response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
                    return(response);
                }
            }
            catch (Exception ex)
            {
                resp = "{\"Response\":\"Fail\"}";
                var response = Request.CreateResponse(HttpStatusCode.InternalServerError);
                response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
                return(response);
            }
        }
        public HttpResponseMessage AddPoolOffer([FromBody] VehiclePool value)
        {
            String resp;

            try
            {
                var context = new NestinDBEntities();

                var existing = context.VehiclePools.Where(x => x.Active == true && x.ResID == value.ResID &&
                                                          (x.ReturnDateTime > value.JourneyDateTime && x.ReturnDateTime < value.ReturnDateTime) ||
                                                          (x.JourneyDateTime > value.JourneyDateTime && x.ReturnDateTime < value.ReturnDateTime)).ToList();

                if (existing.Count > 0)
                {
                    //context.VehiclePools.Add(value);
                    //context.SaveChanges();
                    resp = "{\"Response\":\"Duplicate\"}";
                    var response = Request.CreateResponse(HttpStatusCode.OK);
                    response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
                    return(response);
                }
                else
                {
                    context.VehiclePools.Add(value);
                    context.SaveChanges();

                    Message message = new Message();
                    message.Topic       = "CarPool";
                    message.SocietyID   = value.SocietyID;
                    message.TextMessage = "A new Car Pool for " + value.Destination.ToString() + " is available is your Society;";

                    Notifications msg = new Notifications(context);
                    msg.Notify(Notifications.TO.Society, value.SocietyID, message);


                    resp = "{\"Response\":\"Ok\"}";
                    var response = Request.CreateResponse(HttpStatusCode.OK);
                    response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
                    return(response);
                }
            }
            catch (Exception ex)
            {
                resp = "{\"Response\":\"Fail\"}";
                var response = Request.CreateResponse(HttpStatusCode.InternalServerError);
                response.Content = new StringContent(resp, System.Text.Encoding.UTF8, "application/json");
                return(response);
            }
        }
        public IVehicle CreateVehicle(uint model, Position pos, Rotation rotation)
        {
            var ptr     = MockEntities.GetNextPtr(out var entityId);
            var vehicle = VehiclePool.Create(this, ptr, entityId);

            vehicle.Position = pos;
            if (vehicle is MockVehicle mockVehicle)
            {
                mockVehicle.Position = pos;
                mockVehicle.Rotation = rotation;
                mockVehicle.Model    = model;
            }
            Alt.CoreImpl.OnCreateVehicle(ptr, entityId);
            return(vehicle);
        }
        public static void MainWithAssembly(Assembly resourceAssembly, IntPtr resourcePointer, IntPtr corePointer, string dllName)
        {
            DllName = dllName;

            var library = new Library(DllName, true);
            var logger  = new Logger(library, corePointer);

            Alt.Logger = logger;
            Alt.Log("Library initialized");

            unsafe
            {
                if (library.Shared.Core_GetEventEnumSize() != (byte)EventType.SIZE)
                {
                    throw new Exception("Event type enum size doesn't match. Please, update the nuget");
                }
            }

            AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;

            _resourcePointer = resourcePointer;
            _corePointer     = corePointer;

            var type     = typeof(IResource);
            var resource = resourceAssembly.GetTypes().FirstOrDefault(t => t.IsClass && !t.IsAbstract && type.IsAssignableFrom(t));

            if (resource is null)
            {
                throw new Exception("Cannot find resource");
                return;
            }

            _resource = (IResource)Activator.CreateInstance(resource) !;
            Alt.Log("Resource created");

            Alt.Logger = _resource.GetLogger(library, corePointer);

            var playerPool = new PlayerPool(_resource.GetPlayerFactory());

            Alt.Log("Player pool created");

            var vehiclePool = new VehiclePool(_resource.GetVehicleFactory());

            Alt.Log("Vehicle pool created");

            var blipPool = new BlipPool(_resource.GetBlipFactory());

            Alt.Log("Blip pool created");

            var checkpointPool = new CheckpointPool(_resource.GetCheckpointFactory());

            Alt.Log("Checkpoint pool created");

            var audioPool = new AudioPool(_resource.GetAudioFactory());

            Alt.Log("Audio pool created");

            var httpClientPool = new HttpClientPool(_resource.GetHttpClientFactory());

            Alt.Log("Http client pool created");

            var webSocketClientPool = new WebSocketClientPool(_resource.GetWebSocketClientFactory());

            Alt.Log("WebSocket client pool created");

            var webViewPool = new WebViewPool(_resource.GetWebViewFactory());

            Alt.Log("Webview pool created");

            var rmlDocumentPool = new RmlDocumentPool(new RmlDocumentFactory());
            var rmlElementPool  = new RmlElementPool(new RmlElementFactory());

            Alt.Log("Rml pools created");

            var nativeResourcePool = new NativeResourcePool(_resource.GetResourceFactory());

            Alt.Log("Native resource pool created");

            var baseBaseObjectPool = new BaseBaseObjectPool(playerPool, vehiclePool, blipPool, checkpointPool, audioPool, httpClientPool, webSocketClientPool, webViewPool, rmlElementPool, rmlDocumentPool);
            var baseEntityPool     = new BaseEntityPool(playerPool, vehiclePool);
            var timerPool          = new TimerPool();

            var natives = _resource.GetNatives(DllName);

            var client = new Core(
                library,
                corePointer,
                resourcePointer,
                playerPool,
                vehiclePool,
                blipPool,
                checkpointPool,
                audioPool,
                httpClientPool,
                webSocketClientPool,
                webViewPool,
                rmlDocumentPool,
                rmlElementPool,
                baseBaseObjectPool,
                baseEntityPool,
                nativeResourcePool,
                timerPool,
                logger,
                natives
                );

            _core          = client;
            Alt.CoreImpl   = client;
            AltShared.Core = client;
            Alt.Log("Core initialized");

            _core.GetPlayers();
            _core.GetVehicles();
            _core.GetBlips();

            playerPool.InitLocalPlayer(_core);

            _core.Resource.CSharpResourceImpl.SetDelegates();
            Alt.Log("Delegates set");

            _resource.OnStart();
            Alt.Log("Startup finished");
        }