📄 smsimpl.java
字号:
package dk.daimi.jones.impl.sms;
import org.jsmsengine.*;
import java.util.Vector;
import dk.daimi.jones.services.sms.*;
public class SMSImpl implements SMS {
private class sendThread extends Thread {
SMSMessage message = null;
public sendThread(SMSMessage msg) {
message = msg;
}
public void run() {
if (smsService != null) {
synchronized(smsService) {
SMSMessage outgoing = message;
if (message != null) {
if (message.getMessage().getType() == CMessage.TYPE_INCOMING) {
outgoing = new SMSMessage(message.getAddress(), message.getData());
}
if (smsService.sendMessage((COutgoingMessage)outgoing.getMessage()) == CService.ERR_OK) {
System.out.println("[>] " + outgoing.getAddress() + " \"" + outgoing.getData() + "\"");
} else {
System.out.println("[F] " + outgoing.getAddress() + " \"" + outgoing.getData() + "\"");
}
}
senders--;
}
}
}
};
private Vector listeners = null;
private CSMSService smsService = null;
private CDeviceInfo deviceInfo = null;
private boolean closing = false;
private int senders = 0;
public SMSImpl() {
listeners = new Vector();
senders = 0;
}
public boolean open(String serialport, String pin) {
int status = CService.ERR_GENERIC_ERROR;
smsService= new CSMSService(serialport, 9600, this);
try {
synchronized(smsService) {
// Initialize service.
smsService.initialize();
// Set PIN code for the SIM card
smsService.setSimPin(pin);
// Connect to GSM device.
status = smsService.connect();
// Did we connect ok?
if (status == CService.ERR_OK) {
// Set the operation mode to PDU
smsService.setOperationMode(CService.MODE_PDU);
// Set the SMSC number (set to default).
smsService.setSmscNumber("");
} else {
System.out.println("Connection to mobile failed: " + CService.getErrorMsg(status));
smsService = null;
return false;
}
deviceInfo = smsService.getDeviceInfo();
return true;
}
} catch (Exception e) {
System.out.println("[SMSImpl][open]: " + e.getMessage());
smsService = null;
}
return false;
}
public void close() {
if (smsService != null) {
synchronized(smsService) {
closing = true;
}
// wait for current senders to complete
boolean waiting = true;
while (waiting) {
synchronized(smsService) {
if (senders <= 0) { // Should never be less than zero
waiting = false;
}
}
try { Thread.sleep(100); } catch (Exception e) {}
}
synchronized(smsService) {
smsService.disconnect();
}
smsService = null;
closing = false;
}
}
public void send(SMSMessage smsmessage) throws SMSException {
synchronized(smsService) {
if (closing) {
return;
} else {
senders++;
}
}
sendThread t = new sendThread(smsmessage);
t.start();
}
public void addNMIListener(NMIListener nmilistener) {
synchronized(listeners) {
boolean isFirst = listeners.isEmpty();
if(nmilistener != null && listeners.indexOf(nmilistener) == -1) {
listeners.addElement(nmilistener);
System.out.println("[+] " + nmilistener);
}
if (isFirst && !listeners.isEmpty()) {
enableReception();
}
}
}
public void removeNMIListener(NMIListener nmilistener) {
synchronized(listeners) {
boolean wasEmpty = listeners.isEmpty();
if(listeners.contains(nmilistener)) {
listeners.removeElement(nmilistener);
System.out.println("[-] " + nmilistener);
}
if (!wasEmpty && listeners.isEmpty()) {
disableReception();
}
}
}
public void notifyNMIListeners(SMSMessage smsmessage) {
if(smsmessage == null)
return;
synchronized(listeners) {
for(int i = 0; i < listeners.size(); i++) {
SMSMessage smsmessage1 = new SMSMessage(smsmessage.getMessageType(), smsmessage.getAddress(), smsmessage.getData());
smsmessage1.setBinary(smsmessage.isBinary());
smsmessage1.setHeader(smsmessage.getHeader());
((NMIListener)listeners.elementAt(i)).messageReceived(smsmessage1);
}
}
}
public String getManufacturer() {
if (deviceInfo != null)
return deviceInfo.getManufacturer();
return "";
}
public String getModel() {
if (deviceInfo != null)
return deviceInfo.getModel();
return "";
}
public String getIMEI() {
if (deviceInfo != null)
return deviceInfo.getSerialNo();
return "";
}
private void enableReception() {
if (smsService != null) {
if (smsService.getConnected()) {
// Set receive mode to asynchronous, so we get incoming messages immediately
smsService.setReceiveMode(CService.RECEIVE_MODE_ASYNC);
}
}
}
private void disableReception() {
if (smsService != null) {
if (smsService.getConnected()) {
// Set receive mode to asynchronous, so we get incoming messages immediately
smsService.setReceiveMode(CService.RECEIVE_MODE_SYNC);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -