public BeaconInfo(BeaconId beaconId, int txPower, int RSSI, NSData telemetry)
 {
     this.BeaconId  = beaconId;
     this.TxPower   = txPower;
     this.RSSI      = RSSI;
     this.Telemetry = telemetry;
 }
        public static BeaconInfo BeaconInfoForEIDFrameData(NSData frameData, NSData telemetry, int RSSI)
        {
            var count = frameData.Length;

            if (count > 1)
            {
                var frameBytes = Enumerable.Repeat((byte)0, (int)count).ToArray();
                Marshal.Copy(frameData.Bytes, frameBytes, 0, (int)count);

                if (frameBytes[0] != BeaconInfo.EddystoneEIDFrameTypeID)
                {
                    Debug.WriteLine("Unexpected non EID Frame passed to BeaconInfoForEIDFrameData.");
                    return(null);
                }
                else if (frameBytes.Length < 10)
                {
                    Debug.WriteLine("Frame Data for EID Frame unexpectedly truncated in BeaconInfoForEIDFrameData.");
                }

                var txPower  = Convert.ToInt32(frameBytes[1]);
                var beaconId = frameBytes.Skip(2).Take(10).ToArray();
                var bid      = new BeaconId(BeaconType.EddystoneEID, beaconId);
                return(new BeaconInfo(bid, txPower, RSSI, telemetry));
            }

            return(null);
        }
        /// <summary>
        ///     Connects to the WebSocket server
        /// </summary>
        /// <returns>If connection was successful</returns>
        public bool Connect()
        {
            // TODO: A more elaborate connect and configuration procedure
            UrlPath = _uri.AbsolutePath;

            var connectReq  = new HttpRequestMessage(HttpMethod.Options, UrlPath);
            var connectResp = _client.SendAsync(connectReq).Result;

            // Example of configuring the client
            var idHeader = connectResp.Headers.GetValues("X-Id-Header").FirstOrDefault();
            var beaconId = connectResp.Headers.GetValues("X-Identifier").FirstOrDefault();

            if (beaconId != null)
            {
                BeaconId = Guid.Parse(beaconId);
                _client.DefaultRequestHeaders.Add(idHeader, BeaconId.ToString());
                Connected = true;
            }
            else
            {
                Connected = false;
            }

            return(Connected);
        }
Exemple #4
0
        public virtual string GetProperty(string strPropertyName, string strFormat, System.Globalization.CultureInfo formatProvider, DotNetNuke.Entities.Users.UserInfo accessingUser, DotNetNuke.Services.Tokens.Scope accessLevel, ref bool propertyNotFound)
        {
            switch (strPropertyName.ToLower())
            {
            case "flightid": // Int
                return(FlightId.ToString(strFormat, formatProvider));

            case "beaconid": // Int
                return(BeaconId.ToString(strFormat, formatProvider));

            case "passeddistance": // Int
                if (PassedDistance == null)
                {
                    return("");
                }
                ;
                return(((int)PassedDistance).ToString(strFormat, formatProvider));

            case "passorder": // Int
                return(PassOrder.ToString(strFormat, formatProvider));

            default:
                propertyNotFound = true;
                break;
            }

            return(Null.NullString);
        }
Exemple #5
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = BeaconId?.GetHashCode() ?? 0;
         hashCode = (hashCode * 397) ^ (EventTime?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ Trigger;
         hashCode = (hashCode * 397) ^ (Location?.GetHashCode() ?? 0);
         hashCode = (hashCode * 397) ^ Delivered.GetHashCode();
         return(hashCode);
     }
 }
