It's my first time using threads in java and I came across with weird problem.
public class ServerSender implements Runnable {
DatagramSocket udpSocket;
DatagramPacket sendPacket;
long currentTime = 0;
long elapsed = 0;
public ServerSender(DatagramSocket udpSocket) {
this.udpSocket = udpSocket;
System.out.println("Sender live!");
}
public void sendToClient(byte[] bytes) throws IOException {
sendPacket = new DatagramPacket(bytes, bytes.length, Server.clientIp, Server.clientPort);
udpSocket.send(sendPacket);
}
@Override
public void run() {
while(true)
{
if(Server.isGameLive)
{
currentTime = System.nanoTime();
if(elapsed / 1000000 >= 100) // send snapshot every 100ms
{
synchronized(Server.snapshot)
{
try
{
sendToClient(Server.snapshot.toByteArray());
}
catch (IOException e)
{
e.printStackTrace();
}
}
elapsed = 0;
System.out.println("Sending snapshot to client...");
} else {
System.out.println("not elapsed");
}
elapsed += System.nanoTime() - currentTime;
System.out.println(elapsed / 1000000);
} else {
System.out.println("not live");
}
}
}
}
This code works how it should but when I remove else statements from run method it's not working...
@Override
public void run() {
while(true)
{
if(Server.isGameLive)
{
currentTime = System.nanoTime();
if(elapsed / 1000000 >= 100) // send snapshot every 100ms
{
synchronized(Server.snapshot)
{
try
{
sendToClient(Server.snapshot.toByteArray());
}
catch (IOException e)
{
e.printStackTrace();
}
}
elapsed = 0;
System.out.println("Sending snapshot to client...");
}
elapsed += System.nanoTime() - currentTime;
System.out.println(elapsed / 1000000);
}
}
}
Can someone explain what's wrong there?