void Message(MSG msg) { if (msg.message.StartsWith(".suggestion ")) { msg.message = msg.message.Substring(".suggestion ".Length); newSuggestions.Add(msg); Save(); } else if (msg.message.ToLower().Contains(server.nick.ToLower())) { newSuggestions.Add(msg); } else if (msg.message.StartsWith(".getsuggestion") && msg.from == "CrimsonRed") { if (newSuggestions.Count == 0) { irc.SendMessage(msg.from, "Sorry, no new suggestions."); return; } MSG m = newSuggestions[0]; newSuggestions.RemoveAt(0); irc.SendMessage(msg.from, m.ToString()); oldSuggestions.Add(m); Save(); } }
private void btn_send_Click(object sender, EventArgs e) { string mobile = tb_phone.Text; string sID = tb_key.Text.ToString(); if (sID.Equals("")) { MessageBox.Show("SMS API Key is missing"); } else { string sms = RbSMS.Text; if (mobile.Equals("")) { MessageBox.Show("Mobile number should not be empty"); } else if (sms.Equals("")) { MessageBox.Show("SMS Content should not be empty"); } else { Match m = Regex.Match(mobile, @"^[789]\d{9}$"); if (!m.Success) { MessageBox.Show(mobile + " is not a valid number"); } else { try { btn_send.Enabled = false; string strUrl = "https://www.isrgrajan.com//api/sms/project/handler.php?phone=" + mobile + "&sms=" + sms + "&sid=" + sID; WebRequest request = HttpWebRequest.Create(strUrl); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream s = (Stream)response.GetResponseStream(); StreamReader readStream = new StreamReader(s); string dataString = readStream.ReadToEnd(); response.Close(); s.Close(); readStream.Close(); string log = dataString.ToString(); log = log.Replace(System.Environment.NewLine, log); MessageBox.Show("Message has been sent"); writeLog("Content:{Phone: " + mobile + "; SMS: " + sms + "} " + log); } catch (Exception MSG) { MessageBox.Show("Error: Failed to send the SMS. Check logs for detailed information"); var time = DateTime.Now; string date = time.ToString("dd/MM/yyyy, HH:mm:ss"); writeLog(MSG.ToString()); } } } } }
public static bool CheckErrorCode(ErrorCode err, MSG msg) { // 调试信息 if (err == ErrorCode.OK) { if (msg != MSG.SYN_TIMESTAMP) { Log.Info("----{0} {1}", msg.ToString(), "成功"); } return(true); } Log.Error("----{0} {1} ({2})", msg.ToString(), "失败", err); // 特殊的错误进行特殊的提示 switch (err) { } return(false); }
public override string GetSpecificStats(string nick) { //Add a random quote to each if (nick.StartsWith("#")) { //quotes from channel if (nick.Contains(" ")) { //quotes from user in channel string randquote = ""; List <MSG> qu = GetMessagesFromUserInThisChannel(nick.Split(' ')[0], nick.Split(' ')[1]); if (qu.Count != 0) { MSG q = qu[new Random().Next(qu.Count)]; randquote = q.ToString(); } return(GetMessagesFromUserInThisChannel(nick.Split(' ')[0], nick.Split(' ')[1]).Count.ToString() + " quotes by " + nick.Split(' ')[1] + " in " + nick.Split(' ')[0] + "\n" + randquote); } else { string randquote = ""; List <MSG> qu = GetMessagesFromThisChannel(nick); if (qu.Count != 0) { MSG q = qu[new Random().Next(qu.Count)]; randquote = q.ToString(); } return(GetMessagesFromThisChannel(nick).Count.ToString() + " quotes in " + nick + "\n" + randquote); } } else { //quotes from user List <MSG> qu = new List <MSG>(); string randquote = ""; foreach (MSG m in quotes) { if (m.from == nick) { qu.Add(m); } } if (qu.Count != 0) { MSG q = qu[new Random().Next(qu.Count)]; randquote = q.ToString(); } return(qu.Count.ToString() + " quotes from " + nick + "\n" + randquote); } }
public override void AuthedCommand(MSG msg, int operLevel) { msg.message = msg.message.Substring(msg.message.IndexOf(' ') + 1); if (msg.message == ".getsuggestion") { if (newSuggestions.Count == 0) { irc.SendMessage(msg.from, "Sorry, no new suggestions."); return; } MSG m = newSuggestions[0]; newSuggestions.RemoveAt(0); irc.SendMessage(msg.from, m.ToString()); oldSuggestions.Add(m); Save(); } }
void irc_OnNoticeRecvd(MSG msg) { if (msg.from.ToLower() == "nickserv") { if (lastOper != null) { irc.SendMessage(lastOper, msg.message); } else { Console.WriteLine(msg.ToString()); } if (msg.message.StartsWith("This nickname is registered") && logins.ContainsKey(msg.to)) { irc.SendMessage("nickserv", "identify " + logins[msg.to]); } } }
public override string GetStats() { //Add a random quote int numQ = quotes.Count; List <string> users = new List <string>(); for (int x = 0; x < quotes.Count; x++) { if (!users.Contains(quotes[x].from)) { users.Add(quotes[x].from); } } string randquote = ""; if (quotes.Count != 0) { MSG q = quotes[new Random().Next(quotes.Count)]; randquote = q.ToString(); } return(numQ.ToString() + " quotes from " + users.Count + " users.\n" + randquote); }
public STS DatImagenativexfer(DG a_dg, MSG a_msg, ref Bitmap a_bitmap) { STS sts; IntPtr intptrBitmap = IntPtr.Zero; // Submit the work to the TWAIN thread... if (this.m_runinuithreaddelegate == null) { if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.bitmap = a_bitmap; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGENATIVEXFER; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_bitmap = m_twaincommand.Get(lIndex).bitmap; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.IMAGENATIVEXFER.ToString(), a_msg.ToString(), ""); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { } else { } if (this.m_runinuithreaddelegate == null) { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryImagenativexfer(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGENATIVEXFER, a_msg, ref intptrBitmap); } else { sts = (STS)WindowsTwaindsmDsmEntryImagenativexfer(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGENATIVEXFER, a_msg, ref intptrBitmap); } } else { if (m_blUseLegacyDSM) { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); threaddata.intptrBitmap = IntPtr.Zero; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGENATIVEXFER; m_lIndexDatImagenativexfer = m_twaincommand.Submit(threaddata); RunInUiThread(DatImagenativexferWindowsTwain32); intptrBitmap = m_twaincommand.Get(m_lIndexDatImagenativexfer).intptrBitmap; sts = m_twaincommand.Get(m_lIndexDatImagenativexfer).sts; m_twaincommand.Delete(m_lIndexDatImagenativexfer); } } else { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); threaddata.intptrBitmap = IntPtr.Zero; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGENATIVEXFER; m_lIndexDatImagenativexfer = m_twaincommand.Submit(threaddata); RunInUiThread(DatImagenativexferWindowsTwainDsm); intptrBitmap = m_twaincommand.Get(m_lIndexDatImagenativexfer).intptrBitmap; sts = m_twaincommand.Get(m_lIndexDatImagenativexfer).sts; m_twaincommand.Delete(m_lIndexDatImagenativexfer); } } } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (TWAIN.GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryImagenativexfer(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGENATIVEXFER, a_msg, ref intptrBitmap); } else { sts = (STS)Linux64DsmEntryImagenativexfer(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.IMAGENATIVEXFER, a_msg, ref intptrBitmap); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { intptrBitmap = IntPtr.Zero; sts = (STS)MacosxDsmEntryImagenativexfer(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.IMAGENATIVEXFER, a_msg, ref intptrBitmap); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ""); } // If we had a successful transfer, then convert the data... if (sts == STS.XFERDONE) { // Bump our state... m_state = STATE.S7; // Turn the DIB into a Bitmap object... a_bitmap = NativeToBitmap(ms_platform, intptrBitmap); // We're done with the data we got from the driver... Marshal.FreeHGlobal(intptrBitmap); intptrBitmap = IntPtr.Zero; } // All done... return (AutoDatStatus(sts)); }
void CheckMessage(MSG msg) { if (msg.message.StartsWith(".lastsaid ") && msg.message.Split(' ').Length > 1) { if (database.ContainsKey(msg.message.Split(' ')[1])) { MSG data = database[msg.message.Split(' ')[1]]; irc.SendMessage(msg.to, data.ToString()); } else { irc.SendMessage(msg.to, "Sorry, haven't seen them say anything..."); } } else if (msg.message.StartsWith(".addquote")) { if (msg.message.Split(' ').Length == 1) { irc.SendMessage(msg.to, "say \".addquote <nick>\" to add what that user just said to the database"); irc.SendMessage(msg.to, "say \".addquote <nick> <lines spoken>\" to save a quote from thing they have said back"); } else if (msg.message.Split(' ').Length == 2) { int pos = GetUserLines(msg.to, msg.message.Split(' ')[1], 0); if (pos != -1) { quotes.Add(log[pos]); } } else if (msg.message.Split(' ').Length == 3) { int pos = GetUserLines(msg.to, msg.message.Split(' ')[1], int.Parse(msg.message.Split(' ')[2])); if (pos != -1) { quotes.Add(log[pos]); } } } else if (msg.message.StartsWith(".randquote")) { if (msg.message.Split(' ').Length == 1) { List <MSG> qList = GetMessagesFromThisChannel(msg.to); if (qList.Count != 0) { MSG q = qList[new Random().Next(qList.Count)]; irc.SendMessage(q.to, q.ToString()); } } else { List <MSG> qList = GetMessagesFromUserInThisChannel(msg.to, msg.message.Split(' ')[1]); if (qList.Count != 0) { MSG q = qList[new Random().Next(qList.Count)]; irc.SendMessage(q.to, q.ToString()); } } } else { log.Add(msg); database[msg.from] = msg; while (log.Count > 100) { log.RemoveAt(0); } } }
/// <summary> /// Get/Set the Xfer Group... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twuint32">XFERGROUP structure</param> /// <returns>TWAIN status</returns> public STS DatXferGroup(DG a_dg, MSG a_msg, ref UInt32 a_twuint32) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twuint32 = a_twuint32; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.XFERGROUP; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twuint32 = m_twaincommand.Get(lIndex).twuint32; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.XFERGROUP.ToString(), a_msg.ToString(), XfergroupToCsv(a_twuint32)); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryXfergroup(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.XFERGROUP, a_msg, ref a_twuint32); } else { sts = (STS)WindowsTwaindsmDsmEntryXfergroup(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.XFERGROUP, a_msg, ref a_twuint32); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryXfergroup(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.XFERGROUP, a_msg, ref a_twuint32); } else { sts = (STS)Linux64DsmEntryXfergroup(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.XFERGROUP, a_msg, ref a_twuint32); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryXfergroup(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.XFERGROUP, a_msg, ref a_twuint32); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), XfergroupToCsv(a_twuint32)); } // All done... return (AutoDatStatus(sts)); }
void irc_OnNoticeRecvd(MSG msg) { if (msg.from.ToLower() == "nickserv") { if (lastOper != null) { irc.SendMessage(lastOper, msg.message); } else Console.WriteLine(msg.ToString()); if (msg.message.StartsWith("This nickname is registered") && logins.ContainsKey(msg.to)) irc.SendMessage("nickserv", "identify " + logins[msg.to]); } }
/// <summary> /// Issue pendingxfers commands... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twpendingxfers">PENDINGXFERS structure</param> /// <returns>TWAIN status</returns> public STS DatPendingxfers(DG a_dg, MSG a_msg, ref TW_PENDINGXFERS a_twpendingxfers) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twpendingxfers = a_twpendingxfers; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.PENDINGXFERS; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twpendingxfers = m_twaincommand.Get(lIndex).twpendingxfers; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.PENDINGXFERS.ToString(), a_msg.ToString(), ""); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryPendingxfers(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.PENDINGXFERS, a_msg, ref a_twpendingxfers); } else { sts = (STS)WindowsTwaindsmDsmEntryPendingxfers(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.PENDINGXFERS, a_msg, ref a_twpendingxfers); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryPendingxfers(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.PENDINGXFERS, a_msg, ref a_twpendingxfers); } else { sts = (STS)Linux64DsmEntryPendingxfers(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.PENDINGXFERS, a_msg, ref a_twpendingxfers); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryPendingxfers(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.PENDINGXFERS, a_msg, ref a_twpendingxfers); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), PendingxfersToCsv(a_twpendingxfers)); } // If we endxfer, go to state 5 or 6... if (a_msg == MSG.ENDXFER) { if (sts == STS.SUCCESS) { if (a_twpendingxfers.Count == 0) { m_blIsMsgxferready = false; m_state = STATE.S5; } else { m_state = STATE.S6; } } } // If we reset, go to state 5... else if (a_msg == MSG.RESET) { if (sts == STS.SUCCESS) { m_blIsMsgxferready = false; m_state = STATE.S5; } } // All done... return (AutoDatStatus(sts)); }
public STS DatUserinterface(DG a_dg, MSG a_msg, ref TW_USERINTERFACE a_twuserinterface) { STS sts; // Submit the work to the TWAIN thread... if (this.m_runinuithreaddelegate == null) { if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twuserinterface = a_twuserinterface; threaddata.twuserinterface.hParent = m_intptrHwnd; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.USERINTERFACE; m_lIndexDatUserinterface = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twuserinterface = m_twaincommand.Get(m_lIndexDatUserinterface).twuserinterface; sts = m_twaincommand.Get(m_lIndexDatUserinterface).sts; // Clear the command variables... m_twaincommand.Delete(m_lIndexDatUserinterface); } return (sts); } } // Well this is weird. I'm not sure how this design snuck past, // I assume it's because of the async nature of the button presses, // so it's easier to monitor a boolean. Regardless, we need to // use this data to do the right thing... if (m_blIsMsgclosedsok || m_blIsMsgclosedsreq) { a_msg = MSG.DISABLEDS; } // If we're doing a DISABLEDS, use the values we remembered from // the last ENABLEDS... TW_USERINTERFACE twuserinterface = a_twuserinterface; if (a_msg == MSG.DISABLEDS) { twuserinterface = m_twuserinterface; } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.USERINTERFACE.ToString(), a_msg.ToString(), UserinterfaceToCsv(twuserinterface)); } // We need this to handle data sources that return MSG_XFERREADY in // the midst of processing MSG_ENABLEDS... if (a_msg == MSG.ENABLEDS) { m_blAcceptXferReady = true; } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (this.m_runinuithreaddelegate == null) { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryUserinterface(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.USERINTERFACE, a_msg, ref twuserinterface); } else { sts = (STS)WindowsTwaindsmDsmEntryUserinterface(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.USERINTERFACE, a_msg, ref twuserinterface); } } else { if (m_blUseLegacyDSM) { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); threaddata.twuserinterface = a_twuserinterface; threaddata.twuserinterface.hParent = m_intptrHwnd; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.USERINTERFACE; m_lIndexDatUserinterface = m_twaincommand.Submit(threaddata); RunInUiThread(DatUserinterfaceWindowsTwain32); a_twuserinterface = m_twaincommand.Get(m_lIndexDatUserinterface).twuserinterface; sts = m_twaincommand.Get(m_lIndexDatUserinterface).sts; m_twaincommand.Delete(m_lIndexDatUserinterface); } } else { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); threaddata.twuserinterface = a_twuserinterface; threaddata.twuserinterface.hParent = m_intptrHwnd; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.USERINTERFACE; m_lIndexDatUserinterface = m_twaincommand.Submit(threaddata); RunInUiThread(DatUserinterfaceWindowsTwainDsm); a_twuserinterface = m_twaincommand.Get(m_lIndexDatUserinterface).twuserinterface; sts = m_twaincommand.Get(m_lIndexDatUserinterface).sts; m_twaincommand.Delete(m_lIndexDatUserinterface); } } } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryUserinterface(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.USERINTERFACE, a_msg, ref twuserinterface); } else { sts = (STS)Linux64DsmEntryUserinterface(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.USERINTERFACE, a_msg, ref twuserinterface); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryUserinterface(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.USERINTERFACE, a_msg, ref twuserinterface); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ""); } // If we opened, go to state 5... if ((a_msg == MSG.ENABLEDS) || (a_msg == MSG.ENABLEDSUIONLY)) { if (sts == STS.SUCCESS) { m_state = STATE.S5; // Remember the setting... m_twuserinterface = a_twuserinterface; // MSG_XFERREADY showed up while we were still processing MSG_ENABLEDS if ((sts == STS.SUCCESS) && m_blAcceptXferReady && m_blIsMsgxferready) { m_blAcceptXferReady = false; m_state = STATE.S6; // TBD //lock (m_lockTwain) //{ // m_threaddata = default(ThreadData); //} CallerToThreadSet(); } } } // If we disabled, go to state 4... else if (a_msg == MSG.DISABLEDS) { if (sts == STS.SUCCESS) { m_blIsMsgclosedsreq = false; m_blIsMsgclosedsok = false; m_state = STATE.S4; } } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Issue capabilities commands... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twcapability">CAPABILITY structure</param> /// <returns>TWAIN status</returns> public STS DatCapability(DG a_dg, MSG a_msg, ref TW_CAPABILITY a_twcapability) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); long lIndex = 0; // TBD: sometimes this doesn't work! Not sure why // yet, but a retry takes care of it. for (int ii = 0; ii < 5; ii++) { // Set our command variables... threaddata = default(ThreadData); threaddata.twcapability = a_twcapability; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.CAPABILITY; lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Hmmm... if ( (a_msg == MSG.GETCURRENT) && (m_twaincommand.Get(lIndex).sts == STS.SUCCESS) && (m_twaincommand.Get(lIndex).twcapability.ConType == (TWON)0) && (m_twaincommand.Get(lIndex).twcapability.hContainer == IntPtr.Zero)) { Thread.Sleep(1000); continue; } // We're done... break; } // Return the result... a_twcapability = m_twaincommand.Get(lIndex).twcapability; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { if ((a_msg == MSG.SET) || (a_msg == MSG.SETCONSTRAINT)) { Log.LogSendBefore(a_dg.ToString(), DAT.CAPABILITY.ToString(), a_msg.ToString(), CapabilityToCsv(a_twcapability)); } else { string szCap = a_twcapability.Cap.ToString(); if (!szCap.Contains("_")) { szCap = "0x" + ((ushort)a_twcapability.Cap).ToString("X"); } Log.LogSendBefore(a_dg.ToString(), DAT.CAPABILITY.ToString(), a_msg.ToString(), szCap + ",0,0"); } } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryCapability(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.CAPABILITY, a_msg, ref a_twcapability); } else { sts = (STS)WindowsTwaindsmDsmEntryCapability(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.CAPABILITY, a_msg, ref a_twcapability); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryCapability(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.CAPABILITY, a_msg, ref a_twcapability); } else { sts = (STS)Linux64DsmEntryCapability(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.CAPABILITY, a_msg, ref a_twcapability); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryCapability(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.CAPABILITY, a_msg, ref a_twcapability); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { if ((a_msg == MSG.RESETALL) || ((sts != STS.SUCCESS) && (sts != STS.CHECKSTATUS))) { Log.LogSendAfter(sts.ToString(), ""); } else { Log.LogSendAfter(sts.ToString(), CapabilityToCsv(a_twcapability)); } } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Issue DSM commands... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_intptrHwnd">PARENT structure</param> /// <returns>TWAIN status</returns> public STS DatParent(DG a_dg, MSG a_msg, ref IntPtr a_intptrHwnd) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.intptrHwnd = a_intptrHwnd; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.PARENT; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_intptrHwnd = m_twaincommand.Get(lIndex).intptrHwnd; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.PARENT.ToString(), a_msg.ToString(), ""); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryParent(ref m_twidentitylegacyApp, IntPtr.Zero, a_dg, DAT.PARENT, a_msg, ref a_intptrHwnd); } else { sts = (STS)WindowsTwaindsmDsmEntryParent(ref m_twidentitylegacyApp, IntPtr.Zero, a_dg, DAT.PARENT, a_msg, ref a_intptrHwnd); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryParent(ref m_twidentitylegacyApp, IntPtr.Zero, a_dg, DAT.PARENT, a_msg, ref a_intptrHwnd); } else { sts = (STS)Linux64DsmEntryParent(ref m_twidentityApp, IntPtr.Zero, a_dg, DAT.PARENT, a_msg, ref a_intptrHwnd); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryParent(ref m_twidentitymacosxApp, IntPtr.Zero, a_dg, DAT.PARENT, a_msg, ref a_intptrHwnd); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ""); } // If we opened, go to state 3, and start tracking // TWAIN's state in the log file... if (a_msg == MSG.OPENDSM) { if (sts == STS.SUCCESS) { m_state = STATE.S3; Log.RegisterTwain(this); } } // If we closed, go to state 2, and stop tracking // TWAIN's state in the log file... else if (a_msg == MSG.CLOSEDSM) { if (sts == STS.SUCCESS) { m_state = STATE.S2; Log.RegisterTwain(null); } } // All done... return (AutoDatStatus(sts)); }
public STS DatImagememxfer(DG a_dg, MSG a_msg, ref TW_IMAGEMEMXFER a_twimagememxfer) { STS sts; // Submit the work to the TWAIN thread... if (this.m_runinuithreaddelegate == null) { if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twimagememxfer = a_twimagememxfer; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGEMEMXFER; m_lIndexDatImagememxfer = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twimagememxfer = m_twaincommand.Get(m_lIndexDatImagememxfer).twimagememxfer; sts = m_twaincommand.Get(m_lIndexDatImagememxfer).sts; // Clear the command variables... m_twaincommand.Delete(m_lIndexDatImagememxfer); } return (sts); } } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.IMAGEMEMXFER.ToString(), a_msg.ToString(), ImagememferToCsv(a_twimagememxfer)); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (this.m_runinuithreaddelegate == null) { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryImagememxfer(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEMEMXFER, a_msg, ref a_twimagememxfer); } else { sts = (STS)WindowsTwaindsmDsmEntryImagememxfer(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEMEMXFER, a_msg, ref a_twimagememxfer); } } else { if (m_blUseLegacyDSM) { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); threaddata.twimagememxfer = a_twimagememxfer; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGEMEMXFER; m_lIndexDatImagememxfer = m_twaincommand.Submit(threaddata); RunInUiThread(DatImagememxferWindowsTwain32); a_twimagememxfer = m_twaincommand.Get(m_lIndexDatImagememxfer).twimagememxfer; sts = m_twaincommand.Get(m_lIndexDatImagememxfer).sts; m_twaincommand.Delete(m_lIndexDatImagememxfer); } } else { lock (m_lockTwain) { ThreadData threaddata = default(ThreadData); threaddata.twimagememxfer = a_twimagememxfer; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGEMEMXFER; m_lIndexDatImagememxfer = m_twaincommand.Submit(threaddata); RunInUiThread(DatImagememxferWindowsTwainDsm); a_twimagememxfer = m_twaincommand.Get(m_lIndexDatImagememxfer).twimagememxfer; sts = m_twaincommand.Get(m_lIndexDatImagememxfer).sts; m_twaincommand.Delete(m_lIndexDatImagememxfer); } } } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (TWAIN.GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryImagememxfer(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEMEMXFER, a_msg, ref a_twimagememxfer); } else { TW_IMAGEMEMXFER_LINUX64 twimagememxferlinux64 = default(TW_IMAGEMEMXFER_LINUX64); twimagememxferlinux64.BytesPerRow = a_twimagememxfer.BytesPerRow; twimagememxferlinux64.BytesWritten = a_twimagememxfer.BytesWritten; twimagememxferlinux64.Columns = a_twimagememxfer.Columns; twimagememxferlinux64.Compression = a_twimagememxfer.Compression; twimagememxferlinux64.MemoryFlags = a_twimagememxfer.Memory.Flags; twimagememxferlinux64.MemoryLength = a_twimagememxfer.Memory.Length; twimagememxferlinux64.MemoryTheMem = a_twimagememxfer.Memory.TheMem; twimagememxferlinux64.Rows = a_twimagememxfer.Rows; twimagememxferlinux64.XOffset = a_twimagememxfer.XOffset; twimagememxferlinux64.YOffset = a_twimagememxfer.YOffset; sts = (STS)Linux64DsmEntryImagememxfer(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.IMAGEMEMXFER, a_msg, ref twimagememxferlinux64); a_twimagememxfer.BytesPerRow = (uint)twimagememxferlinux64.BytesPerRow; a_twimagememxfer.BytesWritten = (uint)twimagememxferlinux64.BytesWritten; a_twimagememxfer.Columns = (uint)twimagememxferlinux64.Columns; a_twimagememxfer.Compression = (ushort)twimagememxferlinux64.Compression; a_twimagememxfer.Memory.Flags = (uint)twimagememxferlinux64.MemoryFlags; a_twimagememxfer.Memory.Length = (uint)twimagememxferlinux64.MemoryLength; a_twimagememxfer.Memory.TheMem = twimagememxferlinux64.MemoryTheMem; a_twimagememxfer.Rows = (uint)twimagememxferlinux64.Rows; a_twimagememxfer.XOffset = (uint)twimagememxferlinux64.XOffset; a_twimagememxfer.YOffset = (uint)twimagememxferlinux64.YOffset; } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { TW_IMAGEMEMXFER_MACOSX twimagememxfermacosx = default(TW_IMAGEMEMXFER_MACOSX); twimagememxfermacosx.BytesPerRow = a_twimagememxfer.BytesPerRow; twimagememxfermacosx.BytesWritten = a_twimagememxfer.BytesWritten; twimagememxfermacosx.Columns = a_twimagememxfer.Columns; twimagememxfermacosx.Compression = a_twimagememxfer.Compression; twimagememxfermacosx.Memory.Flags = a_twimagememxfer.Memory.Flags; twimagememxfermacosx.Memory.Length = a_twimagememxfer.Memory.Length; twimagememxfermacosx.Memory.TheMem = a_twimagememxfer.Memory.TheMem; twimagememxfermacosx.Rows = a_twimagememxfer.Rows; twimagememxfermacosx.XOffset = a_twimagememxfer.XOffset; twimagememxfermacosx.YOffset = a_twimagememxfer.YOffset; sts = (STS)MacosxDsmEntryImagememxfer(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.IMAGEMEMXFER, a_msg, ref twimagememxfermacosx); a_twimagememxfer.BytesPerRow = twimagememxfermacosx.BytesPerRow; a_twimagememxfer.BytesWritten = twimagememxfermacosx.BytesWritten; a_twimagememxfer.Columns = twimagememxfermacosx.Columns; a_twimagememxfer.Compression = (ushort)twimagememxfermacosx.Compression; a_twimagememxfer.Memory.Flags = twimagememxfermacosx.Memory.Flags; a_twimagememxfer.Memory.Length = twimagememxfermacosx.Memory.Length; a_twimagememxfer.Memory.TheMem = twimagememxfermacosx.Memory.TheMem; a_twimagememxfer.Rows = twimagememxfermacosx.Rows; a_twimagememxfer.XOffset = twimagememxfermacosx.XOffset; a_twimagememxfer.YOffset = twimagememxfermacosx.YOffset; } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ImagememferToCsv(a_twimagememxfer)); } // If we had a successful transfer, then change state... if (sts == STS.XFERDONE) { m_state = STATE.S7; } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Get/Set image info information... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twimageinfo">IMAGEINFO structure</param> /// <returns>TWAIN status</returns> public STS DatImageinfo(DG a_dg, MSG a_msg, ref TW_IMAGEINFO a_twimageinfo) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twimageinfo = a_twimageinfo; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IMAGEINFO; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twimageinfo = m_twaincommand.Get(lIndex).twimageinfo; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.IMAGEINFO.ToString(), a_msg.ToString(), ""); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryImageinfo(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } else { sts = (STS)WindowsTwaindsmDsmEntryImageinfo(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (TWAIN.GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryImageinfo(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } else { TW_IMAGEINFO_LINUX64 twimageinfolinux64 = default(TW_IMAGEINFO_LINUX64); sts = (STS)Linux64DsmEntryImageinfo(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.IMAGEINFO, a_msg, ref twimageinfolinux64); a_twimageinfo.XResolution = twimageinfolinux64.XResolution; a_twimageinfo.YResolution = twimageinfolinux64.YResolution; a_twimageinfo.ImageWidth = (int)twimageinfolinux64.ImageWidth; a_twimageinfo.ImageLength = (int)twimageinfolinux64.ImageLength; a_twimageinfo.SamplesPerPixel = twimageinfolinux64.SamplesPerPixel; a_twimageinfo.BitsPerSample_0 = twimageinfolinux64.BitsPerSample_0; a_twimageinfo.BitsPerSample_1 = twimageinfolinux64.BitsPerSample_1; a_twimageinfo.BitsPerSample_2 = twimageinfolinux64.BitsPerSample_2; a_twimageinfo.BitsPerSample_3 = twimageinfolinux64.BitsPerSample_3; a_twimageinfo.BitsPerSample_4 = twimageinfolinux64.BitsPerSample_4; a_twimageinfo.BitsPerSample_5 = twimageinfolinux64.BitsPerSample_5; a_twimageinfo.BitsPerSample_6 = twimageinfolinux64.BitsPerSample_6; a_twimageinfo.BitsPerSample_7 = twimageinfolinux64.BitsPerSample_7; a_twimageinfo.BitsPerPixel = twimageinfolinux64.BitsPerPixel; a_twimageinfo.Planar = twimageinfolinux64.Planar; a_twimageinfo.PixelType = twimageinfolinux64.PixelType; a_twimageinfo.Compression = twimageinfolinux64.Compression; } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryImageinfo(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.IMAGEINFO, a_msg, ref a_twimageinfo); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ImageinfoToCsv(a_twimageinfo)); } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Issue identity commands... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twidentity">IDENTITY structure</param> /// <returns>TWAIN status</returns> public STS DatIdentity(DG a_dg, MSG a_msg, ref TW_IDENTITY a_twidentity) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twidentity = a_twidentity; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.IDENTITY; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twidentity = m_twaincommand.Get(lIndex).twidentity; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.IDENTITY.ToString(), a_msg.ToString(), ((a_msg == MSG.OPENDS) ? IdentityToCsv(a_twidentity) : "")); } // Windows... if (ms_platform == Platform.WINDOWS) { TW_IDENTITY_LEGACY twidentitylegacy = TwidentityToTwidentitylegacy(a_twidentity); // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryIdentity(ref m_twidentitylegacyApp, IntPtr.Zero, a_dg, DAT.IDENTITY, a_msg, ref twidentitylegacy); } else { sts = (STS)WindowsTwaindsmDsmEntryIdentity(ref m_twidentitylegacyApp, IntPtr.Zero, a_dg, DAT.IDENTITY, a_msg, ref twidentitylegacy); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } a_twidentity = TwidentitylegacyToTwidentity(twidentitylegacy); } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { TW_IDENTITY_LEGACY twidentitylegacy = TwidentityToTwidentitylegacy(a_twidentity); sts = (STS)LinuxDsmEntryIdentity(ref m_twidentitylegacyApp, IntPtr.Zero, a_dg, DAT.IDENTITY, a_msg, ref twidentitylegacy); a_twidentity = TwidentitylegacyToTwidentity(twidentitylegacy); } else { sts = (STS)Linux64DsmEntryIdentity(ref m_twidentityApp, IntPtr.Zero, a_dg, DAT.IDENTITY, a_msg, ref a_twidentity); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { TW_IDENTITY_MACOSX twidentitymacosx = TwidentityToTwidentitymacosx(a_twidentity); // Issue the command... try { sts = (STS)MacosxDsmEntryIdentity(ref m_twidentitymacosxApp, IntPtr.Zero, a_dg, DAT.IDENTITY, a_msg, ref twidentitymacosx); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } a_twidentity = TwidentitymacosxToTwidentity(twidentitymacosx); } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), IdentityToCsv(a_twidentity)); } // If we opened, go to state 4... if (a_msg == MSG.OPENDS) { if (sts == STS.SUCCESS) { // Change our state, and record the identity we picked... m_state = STATE.S4; m_twidentityDs = a_twidentity; m_twidentitylegacyDs = TwidentityToTwidentitylegacy(m_twidentityDs); m_twidentitymacosxDs = TwidentityToTwidentitymacosx(m_twidentityDs); // Register for callbacks... // Windows... if (ms_platform == Platform.WINDOWS) { if (m_blUseCallbacks) { TW_CALLBACK twcallback = new TW_CALLBACK(); twcallback.CallBackProc = Marshal.GetFunctionPointerForDelegate(m_windowsdsmentrycontrolcallbackdelegate); // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.CALLBACK.ToString(), a_msg.ToString(), CallbackToCsv(twcallback)); } // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryCallback(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, DG.CONTROL, DAT.CALLBACK, MSG.REGISTER_CALLBACK, ref twcallback); } else { sts = (STS)WindowsTwaindsmDsmEntryCallback(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, DG.CONTROL, DAT.CALLBACK, MSG.REGISTER_CALLBACK, ref twcallback); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ""); } } } // Linux... else if (ms_platform == Platform.LINUX) { TW_CALLBACK twcallback = new TW_CALLBACK(); twcallback.CallBackProc = Marshal.GetFunctionPointerForDelegate(m_linuxdsmentrycontrolcallbackdelegate); // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.CALLBACK.ToString(), MSG.REGISTER_CALLBACK.ToString(), CallbackToCsv(twcallback)); } // Issue the command... try { if (TWAIN.GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryCallback(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, DG.CONTROL, DAT.CALLBACK, MSG.REGISTER_CALLBACK, ref twcallback); } else { sts = (STS)Linux64DsmEntryCallback(ref m_twidentityApp, ref m_twidentityDs, DG.CONTROL, DAT.CALLBACK, MSG.REGISTER_CALLBACK, ref twcallback); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ""); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { IntPtr intptr = IntPtr.Zero; TW_CALLBACK twcallback = new TW_CALLBACK(); twcallback.CallBackProc = Marshal.GetFunctionPointerForDelegate(m_macosxdsmentrycontrolcallbackdelegate); // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.CALLBACK.ToString(), a_msg.ToString(), CallbackToCsv(twcallback)); } // Issue the command... try { sts = (STS)MacosxDsmEntryCallback(ref m_twidentitymacosxApp, intptr, DG.CONTROL, DAT.CALLBACK, MSG.REGISTER_CALLBACK, ref twcallback); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), ""); } } } } // If we closed, go to state 3... else if (a_msg == MSG.CLOSEDS) { if (sts == STS.SUCCESS) { m_state = STATE.S3; } } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Issue event commands... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twevent">EVENT structure</param> /// <returns>TWAIN status</returns> public STS DatEvent(DG a_dg, MSG a_msg, ref TW_EVENT a_twevent) { STS sts; // Log it... if (Log.GetLevel() > 1) { Log.LogSendBefore(a_dg.ToString(), DAT.EVENT.ToString(), a_msg.ToString(), ""); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryEvent(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.EVENT, a_msg, ref a_twevent); } else { sts = (STS)WindowsTwaindsmDsmEntryEvent(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.EVENT, a_msg, ref a_twevent); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryEvent(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.EVENT, a_msg, ref a_twevent); } else { sts = (STS)Linux64DsmEntryEvent(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.EVENT, a_msg, ref a_twevent); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryEvent(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.EVENT, a_msg, ref a_twevent); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // Log it... if (Log.GetLevel() > 1) { Log.LogSendAfter(sts.ToString(), ""); } // Check the event for anything interesting... if ((sts == STS.DSEVENT) || (sts == STS.NOTDSEVENT)) { ProcessEvent((MSG)a_twevent.TWMessage); } // All done... return (AutoDatStatus(sts)); }
/// <summary> /// Get the entrypoint data... /// </summary> /// <param name="a_dg">Data group</param> /// <param name="a_msg">Operation</param> /// <param name="a_twentrypoint">ENTRYPOINT structure</param> /// <returns>TWAIN status</returns> public STS DatEntrypoint(DG a_dg, MSG a_msg, ref TW_ENTRYPOINT a_twentrypoint) { STS sts; // Submit the work to the TWAIN thread... if ((m_threadTwain != null) && (m_threadTwain.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)) { lock (m_lockTwain) { // Set our command variables... ThreadData threaddata = default(ThreadData); threaddata.twentrypoint = a_twentrypoint; threaddata.dg = a_dg; threaddata.msg = a_msg; threaddata.dat = DAT.ENTRYPOINT; long lIndex = m_twaincommand.Submit(threaddata); // Submit the command and wait for the reply... CallerToThreadSet(); ThreadToCallerWaitOne(); // Return the result... a_twentrypoint = m_twaincommand.Get(lIndex).twentrypoint; sts = m_twaincommand.Get(lIndex).sts; // Clear the command variables... m_twaincommand.Delete(lIndex); } return (sts); } // Log it... if (Log.GetLevel() > 0) { Log.LogSendBefore(a_dg.ToString(), DAT.ENTRYPOINT.ToString(), a_msg.ToString(), EntrypointToCsv(a_twentrypoint)); } // Windows... if (ms_platform == Platform.WINDOWS) { // Issue the command... try { if (m_blUseLegacyDSM) { sts = (STS)WindowsTwain32DsmEntryEntrypoint(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.ENTRYPOINT, a_msg, ref a_twentrypoint); } else { sts = (STS)WindowsTwaindsmDsmEntryEntrypoint(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.ENTRYPOINT, a_msg, ref a_twentrypoint); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Linux... else if (ms_platform == Platform.LINUX) { // Issue the command... try { if (GetMachineWordBitSize() == 32) { sts = (STS)LinuxDsmEntryEntrypoint(ref m_twidentitylegacyApp, ref m_twidentitylegacyDs, a_dg, DAT.ENTRYPOINT, a_msg, ref a_twentrypoint); } else { sts = (STS)Linux64DsmEntryEntrypoint(ref m_twidentityApp, ref m_twidentityDs, a_dg, DAT.ENTRYPOINT, a_msg, ref a_twentrypoint); } } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Mac OS X, which has to be different... else if (ms_platform == Platform.MACOSX) { // Issue the command... try { sts = (STS)MacosxDsmEntryEntrypoint(ref m_twidentitymacosxApp, ref m_twidentitymacosxDs, a_dg, DAT.ENTRYPOINT, a_msg, ref a_twentrypoint); } catch { // The driver crashed... Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } } // Uh-oh... else { Log.LogSendAfter(STS.BUMMER.ToString(), ""); return (STS.BUMMER); } // If we were successful, then squirrel away the data... if (sts == TWAIN.STS.SUCCESS) { m_twentrypointdelegates = default(TWAIN.TW_ENTRYPOINT_DELEGATES); m_twentrypointdelegates.Size = a_twentrypoint.Size; m_twentrypointdelegates.DSM_Entry = a_twentrypoint.DSM_Entry; if (a_twentrypoint.DSM_MemAllocate != null) { m_twentrypointdelegates.DSM_MemAllocate = (TWAIN.DSM_MEMALLOC)Marshal.GetDelegateForFunctionPointer(a_twentrypoint.DSM_MemAllocate,typeof(TWAIN.DSM_MEMALLOC)); } if (a_twentrypoint.DSM_MemFree != null) { m_twentrypointdelegates.DSM_MemFree = (TWAIN.DSM_MEMFREE)Marshal.GetDelegateForFunctionPointer(a_twentrypoint.DSM_MemFree, typeof(TWAIN.DSM_MEMFREE)); } if (a_twentrypoint.DSM_MemLock != null) { m_twentrypointdelegates.DSM_MemLock = (TWAIN.DSM_MEMLOCK)Marshal.GetDelegateForFunctionPointer(a_twentrypoint.DSM_MemLock, typeof(TWAIN.DSM_MEMLOCK)); } if (a_twentrypoint.DSM_MemUnlock != null) { m_twentrypointdelegates.DSM_MemUnlock = (TWAIN.DSM_MEMUNLOCK)Marshal.GetDelegateForFunctionPointer(a_twentrypoint.DSM_MemUnlock, typeof(TWAIN.DSM_MEMUNLOCK)); } } // Log it... if (Log.GetLevel() > 0) { Log.LogSendAfter(sts.ToString(), EntrypointToCsv(a_twentrypoint)); } // All done... return (AutoDatStatus(sts)); }