Esempio n. 1
0
 public void RecordTack(Tack tack)
 {
     //TODO: consider adding true wind angle or dir?
     _connection.Execute("insert into Tack (start,endcourseoverground) values (@At,@CourseOverGround)", tack);
     //TODO: there has to be a better way to do this
     tack.Id = (long)_connection.ExecuteScalar("select max(id) from Tack");
 }
        public string Get(IChatMessageEnvelope request)
        {
            try
            {
                if (Tack == null)
                {
                    throw new InvalidOperationException(ExceptionMessage_ITackCannotBeNull);
                }
                else
                {
                    //NOTE: Define the query
                    request.Query =
                        (chatMessageQueryRepo, chatMessageEnvelopeParam) =>
                    {
                        IChatMessageEnvelope nextChatMessage = chatMessageQueryRepo.GetLatestChatMessage(chatMessageEnvelopeParam);
                        return(nextChatMessage);
                    };

                    IChatMessageEnvelope responseEnvelope = (IChatMessageEnvelope)Tack.GET(request);
                    string responseString = _marshaller.MarshallPayloadJSON(responseEnvelope);
                    return(responseString);
                }
            }
            catch (InvalidOperationException ex)
            {
                throw new InvalidOperationException(ex.Message, ex);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message, ex);
            }
        }
        public IChatMessageEnvelope GetByID(IChatMessageEnvelope request)
        {
            try
            {
                if (Tack == null)
                {
                    throw new InvalidOperationException(ExceptionMessage_ITackCannotBeNull);
                }
                else
                {
                    //NOTE: Define the query
                    request.Query =
                        (chatMessageQueryRepo, chatMessageEnvelopeParam) =>
                    {
                        IChatMessageEnvelope nextChatMessage = chatMessageQueryRepo.GetChatMessageByID(chatMessageEnvelopeParam);
                        return(nextChatMessage);
                    };

                    return((IChatMessageEnvelope)Tack.GET(request));
                }
            }
            catch (InvalidOperationException ex)
            {
                throw new InvalidOperationException(ex.Message, ex);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message, ex);
            }
        }
 public void RemoveTackFromList(Tack p_tack)
 {
     if (p_tack != null)
     {
         TacksInObject.RemoveChecking(p_tack);
         _needCheckKinematic = true;
     }
 }
 public void AddTackInList(Tack p_tack)
 {
     if (p_tack != null)
     {
         TacksInObject.AddChecking(p_tack);
         _needCheckKinematic = true;
     }
 }
	public void RemoveTackFromList(Tack p_tack)
	{
		if(p_tack != null)
		{
			TacksInObject.RemoveChecking(p_tack);
			_needCheckKinematic = true;
		}
	}
	public void AddTackInList(Tack p_tack)
	{
		if(p_tack != null)
		{
			TacksInObject.AddChecking(p_tack);
			_needCheckKinematic = true;
		}
	}
    public GameObject GetTackObjectWithIndex(int p_index, bool p_returnDefaultWhenOutOfBounds = true)
    {
        Tack       v_tack       = GetTackWithIndex(p_index, p_returnDefaultWhenOutOfBounds);
        GameObject v_tackObject = v_tack != null? v_tack.gameObject : null;

        if (v_tackObject == null)
        {
            v_tackObject = this.gameObject;
        }
        return(v_tackObject);
    }
Esempio n. 9
0
 public void Dispose()
 {
     try
     {
         if (_isDisposed == false)
         {
             MessageBusWiter.Dispose();
             MessageBusReaderBank.Dispose();
             Tack.Dispose();
             _isDisposed = true;
         }
     }
     catch (Exception ex)
     {
         new ApplicationException(ex.Message, ex);
     }
 }
 public void Dispose()
 {
     try
     {
         if (_isDisposed == false)
         {
             MessageBusWiter.Dispose();
             MessageBusReaderBank.Dispose();
             Tack.SkyWatch.UnWatch(typeof(IChatMessageEnvelope).ToString(), ServiceGUID); //NOTE: Must stop watching since SkyWatch is a global instance.
             Tack.Dispose();
             _isDisposed = true;
         }
     }
     catch (Exception ex)
     {
         new ApplicationException(ex.Message, ex);
     }
 }
