diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/Block.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/Block.java index fed3cf6c5c88dbbe24c516cf2e27caa4e2edbe65..e812a1c67934c0bfe770f15ef77245011c978c22 100755 --- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/Block.java +++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/Block.java @@ -83,11 +83,14 @@ public final class Block { return false; } + public void sent() { + dirtyBlock.set(false); + } + public EncodedBlockData encode() { int[] pixelsCopy = new int[capturedPixels.length]; - synchronized (pixelsLock) { - dirtyBlock.set(false); + synchronized (pixelsLock) { System.arraycopy(capturedPixels, 0, pixelsCopy, 0, capturedPixels.length); } diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java index 110855874370644ac17e4fb0a42891e45e26ae69..9d8b8ba462e7c6b6de135ae04c5cddf78e83f347 100755 --- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java +++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/blocks/BlockManager.java @@ -68,7 +68,7 @@ public class BlockManager { long end = System.currentTimeMillis(); // System.out.println("ProcessCapturedScreen took " + (end-start) + " ms."); } - + private void notifyChangedBlockListener(BlockMessage position) { listeners.onChangedBlock(position); } @@ -82,6 +82,11 @@ public class BlockManager { listeners = null; } + public void blockSent(int position) { + Block block = (Block) blocksMap.get(new Integer(position)); + block.sent(); + } + public Block getBlock(int position) { return (Block) blocksMap.get(new Integer(position)); } diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkHttpStreamSender.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkHttpStreamSender.java index f675ead5fd2968a483e9cbf8031cb9de1da978f6..0f2c31c90a9e6b2909b1d7ff70931ba2caf8b984 100755 --- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkHttpStreamSender.java +++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkHttpStreamSender.java @@ -169,6 +169,7 @@ public class NetworkHttpStreamSender implements Runnable { EncodedBlockData block = retriever.getBlockToSend(((BlockMessage)message).getPosition()); BlockVideoData bv = new BlockVideoData(room, block.getPosition(), block.getVideoData(), false /* should remove later */); sendBlockData(bv); + retriever.blockSent(block.getPosition()); } else if (message.getMessageType() == Message.MessageType.CURSOR) { CursorMessage msg = (CursorMessage)message; sendCursor(msg.getMouseLocation(), msg.getRoom()); diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java index 3c7dee5e84fec82e65e0e2a034965f94b1426140..1ef8482bf275bda20c7e983a207b16ca6f6ff937 100755 --- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java +++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkSocketStreamSender.java @@ -134,6 +134,7 @@ public class NetworkSocketStreamSender implements Runnable { EncodedBlockData block = retriever.getBlockToSend(((BlockMessage)message).getPosition()); BlockVideoData bv = new BlockVideoData(room, block.getPosition(), block.getVideoData(), false /* should remove later */); sendBlock(bv); + retriever.blockSent(block.getPosition()); } else if (message.getMessageType() == Message.MessageType.CURSOR) { CursorMessage msg = (CursorMessage)message; sendCursor(msg.getMouseLocation(), msg.getRoom()); diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkStreamSender.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkStreamSender.java index 6186185f06a5d7beb32b34cb314be3e17aa141a2..70a7fc1061f6df0e69beeb1d7a5081bee263f5a4 100755 --- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkStreamSender.java +++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NetworkStreamSender.java @@ -192,6 +192,10 @@ public class NetworkStreamSender implements NextBlockRetriever, NetworkStreamLis return false; } + public void blockSent(int position) { + blockManager.blockSent(position); + } + public EncodedBlockData getBlockToSend(int position) { return blockManager.getBlock(position).encode(); } diff --git a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NextBlockRetriever.java b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NextBlockRetriever.java index 6fad08b9d80a30886b0da392e8be384023031d76..88adaf5febe200d7a7d065d1428b0660cc7943b7 100755 --- a/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NextBlockRetriever.java +++ b/deskshare/applet/src/main/java/org/bigbluebutton/deskshare/client/net/NextBlockRetriever.java @@ -20,6 +20,7 @@ package org.bigbluebutton.deskshare.client.net; public interface NextBlockRetriever { + public void blockSent(int position); public EncodedBlockData getBlockToSend(int position); public Message getNextMessageToSend() throws InterruptedException; }