public void CheckDupeAndMult(string fromCall, string digitalMode, XDpack77.Pack77Message.Message rm, out bool dupeout, out short mult) { int dupe = 0; mult = 0; iWlDupingEntry.ClearEntry(); if (DgtlFieldNumber > 0) { iWlDupingEntry.SetFieldN((short)DgtlFieldNumber, digitalMode); } if (ReceivedRstFieldNumber > 0) // ClearEntry in WL defaults the RST. clear it out { iWlDupingEntry.SetFieldN((short)ReceivedRstFieldNumber, ""); } if (GridSquareReceivedFieldNumber > 0) { XDpack77.Pack77Message.Exchange hisGrid = rm as XDpack77.Pack77Message.Exchange; if (hisGrid != null && !String.IsNullOrEmpty(hisGrid.GridSquare)) { iWlDupingEntry.SetFieldN((short)GridSquareReceivedFieldNumber, hisGrid.GridSquare); } } iWlDupingEntry.Callsign = fromCall; dupe = iWlDupingEntry.Dupe(); if (dupe == 0) { mult = iWlDupingEntry.IsNewMultiplier((short)-1); if (mult <= 0 && GridSquareReceivedFieldNumber > 0) { mult = iWlDupingEntry.IsNewMultiplier((short)GridSquareReceivedFieldNumber); } } dupeout = dupe != 0; }
protected override XDpack77.Pack77Message.Exchange ExchangeFromMessage(XDpack77.Pack77Message.Message m) { if (!messageSelector(m)) { return(null); } XDpack77.Pack77Message.Exchange exc = m as XDpack77.Pack77Message.Exchange; return(exc); }
protected override XDpack77.Pack77Message.Exchange ExchangeFromMessage(XDpack77.Pack77Message.Message m) { // more restrictive than base class. Insist on a grid square XDpack77.Pack77Message.Exchange exc = base.ExchangeFromMessage(m); if (exc != null && !String.IsNullOrEmpty(exc.GridSquare) && exc.GridSquare.Length >= 4) { return(exc); } return(null); }
protected virtual XDpack77.Pack77Message.Exchange ExchangeFromMessage(XDpack77.Pack77Message.Message m) { XDpack77.Pack77Message.Exchange exc = m as XDpack77.Pack77Message.Exchange; // The Pack77Message Exchange interface can be deceptive. // The Standard message CQ can have this interface but a null exc.Exchange with non-null GridSquare if (exc != null && !String.IsNullOrEmpty(exc.Exchange)) { return(exc); } return(null); }
public void CheckDupeAndMult(string call, string digitalMode, XDpack77.Pack77Message.Message m, out bool dupe, out short mult) { // XDpack77.Pack77Message.Message can't be remoted as-is // but it can be reproduced on the server side with just its Content property and i3 and n3 dupe = false; mult = 0; var args = new object[] { call, digitalMode, m.AsReceived.Content, dupe, mult, m.i3, m.n3 }; System.Reflection.ParameterModifier mods = new System.Reflection.ParameterModifier(args.Length); mods[3] = true; mods[4] = true; remoteLoggerType.InvokeMember("CheckDupeAndMult", bf, null, remoteLogger, args, new System.Reflection.ParameterModifier[1] { mods }, null, null); dupe = (bool)args[3]; mult = (short)args[4]; }
private void textBoxXmit_TextChanged(object sender, EventArgs e) { String sent = null; bool[] ft8bits = null; String msgText = textBoxXmit.Text.ToUpper();// the ft8 generator behaves more naturally with ToUpper #if DEBUG // this code's only purpose is to make it easy to interactively test // ReceivedMessage.CreateFromPacked XDft.Generator.setpack77mycall(mycall); // probably not needed, but sets Fortran static int n28 = 0; bool isHashed = XDft.Generator.pack28(mycall, ref n28); int i3 = 0; int n3 = 0; bool[] c77 = null; XDft.Generator.pack77(msgText, ref i3, ref n3, ref c77); String outs = null; int nrx = 1; XDft.Generator.unpack77(c77, nrx, ref outs); XDpack77.Pack77Message.Message m = XDpack77.Pack77Message.ReceivedMessage.CreateFromPacked(i3, n3, msgText); #endif // turn the text into a wsjtx itone array switch (digiMode) { case XDft.DigiMode.DIGI_FT8: XDft.Generator.genft8( msgText, ref sent, ref itone, ref ft8bits); break; case XDft.DigiMode.DIGI_FT4: XDft.Generator.genft4( msgText, ref sent, ref itone, ref ft8bits); break; } labelXmit.Text = sent; }
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 }
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 } }