public void UpdateNDEFMessage(NDEFMessage message)
        {
            CleanupRecordItems();

            float             y       = 0;
            List <NDEFRecord> records = message.Records;

            int length = records.Count;

            for (int i = 0; i < length; i++)
            {
                NDEFRecord record     = records[i];
                RecordItem recordItem = null;
                switch (record.Type)
                {
                case NDEFRecordType.TEXT:
                    recordItem = CreateRecordItem(textRecordItemPrefab);
                    TextRecord textRecord = (TextRecord)record;
                    recordItem.UpdateLabel(string.Format(TEXT_RECORD_FORMAT, NDEFRecordType.TEXT, textRecord.text, textRecord.languageCode, textRecord.textEncoding));
                    tagInfoContentLabel.text = string.Format(TEXT_RECORD_FORMAT, NDEFRecordType.TEXT, textRecord.text, textRecord.languageCode, textRecord.textEncoding);
                    //infosSenderText.text = textRecord.text;
                    senderController.SendValue(textRecord.text);
                    break;

                case NDEFRecordType.URI:
                    recordItem = CreateRecordItem(uriRecordItemPrefab);
                    UriRecord uriRecord = (UriRecord)record;
                    recordItem.UpdateLabel(string.Format(URI_RECORD_FORMAT, NDEFRecordType.URI, uriRecord.fullUri, uriRecord.uri, uriRecord.protocol));
                    break;

                case NDEFRecordType.MIME_MEDIA:
                    recordItem = CreateRecordItem(mimeMediaRecordItemPrefab);
                    MimeMediaRecord mimeMediaRecord = (MimeMediaRecord)record;
                    recordItem.UpdateLabel(string.Format(MIME_MEDIA_RECORD_FORMAT, NDEFRecordType.MIME_MEDIA, mimeMediaRecord.mimeType));
                    ((ImageRecordItem)recordItem).LoadImage(mimeMediaRecord.mimeData);
                    break;

                case NDEFRecordType.EXTERNAL_TYPE:
                    recordItem = CreateRecordItem(externalTypeRecordItemPrefab);
                    ExternalTypeRecord externalTypeRecord = (ExternalTypeRecord)record;
                    int    dataLength = externalTypeRecord.domainData.Length;
                    string dataValue  = Encoding.UTF8.GetString(externalTypeRecord.domainData);
                    recordItem.UpdateLabel(string.Format(EXTERNAL_TYPE_FORMAT, NDEFRecordType.EXTERNAL_TYPE, externalTypeRecord.domainName, externalTypeRecord.domainType, dataLength, dataValue));
                    break;

                case NDEFRecordType.SMART_POSTER:
                    recordItem = CreateRecordItem(smartPosterRecordItemPrefab);
                    SmartPosterRecord smartPosterRecord = (SmartPosterRecord)record;
                    int totalRecords = smartPosterRecord.titleRecords.Count + smartPosterRecord.iconRecords.Count + smartPosterRecord.extraRecords.Count;
                    recordItem.UpdateLabel(string.Format(SMART_POSTER_RECORD_FORMAT, NDEFRecordType.SMART_POSTER, smartPosterRecord.uriRecord.fullUri, smartPosterRecord.action, smartPosterRecord.size, smartPosterRecord.mimeType, totalRecords));
                    break;
                }

                recordItem.RectTransform.anchoredPosition = new Vector2(0, y);
                y -= recordItem.RectTransform.rect.height;
                y -= Y_SPACING;
            }

            ndefMessageScrollRect.content.sizeDelta = new Vector2(0, Mathf.Abs(y));
        }
        public IActionResult CreateVirtualTicket()
        {
            byte[]      encryptedTicketInNDEFMessage = new byte[] { };
            SmartTicket virtualTicket = null;

            if (!_dbContext.SmartTickets.Any(s => s.Username == User.Identity.Name && s.Virtual && !s.Deactivated))
            {
                try
                {
                    byte[] virtualTicketId = Guid.NewGuid().ToByteArray();
                    virtualTicket = new SmartTicket()
                    {
                        CardId = BitConverter.ToString(virtualTicketId), Credit = 0, TicketType = "BIT", Username = User.Identity.Name, Virtual = true, UsageTimestamp = DateTime.Now, Deactivated = false
                    };
                    byte[] encryptedTicket = TicketEncryption.EncryptTicket(Utility.ConvertToEncryptableSmartTicket(virtualTicket), TicketEncryption.GetPaddedIV(virtualTicketId));
                    encryptedTicketInNDEFMessage = new NDEFMessage(encryptedTicket, NDEFRecordType.Types.Text).GetFormattedBlock();
                    _dbContext.SmartTickets.Add(virtualTicket);
                    _dbContext.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(StatusCode((int)HttpStatusCode.InternalServerError, ex.Message));
                }
                return(Ok(BitConverter.ToString(encryptedTicketInNDEFMessage)));
            }
            return(StatusCode((int)HttpStatusCode.InternalServerError, "The user already has an associated virtual ticket"));
        }
        public IActionResult AddCredit([FromBody] CreditRecharge recharge)
        {
            byte[]      encryptedTicketInNDEFMessage;
            SmartTicket ticket = _dbContext.SmartTickets.Find(recharge.TicketId);

            // Add online payments logic here to authorize the balance increase
            if (ticket != null)
            {
                try
                {
                    ticket.Credit += recharge.Amount;
                    EncryptableSmartTicket encryptableTicket = Utility.ConvertToEncryptableSmartTicket(ticket);
                    byte[] encryptedTicket = TicketEncryption.EncryptTicket(encryptableTicket, TicketEncryption.GetPaddedIV(encryptableTicket.CardID));
                    encryptedTicketInNDEFMessage = new NDEFMessage(encryptedTicket, NDEFRecordType.Types.Text).GetFormattedBlock();
                    _dbContext.SaveChanges();
                    _dbContext.CreditTransactions.Add(new CreditTransaction()
                    {
                        Amount = recharge.Amount, CardId = recharge.TicketId, Date = DateTime.Now, Location = "online"
                    });
                    _dbContext.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(StatusCode(500, ex.Message));
                }
                return(Ok(encryptedTicketInNDEFMessage));
            }
            else
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, "The ticket has not been found."));
            }
        }
