public GrblRequest Dequeue() { GrblRequest request = backingQueue.Dequeue(); CharacterCount -= request.Message.Length; return(request); }
private void completeStatusQueryRequest(GrblResponseStatus status) { lock (pendingRequests) { if (pendingStatusQueryRequest != null) { pendingStatusQueryRequest.Complete(status); pendingStatusQueryRequest = null; } } }
private void checkRequests() { while (pendingRequests.Count > 0) { if (pendingRequests.Peek().ResponseStatus == GrblResponseStatus.Pending) { break; } GrblRequest request = pendingRequests.Dequeue(); CurrentLine = request.LineNumber + 1; if (request.ResponseStatus != GrblResponseStatus.Ok && request.ResponseStatus != GrblResponseStatus.Silent) { ErrorsDetected = true; } } }
private void sendLines(GrblConnection connection) { while (nextLine < Lines.Count) { GrblRequest request = GrblRequest.CreateGCodeRequest(Lines[nextLine], nextLine); if (!connection.Send(request)) { break; } if (request.ResponseStatus == GrblResponseStatus.Failure) { break; } pendingRequests.Enqueue(request); nextLine++; } }
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); } } } }
public void Enqueue(GrblRequest request) { backingQueue.Enqueue(request); CharacterCount += request.Message.Length; }
public bool Send(GrblRequest request) { if (request.ResponseStatus != GrblResponseStatus.Unsent) { throw new InvalidOperationException(); } if (request.FireAndForget) { try { request.Sent(); #if LOG_TRAFFIC_CONSOLE Console.WriteLine("SENT: " + request.Message); #endif serialWrite(request.Message); request.Complete(GrblResponseStatus.Silent); } catch (Exception e) { Debug.WriteLine(e); request.Complete(GrblResponseStatus.Failure); } return(true); } lock (pendingRequests) { if ((request.Message.Length > TxRxBufferSize - pendingRequests.CharacterCount) || (pendingStatusQueryRequest != null && request.Type == GrblRequestType.StatusQuery) || pendingHomingRequest) { return(false); } try { request.Sent(); #if LOG_TRAFFIC_CONSOLE Console.WriteLine("SENT: " + request.Message); #endif serialWrite(request.Message); } catch (Exception e) { Debug.WriteLine(e); serialPort.Close(); request.Complete(GrblResponseStatus.Failure); return(true); } if (request.Type != GrblRequestType.StatusQuery) { pendingRequests.Enqueue(request); if (request.Type == GrblRequestType.Homing) { pendingHomingRequest = true; } } else { pendingStatusQueryRequest = request; } } return(true); }