Esempio n. 11
0
        /// <summary>
        /// compare the new state to the last values and determine if a tack has occured
        /// if so, update the state with the new tack
        /// </summary>
        /// <param name="state"></param>
        private void CheckForTack(State state)
        {
            var latest = _history.Last();

            var deltas = _history.Where(x => x.Time > latest.Time - _tackThresholdTime).Select(x => Math.Abs(AngleUtilities.AngleDifference(latest.CourseOverGroundRadians, x.CourseOverGroundRadians))).Max();

            if (deltas > _tackThreshold)
            {
                //tack detected
                _lastTackAt = latest.Time;

                var priorToTack = _history.Where(x => x.Time < latest.Time - _dataExclusionTime).OrderByDescending(x => x.Time).FirstOrDefault();
                if (priorToTack != null)
                {
                    _previousTackCourseOverGroundRadians = priorToTack.CourseOverGroundRadians;
                }
                else
                {
                    _previousTackCourseOverGroundRadians = null;
                }

                _history.Clear();
                _currentTackStartCourseOverGroundRadians = null;
                var difference        = AngleUtilities.AngleDifference(_previousTackCourseOverGroundRadians.Value, latest.CourseOverGroundRadians);
                var differenceDegrees = AngleUtilities.RadiansToDegrees(difference);

                string message = string.Format("Tack: {0:0.0}°", differenceDegrees);
                _logger.Info(message);

                state.AddMessage(MessageCategory.Tactical, MessagePriority.Normal, 5, message);

                //record the tack in the state
                if (state.RaceStarted && _currentTack != null)
                {
                    _currentTack.CourseOverGround = AngleUtilities.RadiansToDegrees(_previousTackCourseOverGroundRadians.Value);
                    state.Tacks.Add(_currentTack);
                }

                _currentTack    = new Tack();
                _currentTack.At = latest.Time;
            }
        }
Esempio n. 12
0
    public Tack GetTackWithIndex(int p_index, bool p_returnDefaultWhenOutOfBounds = true)
    {
        Tack v_tack = null;

        if (p_index >= 0 && p_index < TacksInObject.Count)
        {
            v_tack = TacksInObject[p_index];
        }
        if (v_tack == null && p_returnDefaultWhenOutOfBounds)
        {
            foreach (Tack v_tackInList in TacksInObject)
            {
                v_tack = v_tackInList;
                if (v_tack != null)
                {
                    break;
                }
            }
        }
        return(v_tack);
    }
 private void SkyWatchEventHandler(ISkyWatchEventTypes skyWatchEventType, string eventKey)
 {
     lock (_thisLock)
     {
         try
         {
             if (skyWatchEventType == ISkyWatchEventTypes.WriteOccured)
             {
                 Type envelopeType = Tack.GetIEnvelopeType(eventKey);
                 long ID           = Tack.GetStorageID(eventKey);
                 IChatMessageEnvelope eventSubject_ChatMessageEnvelope = _chatMessageEnvelopeFactory.InstantiateIEnvelope();
                 eventSubject_ChatMessageEnvelope.ChatMessageID = ID;
                 IChatMessageEnvelope chatMessageEnvelopeFromSkyWatch = GetByID(eventSubject_ChatMessageEnvelope);
                 _skyWatchQueue.Enqueue(chatMessageEnvelopeFromSkyWatch);
             }
         }
         catch (Exception ex)
         {
             throw new ApplicationException(ex.Message, ex);
         }
     }
 }
Esempio n. 14
0
    public int GetIndexOfTack(Tack p_tack, bool p_addThisTackIfNotAdded = true)
    {
        int v_returnIndex = -1;

        if (p_tack != null)
        {
            for (int i = 0; i < TacksInObject.Count; i++)
            {
                Tack v_tackInObject = TacksInObject[i];
                if (p_tack == v_tackInObject)
                {
                    v_returnIndex = i;
                    break;
                }
            }
            if (v_returnIndex == -1 && p_addThisTackIfNotAdded)
            {
                TacksInObject.Add(p_tack);
                v_returnIndex = TacksInObject.Count - 1;
            }
        }
        return(v_returnIndex);
    }
