예제 #1
0
        public void Complete(GrblResponseStatus status, int errorCode = 0)
        {
            if (ResponseStatus != GrblResponseStatus.Pending)
            {
                throw new InvalidOperationException();
            }

            ResponseStatus    = status;
            ResponseErrorCode = errorCode;
        }
예제 #2
0
 private void completeStatusQueryRequest(GrblResponseStatus status)
 {
     lock (pendingRequests)
     {
         if (pendingStatusQueryRequest != null)
         {
             pendingStatusQueryRequest.Complete(status);
             pendingStatusQueryRequest = null;
         }
     }
 }
예제 #3
0
        private void completeAll(GrblResponseStatus status)
        {
            lock (pendingRequests)
            {
                while (!pendingRequests.IsEmpty)
                {
                    completeQueuedRequest(status);
                }

                completeStatusQueryRequest(status);
            }
        }
예제 #4
0
        private void completeQueuedRequest(GrblResponseStatus status, int?errorCode = null)
        {
            lock (pendingRequests)
            {
                if (!pendingRequests.IsEmpty)
                {
                    GrblRequest request = pendingRequests.Dequeue();

                    if (request.Type == GrblRequestType.Homing)
                    {
                        pendingHomingRequest = false;
                    }

                    if (!errorCode.HasValue)
                    {
                        request.Complete(status);
                    }
                    else
                    {
                        request.Complete(status, errorCode.Value);
                    }
                }
            }
        }