private void LogQso() { haveLogged = true; if (HaveTheirExchange) { haveLoggedExchange = true; } qsoSequencerCallbacks.LogQso(); State = 4; }
public void OnReceived(bool directlyToMe, XDpack77.Pack77Message.Message msg) { deferredToEndOfReceive = null; XDpack77.Pack77Message.Exchange exc = msg as XDpack77.Pack77Message.Exchange; if (!amLeaderSet) { amLeader = directlyToMe; } amLeaderSet = true; XDpack77.Pack77Message.Roger roger = msg as XDpack77.Pack77Message.Roger; bool ack = (null != roger) && (roger.Roger); if (null != exc && (!haveGrid || directlyToMe)) { string gs = exc.GridSquare; int rp = exc.SignaldB; var qslm = msg as XDpack77.Pack77Message.StandardMessage; if (!String.IsNullOrEmpty(gs)) { // received a grid haveGrid = true; ExchangeSent es; if (ack) { haveAckOfGrid = true; } if (amLeader || ack) { es = () => cb.SendExchange(ExchangeTypes.DB_REPORT, haveReport, () => { haveSentReport = true; }); } else { es = () => cb.SendExchange(ExchangeTypes.GRID_SQUARE, directlyToMe && haveGrid, () => { haveSentGrid = true; }); } lastSent = es; es(); return; } else if (rp > XDpack77.Pack77Message.Message.NO_DB) { // received a dB report haveReport = true; lastSent = null; if (ack && haveSentReport) { haveAckOfReport = true; } if (haveAckOfReport) { ExchangeSent es = () => cb.SendAck(() => { if (!haveLoggedReport) { haveLoggedReport = true; if (haveGrid) { haveLoggedGrid = true; } cb.LogQso(); } }); lastSent = es; es(); } else { ExchangeSent es = () => cb.SendExchange(ExchangeTypes.DB_REPORT, true, () => { haveSentReport = true; }); lastSent = es; es(); } return; } else if (null == msg as XDpack77.Pack77Message.StandardMessage) { // message has an exchange, but for some contest we don't know about if (!haveReceivedWrongExchange) { haveReceivedWrongExchange = true; cb.LogQso(); } cb.SendAck(null); // send a 73, log it, and get going lastSent = null; return; } } if (!haveReceivedWrongExchange && !haveGrid && !haveReport) { ExchangeSent es = null; if (haveSentGrid) { es = () => cb.SendExchange(ExchangeTypes.DB_REPORT, false, () => { haveSentReport = true; }); } else { es = () => cb.SendExchange(ExchangeTypes.GRID_SQUARE, false, () => { haveSentGrid = true; }); } lastSent = es; es(); return; } XDpack77.Pack77Message.QSL qsl = msg as XDpack77.Pack77Message.QSL; if ((qsl != null) && String.Equals(qsl.CallQSLed, "ALL") || directlyToMe) { // what we need to do Action toDoOnAck = () => { if (!haveLoggedGrid && (haveReport || (directlyToMe && haveGrid))) { haveLoggedGrid = true; if (haveReport) { haveLoggedReport = true; } lastSent = null; cb.LogQso(); ackOfAckGrid = qsl.QslText; // see if they repeat exact message AckMoreAcks = MAXIMUM_ACK_OF_ACK; cb.SendOnLoggedAck(() => { onLoggedAckEnabled = true; }); return; } if (AckMoreAcks > 0 && directlyToMe && String.Equals(qsl.QslText, ackOfAckGrid)) { // only repeat this if they send exact same message lastSent = null; AckMoreAcks -= 1; if (onLoggedAckEnabled) { cb.SendOnLoggedAck(null); } else { cb.SendAck(null); } return; } }; // do it now? or see if multi-streaming partner sends a message directlyToMe if (directlyToMe) { toDoOnAck(); } else { deferredToEndOfReceive = toDoOnAck; } return; } OnReceivedNothing(); // didn't get what I wanted }
private void LogQso() { haveLogged = true; qsoSequencerCallbacks.LogQso(); State = 4; }
public void OnReceived(bool directlyToMe, XDpack77.Pack77Message.Message msg) { XDpack77.Pack77Message.Exchange exc = msg as XDpack77.Pack77Message.Exchange; if (!amLeaderSet) { amLeader = directlyToMe; } amLeaderSet = true; if (null != exc) { string gs = exc.GridSquare; int rp = exc.SignaldB; if (!String.IsNullOrEmpty(gs)) { // received a grid haveGrid = true; ExchangeSent es; if (amLeader) { es = () => cb.SendExchange(ExchangeTypes.DB_REPORT, false, () => { haveSentReport = true; }); } else { es = () => cb.SendExchange(ExchangeTypes.GRID_SQUARE, false, null); } lastSent = es; es(); return; } else if (rp > XDpack77.Pack77Message.Message.NO_DB) { // received a dB report XDpack77.Pack77Message.Roger roger = msg as XDpack77.Pack77Message.Roger; bool ack = (null != roger) && (roger.Roger); haveReport = true; lastSent = null; if (amLeader && ack && haveSentReport) { cb.SendAck(null); if (!haveLoggedReport) { haveLoggedReport = true; if (haveGrid) { haveLoggedGrid = true; } cb.LogQso(); } } else { ExchangeSent es = () => cb.SendExchange(ExchangeTypes.DB_REPORT, true, () => { haveSentReport = true; }); lastSent = es; es(); } return; } } XDpack77.Pack77Message.QSL qsl = msg as XDpack77.Pack77Message.QSL; if ((qsl != null) && String.Equals(qsl.CallQSLed, "ALL") || directlyToMe) { if (!haveGrid && !haveReport) { ExchangeSent es = () => cb.SendExchange(amLeader ? ExchangeTypes.DB_REPORT : ExchangeTypes.GRID_SQUARE, false, null); lastSent = es; es(); return; } if (!haveLoggedGrid && (haveReport || (directlyToMe && haveGrid))) { haveLoggedGrid = true; if (haveReport) { haveLoggedReport = true; } lastSent = null; if (!amLeader) { cb.SendAck(null); } cb.LogQso(); return; } OnReceivedNothing(); // didn't get what I wanted } }