Exemple #6
0
        public virtual string GetProperty(string strPropertyName, string strFormat, System.Globalization.CultureInfo formatProvider, DotNetNuke.Entities.Users.UserInfo accessingUser, DotNetNuke.Services.Tokens.Scope accessLevel, ref bool propertyNotFound)
        {
            switch (strPropertyName.ToLower())
            {
            case "beaconid": // Int
                return(BeaconId.ToString(strFormat, formatProvider));

            case "portalid": // Int
                return(PortalId.ToString(strFormat, formatProvider));

            case "code": // NVarChar
                return(PropertyAccess.FormatString(Code, strFormat));

            case "name": // NVarChar
                return(PropertyAccess.FormatString(Name, strFormat));

            case "description": // NVarChar
                if (Description == null)
                {
                    return("");
                }
                ;
                return(PropertyAccess.FormatString(Description, strFormat));

            case "coords": // VarChar
                return(PropertyAccess.FormatString(Coords, strFormat));

            case "latitude": // Float
                return(Latitude.ToString(strFormat, formatProvider));

            case "longitude": // Float
                return(Longitude.ToString(strFormat, formatProvider));

            case "altitude": // Int
                return(Altitude.ToString(strFormat, formatProvider));

            case "region": // Int
                return(Region.ToString(strFormat, formatProvider));

            case "points": // Int
                return(Points.ToString(strFormat, formatProvider));

            default:
                propertyNotFound = true;
                break;
            }

            return(Null.NullString);
        }
        public void Options()
        {
            var socket = new SocketChannel(_settings.IpAddress, _settings.Port);

            socket.Connect();
            var beaconId = new BeaconId {
                InternalId = Guid.NewGuid()
            };

            _manager.AddChannel(beaconId, socket);

            // TODO: Implement more robust request/response configuration
            HttpContext.Response.Headers.Add("X-Id-Header", IdHeader);
            HttpContext.Response.Headers.Add("X-Identifier", beaconId.InternalId.ToString());
        }
Exemple #8
0
 public override string ToString()
 {
     return($"[sn={BeaconId.ToInvariantString()}, seq={BeaconSeqNo.ToInvariantString()}]");
 }
Exemple #9
0
 /// <summary>
 ///     Removes the channel.
 /// </summary>
 /// <param name="id">The identifier.</param>
 public void RemoveChannel(BeaconId id)
 {
     _channels.TryRemove(id, out var socket);
     socket.Dispose();
 }
Exemple #10
0
 /// <summary>
 ///     Adds the channel.
 /// </summary>
 /// <param name="id">Identifier</param>
 /// <param name="channel">The channel</param>
 /// <returns></returns>
 public BeaconId AddChannel(BeaconId id, T channel)
 {
     _channels.TryAdd(id, channel);
     return(GetId(channel));
 }
Exemple #11
0
 /// <summary>
 ///     Gets the channel by Beacon identifier
 /// </summary>
 /// <param name="id">The Beacon identifier.</param>
 /// <returns></returns>
 public T GetChannelById(BeaconId id)
 {
     return(_channels.FirstOrDefault(p => p.Key.ToString() == id.ToString()).Value);
 }
Exemple #12
0
 /// <summary>
 ///     Gets the stager.
 /// </summary>
 /// <param name="beaconId">The beacon identifier.</param>
 /// <param name="is64Bit">if set to <c>true</c> [is64 bit].</param>
 /// <returns></returns>
 public byte[] GetStager(BeaconId beaconId, bool is64Bit)
 {
     return(_socketManager.GetChannelById(beaconId).GetStager(beaconId.ToString(), is64Bit));
 }
Exemple #13
0
 /// <summary>
 ///     Sends the frame.
 /// </summary>
 /// <param name="beaconId">The beacon identifier.</param>
 /// <param name="buffer">The buffer.</param>
 public void SendFrame(BeaconId beaconId, byte[] buffer)
 {
     _socketManager.GetChannelById(beaconId).SendFrame(buffer);
 }
Exemple #14
0
 /// <summary>
 ///     Reads the frame.
 /// </summary>
 /// <param name="beaconId">The beacon identifier.</param>
 /// <returns></returns>
 public byte[] ReadFrame(BeaconId beaconId)
 {
     return(_socketManager.GetChannelById(beaconId).ReadFrame());
 }
 /// <summary>
 ///     Requests a stager using the BeaconId of the channel
 /// </summary>
 /// <param name="is64Bit"></param>
 /// <param name="taskWaitTime"></param>
 /// <returns>The stager bytes</returns>
 public byte[] GetStager(bool is64Bit, int taskWaitTime = 100)
 {
     return(GetStager(BeaconId.ToString(), is64Bit, taskWaitTime));
 }
Exemple #16
0
 /// <summary>
 ///     Sends the message.
 /// </summary>
 /// <param name="socketId">The socket identifier.</param>
 /// <param name="message">The message.</param>
 /// <returns></returns>
 public async Task SendMessageAsync(BeaconId socketId, string message)
 {
     await SendMessageAsync(WebSocketManager.GetChannelById(socketId), message);
 }