Пример #1
0
        /// <inheritdoc/>
        /// <remarks>
        /// It may seem backwards that an upload only performs a delete request, however this is not trying
        /// to track the available listings, that is done via the listings packet. All this does is remove
        /// a listing, or delete it, when a purchase has been made.
        /// </remarks>
        public void UploadPurchase(MarketBoardPurchaseHandler purchaseHandler)
        {
            var clientState = Service <ClientState.ClientState> .Get();

            using var client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(ApiKey);

            var itemId  = purchaseHandler.CatalogId;
            var worldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0;

            // ====================================================================================

            var deleteListingObject = new UniversalisItemListingDeleteRequest
            {
                PricePerUnit = purchaseHandler.PricePerUnit,
                Quantity     = purchaseHandler.ItemQuantity,
                ListingId    = purchaseHandler.ListingId.ToString(),
                RetainerId   = purchaseHandler.RetainerId.ToString(),
                UploaderId   = clientState.LocalContentId.ToString(),
            };

            var deletePath    = $"/api/{worldId}/{itemId}/delete";
            var deleteListing = JsonConvert.SerializeObject(deleteListingObject);

            Log.Verbose($"{deletePath}: {deleteListing}");

            client.PostAsync($"{ApiBase}{deletePath}", new StringContent(deleteListing, Encoding.UTF8, "application/json")).GetAwaiter().GetResult();

            // ====================================================================================

            Log.Verbose("Universalis purchase upload completed.");
        }
        /// <inheritdoc/>
        /// <remarks>
        /// It may seem backwards that an upload only performs a delete request, however this is not trying
        /// to track the available listings, that is done via the listings packet. All this does is remove
        /// a listing, or delete it, when a purchase has been made.
        /// </remarks>
        public async Task UploadPurchase(MarketBoardPurchaseHandler purchaseHandler)
        {
            var clientState = Service <ClientState.ClientState> .Get();

            var itemId  = purchaseHandler.CatalogId;
            var worldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0;

            // ====================================================================================

            var deleteListingObject = new UniversalisItemListingDeleteRequest
            {
                PricePerUnit = purchaseHandler.PricePerUnit,
                Quantity     = purchaseHandler.ItemQuantity,
                ListingId    = purchaseHandler.ListingId.ToString(),
                RetainerId   = purchaseHandler.RetainerId.ToString(),
                UploaderId   = clientState.LocalContentId.ToString(),
            };

            var deletePath    = $"/api/{worldId}/{itemId}/delete";
            var deleteListing = JsonConvert.SerializeObject(deleteListingObject);

            Log.Verbose($"{deletePath}: {deleteListing}");

            var content = new StringContent(deleteListing, Encoding.UTF8, "application/json");
            var message = new HttpRequestMessage(HttpMethod.Post, $"{ApiBase}{deletePath}");

            message.Headers.Add("Authorization", ApiKey);
            message.Content = content;

            await Util.HttpClient.SendAsync(message);

            // ====================================================================================

            Log.Verbose("Universalis purchase upload completed.");
        }
Пример #3
0
    /// <summary>
    /// Reads market board purchase information from the struct at the provided pointer.
    /// </summary>
    /// <param name="dataPtr">A pointer to a struct containing market board purchase information from the client.</param>
    /// <returns>An object representing the data read.</returns>
    public static unsafe MarketBoardPurchaseHandler Read(IntPtr dataPtr)
    {
        using var stream = new UnmanagedMemoryStream((byte *)dataPtr.ToPointer(), 1544);
        using var reader = new BinaryReader(stream);

        var output = new MarketBoardPurchaseHandler();

        output.RetainerId   = reader.ReadUInt64();
        output.ListingId    = reader.ReadUInt64();
        output.CatalogId    = reader.ReadUInt32();
        output.ItemQuantity = reader.ReadUInt32();
        output.PricePerUnit = reader.ReadUInt32();

        return(output);
    }