[Libreoffice-commits] .: Branch 'feature/remote' - android/sdremote sd/Library_sd.mk sd/source
Andrzej J.R. Hunt
ajrhunt at kemper.freedesktop.org
Thu Jul 12 14:16:54 PDT 2012
android/sdremote/src/org/libreoffice/impressremote/TestClient.java | 10 -
android/sdremote/src/org/libreoffice/impressremote/communication/Client.java | 9
android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java | 3
android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java | 3
android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java | 34 ---
sd/Library_sd.mk | 9
sd/source/ui/remotecontrol/Listener.cxx | 70 +++----
sd/source/ui/remotecontrol/Receiver.cxx | 93 +++-------
sd/source/ui/remotecontrol/Receiver.hxx | 9
sd/source/ui/remotecontrol/Server.cxx | 69 +++----
10 files changed, 116 insertions(+), 193 deletions(-)
New commits:
commit c6173817835643550d4f6ddc8105c30a8e584773
Author: Andrzej J. R. Hunt <andrzej at ahunt.org>
Date: Thu Jul 12 22:10:33 2012 +0100
Pure text for Client->Server. Json removed. Namespace cleanup.
Change-Id: I60e5acac2d47aefec5dd195a5eca599eb1cb8586
diff --git a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
index ff25d0f..83f4c71 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
@@ -1,5 +1,8 @@
package org.libreoffice.impressremote;
+import java.util.ArrayList;
+import java.util.HashMap;
+
import org.libreoffice.impressremote.communication.CommunicationService;
import android.app.Activity;
import android.content.ComponentName;
@@ -21,6 +24,8 @@ import android.widget.TextView;
public class TestClient extends Activity {
+ HashMap<Integer, Bitmap> aPreviewImages = new HashMap<Integer, Bitmap>();
+
private boolean mIsBound = false;
private CommunicationService mCommunicationService;
@@ -139,12 +144,13 @@ public class TestClient extends Activity {
// TODO: set slide;
break;
case CommunicationService.MSG_SLIDE_PREVIEW:
- int slideNumber = aData.getInt("slide_number");
+ int aSlideNumber = aData.getInt("slide_number");
byte[] aPreviewImage = aData.getByteArray("preview_image");
Bitmap aBitmap = BitmapFactory.decodeByteArray(aPreviewImage,
0, aPreviewImage.length);
+ aPreviewImages.put(aSlideNumber, aBitmap);
mImageView.setImageBitmap(aBitmap);
- // TODO: update
+ // TODO: remove above line, use slide changed to show image.
break;
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
index 47321e5..d4c1c4e 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
@@ -49,7 +49,6 @@ public abstract class Client {
private void listen() {
BufferedReader aReader;
try {
- System.out.println("deb:Listening");
aReader = new BufferedReader(new InputStreamReader(mInputStream,
CHARSET));
while (true) {
@@ -57,10 +56,8 @@ public abstract class Client {
String aTemp;
// read until empty line
while ((aTemp = aReader.readLine()).length() != 0) {
- System.out.println("deb__:" + aTemp);
aList.add(aTemp);
}
- System.out.println("deb:parsing");
mReceiver.parseCommand(aList);
}
} catch (UnsupportedEncodingException e) {
@@ -80,13 +77,7 @@ public abstract class Client {
* Must be a valid JSON string.
*/
public void sendCommand(String command) {
- String aLengthString = Integer.toString(command.length());
- byte[] aLengthBytes;
try {
- aLengthBytes = aLengthString.getBytes(CHARSET);
-
- mOutputStream.write(aLengthBytes);
- mOutputStream.write(0x0d);
mOutputStream.write(command.getBytes(CHARSET));
} catch (UnsupportedEncodingException e) {
throw new Error("Specified network encoding [" + CHARSET
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java b/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
index 3a2b4bf..d8bd86d 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
@@ -18,13 +18,12 @@ public class NetworkClient extends Client {
private Socket mSocket;
public NetworkClient(String ipAddress) {
+ // FIXME: eventually networking will be fully threaded.
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
- System.out.println("Attempting to open port.");
try {
mSocket = new Socket(ipAddress, PORT);
- System.out.println("We seem to have opened.");
mInputStream = mSocket.getInputStream();
mOutputStream = mSocket.getOutputStream();
startListening();
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
index 40c491b..e26ef31 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
@@ -10,9 +10,6 @@ package org.libreoffice.impressremote.communication;
import java.util.ArrayList;
-import org.json.JSONException;
-import org.json.JSONObject;
-
import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java
index 2861498..40bb918 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java
@@ -1,8 +1,5 @@
package org.libreoffice.impressremote.communication;
-import org.json.JSONException;
-import org.json.JSONObject;
-
/**
* Interface to send commands to the server.
*
@@ -17,39 +14,16 @@ public class Transmitter {
}
public void nextTransition() {
- JSONObject aCommand = new JSONObject();
- try {
- aCommand.put("command", "transition_next");
- } catch (JSONException e) {
- e.printStackTrace();
- // TODO: clean
- }
- // Create JSON
- mClient.sendCommand(aCommand.toString());
+ mClient.sendCommand("transition_next\n\n");
}
public void previousTransition() {
- JSONObject aCommand = new JSONObject();
- try {
- aCommand.put("command", "transition_previous");
- } catch (JSONException e) {
- e.printStackTrace();
- // TODO: clean
- }
- // Create JSON
- mClient.sendCommand(aCommand.toString());
+
+ mClient.sendCommand("transition_previous\n\n");
}
public void gotoSlide(int slide) {
- JSONObject aCommand = new JSONObject();
- try {
- aCommand.put("command", "goto_slide");
- aCommand.put("slide_numer", slide);
- } catch (JSONException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mClient.sendCommand(aCommand.toString());
+ mClient.sendCommand("goto_slide\n" + slide + "\n\n");
}
}
diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk
index 2f2c4c5..9deaefb 100644
--- a/sd/Library_sd.mk
+++ b/sd/Library_sd.mk
@@ -27,10 +27,6 @@
$(eval $(call gb_Library_Library,sd))
-$(eval $(call gb_Library_use_externals,sd,\
- gtk \
-))
-
$(eval $(call gb_SdiTarget_SdiTarget,sd/sdi/sdslots,sd/sdi/sdslots))
$(eval $(call gb_SdiTarget_set_include,sd/sdi/sdslots,\
@@ -63,7 +59,6 @@ $(eval $(call gb_Library_set_include,sd,\
-I$(SRCDIR)/sd/source/ui/inc \
-I$(SRCDIR)/sd/source/ui/slidesorter/inc \
-I$(WORKDIR)/SdiTarget/sd/sdi \
- $(shell pkg-config --cflags json-glib-1.0) \
))
$(eval $(call gb_Library_add_defs,sd,\
@@ -113,10 +108,6 @@ $(eval $(call gb_Library_use_libraries,sd,\
$(gb_STDLIBS) \
))
-$(eval $(call gb_Library_add_libs,sd,\
- $(shell pkg-config --libs glib-2.0 json-glib-1.0) \
-))
-
$(eval $(call gb_Library_set_componentfile,sd,sd/util/sd))
$(eval $(call gb_Library_add_exception_objects,sd,\
diff --git a/sd/source/ui/remotecontrol/Listener.cxx b/sd/source/ui/remotecontrol/Listener.cxx
index 959b694..9679912 100644
--- a/sd/source/ui/remotecontrol/Listener.cxx
+++ b/sd/source/ui/remotecontrol/Listener.cxx
@@ -11,9 +11,6 @@
#include "Listener.hxx"
-#include <glib-object.h>
-#include <json-glib/json-glib.h>
-
using namespace sd;
using namespace ::com::sun::star::presentation;
using rtl::OString;
@@ -25,9 +22,6 @@ Listener::Listener( const css::uno::Reference<XSlideShowController>& rxSlideShow
mxSlideShowController(rxSlideShowController),
mStreamSocket( aSocket )
{
- g_type_init();
-
-
if( mxSlideShowController.is() )
{
// Listen for events from the slide show controller.
@@ -57,38 +51,38 @@ void SAL_CALL Listener::resumed (void)
void SAL_CALL Listener::slideEnded (sal_Bool bReverse)
throw (css::uno::RuntimeException)
{
- (void) bReverse;
- JsonBuilder *aBuilder = json_builder_new();
-
-
- json_builder_begin_object( aBuilder );
- json_builder_set_member_name( aBuilder, "slide_numer");
- json_builder_add_int_value( aBuilder, 2 );
- // FIXME: get the slide number
- json_builder_end_object( aBuilder );
-
- JsonGenerator *aGen = json_generator_new();
- JsonNode *aRoot = json_builder_get_root( aBuilder );
- json_generator_set_root( aGen, aRoot );
- char *aCommand = json_generator_to_data( aGen, NULL);
-
- json_node_free( aRoot );
- g_object_unref ( aGen );
- g_object_unref ( aBuilder );
-
- sal_Int32 aLen = strlen( aCommand );
-
- OString aLengthString = OString::valueOf( aLen );
- const char *aLengthChar = aLengthString.getStr();
-
- sal_Int32 aLengthLength = aLengthString.getLength();
-
- mStreamSocket.write( aLengthChar, aLengthLength );
- mStreamSocket.write( "\n", 1 );
- mStreamSocket.write( aCommand, aLen );
- // Transmit here.
-
- g_free( aCommand );
+// (void) bReverse;
+// JsonBuilder *aBuilder = json_builder_new();
+//
+//
+// json_builder_begin_object( aBuilder );
+// json_builder_set_member_name( aBuilder, "slide_number");
+// json_builder_add_int_value( aBuilder, 2 );
+// // FIXME: get the slide number
+// json_builder_end_object( aBuilder );
+//
+// JsonGenerator *aGen = json_generator_new();
+// JsonNode *aRoot = json_builder_get_root( aBuilder );
+// json_generator_set_root( aGen, aRoot );
+// char *aCommand = json_generator_to_data( aGen, NULL);
+//
+// json_node_free( aRoot );
+// g_object_unref ( aGen );
+// g_object_unref ( aBuilder );
+//
+// sal_Int32 aLen = strlen( aCommand );
+//
+// OString aLengthString = OString::valueOf( aLen );
+// const char *aLengthChar = aLengthString.getStr();
+//
+// sal_Int32 aLengthLength = aLengthString.getLength();
+//
+// mStreamSocket.write( aLengthChar, aLengthLength );
+// mStreamSocket.write( "\n", 1 );
+// mStreamSocket.write( aCommand, aLen );
+// // Transmit here.
+//
+// g_free( aCommand );
}
void SAL_CALL Listener::hyperLinkClicked (const rtl::OUString &)
diff --git a/sd/source/ui/remotecontrol/Receiver.cxx b/sd/source/ui/remotecontrol/Receiver.cxx
index 59fb4f2..7b527ac 100644
--- a/sd/source/ui/remotecontrol/Receiver.cxx
+++ b/sd/source/ui/remotecontrol/Receiver.cxx
@@ -25,54 +25,30 @@ using namespace ::com::sun::star;
using rtl::OUString;
using rtl::OString;
using namespace ::osl;
+using namespace std;
Receiver::Receiver()
{
- g_type_init ();
}
Receiver::~Receiver()
{
}
-void Receiver::executeCommand( JsonObject *aObject,
- uno::Reference<presentation::XSlideShowController> xSlideShowController )
+void Receiver::parseCommand( std::vector<OString> aCommand, osl::StreamSocket &aStreamSocket )
{
- const char* aInstruction = json_node_get_string( json_object_get_member( aObject, "command" ) );
-
- fprintf( stderr, "instruction:%s\n", aInstruction );
-
- if ( strcmp( aInstruction, "transition_next" ) == 0 )
- {
-
- xSlideShowController->gotoNextEffect();
- // Next slide;
- }
- else if ( strcmp( aInstruction, "transition_previous" ) == 0 )
- {
- xSlideShowController->gotoPreviousEffect();
- }
- else if ( strcmp( aInstruction, "goto_slide" ) == 0 )
- {
- //
- }
-
-}
-
-void Receiver::parseCommand( const char* aCommand, sal_Int32 size, osl::StreamSocket &aStreamSocket )
-{
- css::uno::Reference<css::presentation::XSlideShowController> xSlideShowController;
+ uno::Reference<presentation::XSlideShowController> xSlideShowController;
try {
- css::uno::Reference< css::lang::XMultiServiceFactory > xServiceManager(
- ::comphelper::getProcessServiceFactory(), css::uno::UNO_QUERY_THROW );
- css::uno::Reference< css::frame::XFramesSupplier > xFramesSupplier( xServiceManager->createInstance(
- "com.sun.star.frame.Desktop" ) , UNO_QUERY_THROW );
- css::uno::Reference< css::frame::XFrame > xFrame ( xFramesSupplier->getActiveFrame(), UNO_QUERY_THROW );
- Reference<XPresentationSupplier> xPS ( xFrame->getController()->getModel(), UNO_QUERY_THROW);
- Reference<XPresentation2> xPresentation(xPS->getPresentation(), UNO_QUERY_THROW);
+ uno::Reference< lang::XMultiServiceFactory > xServiceManager(
+ ::comphelper::getProcessServiceFactory(), uno::UNO_QUERY_THROW );
+ uno::Reference< frame::XFramesSupplier > xFramesSupplier( xServiceManager->createInstance(
+ "com.sun.star.frame.Desktop" ) , uno::UNO_QUERY_THROW );
+ uno::Reference< frame::XFrame > xFrame ( xFramesSupplier->getActiveFrame(), uno::UNO_QUERY_THROW );
+ uno::Reference<presentation::XPresentationSupplier> xPS ( xFrame->getController()->getModel(), uno::UNO_QUERY_THROW);
+ uno::Reference<presentation::XPresentation2> xPresentation(xPS->getPresentation(), uno::UNO_QUERY_THROW);
// Throws an exception if now slideshow running
- xSlideShowController = Reference<css::presentation::XSlideShowController>(
- xPresentation->getController(), UNO_QUERY_THROW );
+ xSlideShowController = uno::Reference<presentation::XSlideShowController>(
+ xPresentation->getController(), uno::UNO_QUERY_THROW );
// FIXME: remove later, this is just to test functionality
sendPreview( 0, xSlideShowController, aStreamSocket );
}
@@ -81,26 +57,20 @@ void Receiver::parseCommand( const char* aCommand, sal_Int32 size, osl::StreamSo
return;
}
- // Parsing
- JsonParser *parser;
- JsonNode *root;
- GError *error;
-
- parser = json_parser_new();
- error = NULL;
- json_parser_load_from_data( parser, aCommand, size, &error );
-
- if (error) {
- g_error_free( error );
- g_object_unref( parser );
+ if ( aCommand[0].compareTo( "transition_next" ) == 0 )
+ {
+ xSlideShowController->gotoNextEffect();
+ }
+ else if ( aCommand[0].compareTo( "transition_previous" ) == 0 )
+ {
+ xSlideShowController->gotoPreviousEffect();
+ }
+ else if ( aCommand[0].compareTo( "goto_slide" ) == 0 )
+ {
+ // FIXME: if 0 returned, then not a valid number
+ sal_Int32 aSlide = aCommand[1].toInt32();
+ xSlideShowController->gotoSlideIndex( aSlide );
}
-
- root = json_parser_get_root( parser );
- JsonObject *aObject = json_node_get_object( root );
-
- executeCommand( aObject, xSlideShowController );
-
- g_object_unref( parser );
}
@@ -110,7 +80,7 @@ void sendPreview(sal_uInt32 aSlideNumber,
{
sal_uInt64 aSize; // Unused
- css::uno::Sequence<sal_Int8> aImageData = preparePreview( aSlideNumber, xSlideShowController, 320, 240, aSize );
+ uno::Sequence<sal_Int8> aImageData = preparePreview( aSlideNumber, xSlideShowController, 320, 240, aSize );
rtl::OUStringBuffer aStrBuffer;
::sax::Converter::encodeBase64( aStrBuffer, aImageData );
@@ -121,8 +91,7 @@ void sendPreview(sal_uInt32 aSlideNumber,
// Start the writing
mStreamSocket.write( "slide_preview\n", strlen( "slide_preview\n" ) );
- rtl::OString aSlideNumberString(rtl::OUStringToOString(
- rtl::OUString::valueOf( 2 ) , RTL_TEXTENCODING_UTF8 )); // FIXME get number
+ rtl::OString aSlideNumberString( rtl::OString::valueOf( 2 ) ); // FIXME get number
mStreamSocket.write( aSlideNumberString.getStr(), aSlideNumberString.getLength() );
mStreamSocket.write( "\n", 1 );
@@ -150,8 +119,8 @@ preparePreview(sal_uInt32 aSlideNumber,
uno::Reference< document::XExporter > xExporter( xFilter, uno::UNO_QUERY_THROW );
- css::uno::Reference< css::lang::XComponent > xSourceDoc(
- xSlideShowController->getSlideByIndex( aSlideNumber ) , css::uno::UNO_QUERY_THROW );
+ uno::Reference< lang::XComponent > xSourceDoc(
+ xSlideShowController->getSlideByIndex( aSlideNumber ) , uno::UNO_QUERY_THROW );
xExporter->setSourceDocument( xSourceDoc );
@@ -166,7 +135,7 @@ preparePreview(sal_uInt32 aSlideNumber,
aFilterData[2].Name = "ColorMode";
aFilterData[2].Value <<= sal_Int32(0); // Color
- css::uno::Sequence< css::beans::PropertyValue > aProps(3);
+ uno::Sequence< beans::PropertyValue > aProps(3);
aProps[0].Name = "MediaType";
aProps[0].Value <<= OUString( "image/png" );
@@ -187,7 +156,7 @@ preparePreview(sal_uInt32 aSlideNumber,
sal_uInt64 aRead;
rSize = 0;
aFile.getSize( rSize );
- css::uno::Sequence<sal_Int8> aContents( rSize );
+ uno::Sequence<sal_Int8> aContents( rSize );
aFile.read( aContents.getArray(), rSize, aRead );
aFile.close();
diff --git a/sd/source/ui/remotecontrol/Receiver.hxx b/sd/source/ui/remotecontrol/Receiver.hxx
index 15919f3..d74a039 100644
--- a/sd/source/ui/remotecontrol/Receiver.hxx
+++ b/sd/source/ui/remotecontrol/Receiver.hxx
@@ -16,8 +16,8 @@
#include <com/sun/star/presentation/XPresentation2.hpp>
#include <osl/socket.hxx>
#include <stdlib.h>
-#include <glib-object.h>
-#include <json-glib/json-glib.h>
+
+#include <vector>
namespace css = ::com::sun::star;
@@ -29,12 +29,9 @@ class Receiver
public:
Receiver();
~Receiver();
- void parseCommand( const char* aCommand, sal_Int32 size, osl::StreamSocket &aSocket );
-
+ void parseCommand( std::vector<rtl::OString> aCommand, osl::StreamSocket &aStreamSocket );
private:
- void executeCommand( JsonObject *aObject, css::uno::Reference<css::presentation::XSlideShowController> aController );
-
};
}
diff --git a/sd/source/ui/remotecontrol/Server.cxx b/sd/source/ui/remotecontrol/Server.cxx
index e6b7d9f..0a8f875 100644
--- a/sd/source/ui/remotecontrol/Server.cxx
+++ b/sd/source/ui/remotecontrol/Server.cxx
@@ -7,6 +7,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <stdlib.h>
+#include <algorithm>
#include <vector>
#include "sddll.hxx"
@@ -15,6 +16,7 @@
using namespace std;
using namespace sd;
+using rtl::OString;
Server::Server()
: Thread( "ServerThread" ), mSocket(), mReceiver()
@@ -31,41 +33,44 @@ void Server::listenThread()
// TODO: decryption
while (true)
{
+ sal_uInt64 aRet, aRead;
vector<char> aBuffer;
- char aReadBuffer[100];
- aRet = mStreamSocket.read
-
-
- int aRet;
- char aTemp;
- while ( (aRet = mStreamSocket.read( &aTemp, 1)) && aTemp != 0x0d ) // look for newline
- {
- aBuffer.push_back( aTemp );
- }
- if (aRet != 1) // Error reading or connection closed
+ vector<OString> aCommand;
+ sal_Bool finished = false;
+ aRead = 0;
+ while ( !finished )
{
- return;
+ aBuffer.resize( aRead + 100 );
+ aRet = mStreamSocket.recv( &aBuffer[aRead], 100 );
+ if ( aRet == 0 )
+ {
+ return; // closed
+ }
+ vector<char>::iterator aIt;
+ aIt = find( aBuffer.begin(), aBuffer.end(), '\n' ); // add aRead
+ aRead += aRet;
+ if ( aIt == aBuffer.end() )
+ {
+ fprintf( stderr, "Continuing\n" );
+ continue;
+ }
+ fprintf( stderr, "parsing\n" );
+ sal_uInt64 aLocation = aIt - aBuffer.begin();
+
+ vector<char> aTemp( aLocation );
+ memcpy( &(*aTemp.begin()), &(*aBuffer.begin()), aLocation );
+ aTemp.push_back( 0 );
+
+ aBuffer.erase( aBuffer.begin(), aBuffer.begin() + aLocation + 1 ); // Also delete the newline
+ aRead -= aLocation;
+
+ aCommand.push_back( OString( &(*aTemp.begin()) ) );
+ if ( (*aTemp.begin()) == 0 )
+ {
+ mReceiver.parseCommand( aCommand, mStreamSocket );
+ aCommand.clear();
+ }
}
- aBuffer.push_back('\0');
- rtl::OString aTempStr( &aBuffer.front() );
-
- const sal_Char* aLengthChar = aTempStr.getStr();
- sal_Int32 aLen = strtol( aLengthChar, NULL, 10);
-
- char *aMessage = new char[aLen+1];
- aMessage[aLen] = '\0';
-
- if( mStreamSocket.read( (void*) aMessage, aLen ) != aLen) // Error reading or connection closed
- {
- delete [] aMessage;
- return;
- }
-
- aTempStr = rtl::OString( aMessage ); //, (sal_Int32) aLen, CHARSET, 0u
- const sal_Char* aCommandChar = aTempStr.getStr();
-
- mReceiver.parseCommand( aCommandChar, aTempStr.getLength(), mStreamSocket );
- delete [] aMessage;
// TODO: deal with transmision errors gracefully.
}
More information about the Libreoffice-commits
mailing list