Esempio n. 15
0
        public void TestITackCRUD()
        {
            IBoards   boards   = GetMockedIBoards();
            IEnvelope envelope = _erector.Container.Resolve <IEnvelope>();

            envelope.ServiceRoute = "ChatMessage";
            IChatMessageEnvelope chatMessageEnvelope = _erector.Container.Resolve <IChatMessageEnvelope>();

            chatMessageEnvelope.ServiceRoute = "ChatMessage";

            //Boards cannot be null.
            ITack nullBoardsTack = new Tack(null);

            try
            {
                IEnvelope envelopeNullBoard = nullBoardsTack.GET(envelope);
                Assert.Fail();
            }
            catch (InvalidOperationException ex)
            {
                string message = ex.Message;
                Assert.AreEqual(message, nullBoardsTack.ExceptionMessage_BoardsCannotBeNull);
            }

            ITack tack = new Tack(boards);

            //Create
            IEnvelope createEnvelope = tack.POST(envelope);

            Assert.IsNotNull(createEnvelope);
            Assert.AreEqual(createEnvelope.ServiceRoute, envelope.ServiceRoute);

            IEnvelope createChatMessageEnvelope = tack.POST(chatMessageEnvelope);

            Assert.IsNotNull(createChatMessageEnvelope);
            Assert.AreEqual(createChatMessageEnvelope.ServiceRoute, envelope.ServiceRoute);
            Assert.IsTrue(createChatMessageEnvelope.GetType() == typeof(ChatMessageEnvelope));

            //Read
            IEnvelope readEnvelope = tack.GET(envelope);

            Assert.IsNotNull(readEnvelope);
            Assert.AreEqual(readEnvelope.ServiceRoute, envelope.ServiceRoute);

            IEnvelope readChatMessageEnvelope = tack.GET(chatMessageEnvelope);

            Assert.IsNotNull(readChatMessageEnvelope);
            Assert.AreEqual(readChatMessageEnvelope.ServiceRoute, envelope.ServiceRoute);
            Assert.IsTrue(readChatMessageEnvelope.GetType() == typeof(ChatMessageEnvelope));

            //Update
            IEnvelope updateEnvelope = tack.PUT(envelope);

            Assert.IsNotNull(updateEnvelope);
            Assert.AreEqual(updateEnvelope.ServiceRoute, envelope.ServiceRoute);

            IEnvelope updateChatMessageEnvelope = tack.PUT(chatMessageEnvelope);

            Assert.IsNotNull(updateChatMessageEnvelope);
            Assert.AreEqual(updateChatMessageEnvelope.ServiceRoute, envelope.ServiceRoute);
            Assert.IsTrue(updateChatMessageEnvelope.GetType() == typeof(ChatMessageEnvelope));

            //Delete
            IEnvelope deleteEnvelope = tack.DELETE(envelope);

            Assert.IsNotNull(deleteEnvelope);
            Assert.AreEqual(deleteEnvelope.ServiceRoute, envelope.ServiceRoute);

            IEnvelope deleteChatMessageEnvelope = tack.DELETE(chatMessageEnvelope);

            Assert.IsNotNull(deleteChatMessageEnvelope);
            Assert.AreEqual(deleteChatMessageEnvelope.ServiceRoute, envelope.ServiceRoute);
            Assert.IsTrue(deleteChatMessageEnvelope.GetType() == typeof(ChatMessageEnvelope));
        }
Esempio n. 16
0
	public int GetIndexOfTack(Tack p_tack, bool p_addThisTackIfNotAdded = true)
	{
		int v_returnIndex = -1;
		if(p_tack != null)
		{
			for(int i=0; i<TacksInObject.Count; i++)
			{
				Tack v_tackInObject = TacksInObject[i];
				if(p_tack == v_tackInObject)
				{
					v_returnIndex = i;
					break;
				}
			}
			if(v_returnIndex == -1 && p_addThisTackIfNotAdded)
			{
				TacksInObject.Add(p_tack);
				v_returnIndex = TacksInObject.Count -1;
			}
		}
		return v_returnIndex;
	}