Ejemplo n.º 4
0
        public void OnClearMessageClick()
        {
#if !UNITY_EDITOR && UNITY_ANDROID
            NativeNFCManager.CancelNDEFWriteRequest();
#endif
            pendingMessage = null;
            view.CleanupRecordItems();
        }
Ejemplo n.º 5
0
        public void OnAddRecordClick()
        {
            if (pendingMessage == null)
            {
                pendingMessage = new NDEFMessage();
            }

            NDEFRecord     record = null;
            string         value  = view.TypeDropdown.options[view.TypeDropdown.value].text;
            NDEFRecordType type   = (NDEFRecordType)Enum.Parse(typeof(NDEFRecordType), value);

            switch (type)
            {
            case NDEFRecordType.TEXT:
                string text         = view.TextInput.text;
                string languageCode = view.LanguageCodeInput.text;
                if (languageCode.Length != 2)
                {
                    languageCode = "en";
                }
                TextRecord.TextEncoding textEncoding = (TextRecord.TextEncoding)view.TextEncodingDropdown.value;
                record = new TextRecord(text, languageCode, textEncoding);
                break;

            case NDEFRecordType.URI:
                string uri = view.UriInput.text;
                record = new UriRecord(uri);
                break;

            case NDEFRecordType.MIME_MEDIA:
                string mimeType = "image/png";                         //We're only using png images atm
                IconID iconID   = (IconID)view.IconDropdown.value;
                byte[] mimeData = GetIconBytes(iconID);
                record = new MimeMediaRecord(mimeType, mimeData);
                break;

            case NDEFRecordType.EXTERNAL_TYPE:
                string domainName       = view.DomainNameInput.text;
                string domainType       = view.DomainTypeInput.text;
                string domainDataString = view.DomainDataInput.text;
                byte[] domainData       = Encoding.UTF8.GetBytes(domainDataString);                   //Data represents a string in this example
                record = new ExternalTypeRecord(domainName, domainType, domainData);
                break;
            }

            pendingMessage.Records.Add(record);

            view.UpdateNDEFMessage(pendingMessage);
        }
Ejemplo n.º 6
0
 public void OnWriteOKClick()
 {
     messageScreenView.Hide();
     pendingMessage = null;
     view.CleanupRecordItems();
 }