package com.photoshare.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.concurrent.Executor;
import com.photoshare.common.MsgListener;
@Deprecated
public class UdpComponent {
public DatagramSocket recSkt = null;
private int port = 1000;
private Boolean Running = false;
private MsgListener msgListener;
public UdpComponent(MsgListener mg) {
// msgListener = (MsgListener)proxy.getProxyer(new OnMsgListener());
msgListener = mg;
}
public void doStart() {
if (!Running) {
try {
UdpService.DoFreeSocket(recSkt);
InetAddress address = InetAddress.getLocalHost();
recSkt = new DatagramSocket(port, address);
Running = true;
RecThread thread = new RecThread();
thread.setMsgListener(msgListener);
thread.setDaemon(true);
thread.setRecSkt(recSkt);
thread.setRunning(Running);
thread.setUdpComm(this);
thread.start();
} catch (Exception e) {
}
}
doStop();
}
public void doStop() {
if (Running) {
Running = false;
UdpService.DoFreeSocket(recSkt);
}
}
public boolean DoSendMsg(Object sender, String ToIp, int ToPort, TMsg Msg,
int TimeOut) {
boolean Rec = false;
try {
DatagramSocket skt = new DatagramSocket();
skt.setSoTimeout(TimeOut);
InetSocketAddress Address = new InetSocketAddress(ToIp, ToPort);
byte[] bytes = Msg.getBytes();
try {
DatagramPacket p = new DatagramPacket(bytes, bytes.length,
Address.getAddress(), Address.getPort());
skt.send(p);
Rec = true;
msgListener.OnSendMsg(this, ToIp, ToPort, Msg, TimeOut, Rec);
} catch (SocketTimeoutException ste) {
UdpService.DoFreeSocket(skt);
} catch (IOException e) {
}
UdpService.DoFreeSocket(skt);
msgListener.OnSendMsg(sender, ToIp, ToPort, Msg, TimeOut, true);
} catch (SocketException e) {
}
return Rec;
}
public void AsncSendMsg(Executor pool, final String ToIp, final int ToPort,
final TMsg Msg, final int TimeOut) {
AsnycSendRunnable runnable = new AsnycSendRunnable();
runnable.setMsg(Msg);
runnable.setMsgListener(msgListener);
runnable.setTimeOut(TimeOut);
runnable.setToIp(ToIp);
runnable.setToPort(ToPort);
pool.execute(runnable);
}
}
class RecThread extends Thread {
private UdpComponent udpComm = null;
private boolean Running;
private DatagramSocket recSkt = null;
private MsgListener msgListener;
public UdpComponent getUdpComm() {
return udpComm;
}
public void setUdpComm(UdpComponent udpComm) {
this.udpComm = udpComm;
}
public boolean isRunning() {
return Running;
}
public void setRunning(boolean running) {
Running = running;
}
public DatagramSocket getRecSkt() {
return recSkt;
}
public void setRecSkt(DatagramSocket recSkt) {
this.recSkt = recSkt;
}
public MsgListener getMsgListener() {
return msgListener;
}
public void setMsgListener(MsgListener msgListener) {
this.msgListener = msgListener;
}
@Override
public void run() {
// TODO Auto-generated method stub
byte[] buffer = new byte[1024];
while (Running) {
DatagramPacket p = new DatagramPacket(buffer, buffer.length);
try {
recSkt.receive(p);
TMsg AMsg = TMsg.getMsg(buffer);
if (AMsg != null) {
msgListener.OnReceiveMsg(this, p.getAddress()
.getHostAddress(), p.getPort(), AMsg);
}
} catch (IOException e) {
}
}
}
}
class AsnycSendRunnable implements Runnable {
private int TimeOut;
private String ToIp;
private int ToPort;
private TMsg Msg;
private MsgListener msgListener;
public int getTimeOut() {
return TimeOut;
}
public void setTimeOut(int timeOut) {
TimeOut = timeOut;
}
public String getToIp() {
return ToIp;
}
public void setToIp(String toIp) {
ToIp = toIp;
}
public int getToPort() {
return ToPort;
}
public void setToPort(int toPort) {
ToPort = toPort;
}
public TMsg getMsg() {
return Msg;
}
public void setMsg(TMsg msg) {
Msg = msg;
}
public MsgListener getMsgListener() {
return msgListener;
}
public void setMsgListener(MsgListener msgListener) {
this.msgListener = msgListener;
}
public void run() {
// TODO Auto-generated method stub
boolean recFlag = false;
try {
DatagramSocket skt = new DatagramSocket();
skt.setSoTimeout(TimeOut);
InetSocketAddress Address = new InetSocketAddress(ToIp, ToPort);
byte[] bytes = Msg.getBytes();
try {
DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
Address.getAddress(), Address.getPort());
skt.send(packet);
recFlag = true;
} catch (SocketTimeoutException ste) {
} catch (IOException e) {
} finally {
msgListener
.OnSendMsg(this, ToIp, ToPort, Msg, TimeOut, recFlag);
}
UdpService.DoFreeSocket(skt);
} catch (SocketException e) {
}
}
}