]> sjero.net Git - linphone/commitdiff
callback notif text delivered JNI
authorSylvain Berfini <Sylvain.Berfini@Belledonne-Communications.com>
Wed, 12 Sep 2012 14:35:30 +0000 (16:35 +0200)
committerSylvain Berfini <Sylvain.Berfini@Belledonne-Communications.com>
Wed, 12 Sep 2012 14:35:30 +0000 (16:35 +0200)
coreapi/chat.c
coreapi/linphonecore.h
coreapi/linphonecore_jni.cc
java/common/org/linphone/core/LinphoneChatMessage.java
java/common/org/linphone/core/LinphoneChatRoom.java

index 758293067970fa46fdff17e8dd3a17bc2271f09c..ddc3f5bfc608351095103345f844189a31cc6240 100644 (file)
@@ -119,6 +119,13 @@ void linphone_core_text_received(LinphoneCore *lc, const char *from, const char
        ms_free(cleanfrom);
 }
 
+LinphoneCore* linphone_chat_room_get_lc(LinphoneChatRoom *cr){
+       return cr->lc;
+}
+
+LinphoneChatRoom* linphone_chat_message_get_chat_room(LinphoneChatMessage *msg){
+       return msg->chat_room;
+}
 
 void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void * ud){
        cr->user_data=ud;
@@ -169,4 +176,4 @@ void linphone_chat_message_set_user_data(LinphoneChatMessage* message,void* ud)
  */
 void* linphone_chat_message_get_user_data(const LinphoneChatMessage* message) {
        return message->message_userdata;
-}
\ No newline at end of file
+}
index 7a1d27f09b0571c579bc29130cccaf67b3233059..da55604d1f5a048b017d8dd9dae19702c01287d0 100644 (file)
@@ -669,7 +669,8 @@ typedef void (*LinphoneChatMessageStateChangeCb)(LinphoneChatMessage* msg,Linpho
  * @param ud user data for the status cb.
  */
 void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangeCb status_cb,void* ud);
-
+LinphoneCore* linphone_chat_room_get_lc(LinphoneChatRoom *cr);
+LinphoneChatRoom* linphone_chat_message_get_chat_room(LinphoneChatMessage *msg);
 void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void * ud);
 void * linphone_chat_room_get_user_data(LinphoneChatRoom *cr);
 
index f27ad02707580a0eeb847cab337da74300aaae49..9d30dc33df57e9e720492538af4f2ebfab556a15 100644 (file)
@@ -132,6 +132,9 @@ public:
                callStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCall$State"));
                callStateFromIntId = env->GetStaticMethodID(callStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCall$State;");
 
+               chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State"));
+               chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;");
+
                /*callEncryption(LinphoneCore lc, LinphoneCall call, boolean encrypted,String auth_token);*/
                callEncryptionChangedId=env->GetMethodID(listenerClass,"callEncryptionChanged","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;ZLjava/lang/String;)V");
 
@@ -176,6 +179,7 @@ public:
                env->DeleteGlobalRef(globalStateClass);
                env->DeleteGlobalRef(registrationStateClass);
                env->DeleteGlobalRef(callStateClass);
+               env->DeleteGlobalRef(chatMessageStateClass);
                env->DeleteGlobalRef(proxyClass);
                env->DeleteGlobalRef(callClass);
                env->DeleteGlobalRef(chatRoomClass);
@@ -204,6 +208,9 @@ public:
        jmethodID callStateId;
        jmethodID callStateFromIntId;
 
+       jclass chatMessageStateClass;
+       jmethodID chatMessageStateFromIntId;
+
        jmethodID callEncryptionChangedId;
 
        jclass ecCalibratorStatusClass;
@@ -1358,16 +1365,64 @@ extern "C" long Java_org_linphone_core_LinphoneChatRoomImpl_getPeerAddress(JNIEn
                                                                                                                                                ,jlong ptr) {
        return (long) linphone_chat_room_get_peer_address((LinphoneChatRoom*)ptr);
 }
-extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage(JNIEnv*  env
+extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createLinphoneChatMessage(JNIEnv*  env
                                                                                                                                                ,jobject  thiz
                                                                                                                                                ,jlong ptr
                                                                                                                                                ,jstring jmessage) {
        const char* message = env->GetStringUTFChars(jmessage, NULL);
-       linphone_chat_room_send_message((LinphoneChatRoom*)ptr,message);
+       LinphoneChatMessage *chatMessage = linphone_chat_room_create_message((LinphoneChatRoom *)ptr, message);
        env->ReleaseStringUTFChars(jmessage, message);
 
+       return (jlong) chatMessage;
+}
+extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_setUserData(JNIEnv*  env
+                                                                                                                                               ,jobject  thiz
+                                                                                                                                               ,jlong ptr
+                                                                                                                                               ) {
+       jobject ud = env->NewGlobalRef(thiz);
+       linphone_chat_message_set_user_data((LinphoneChatMessage*)ptr,(void*) ud);
 }
+extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage(JNIEnv*  env
+                                                                                                                                               ,jobject  thiz
+                                                                                                                                               ,jlong ptr
+                                                                                                                                               ,jstring jmessage) {
+       const char* message = env->GetStringUTFChars(jmessage, NULL);
+       linphone_chat_room_send_message((LinphoneChatRoom*)ptr, message);
+       env->ReleaseStringUTFChars(jmessage, message);
+}
+
+static void chat_room_impl_callback(LinphoneChatMessage* msg, LinphoneChatMessageState state, void* ud) {
+       JNIEnv *env = 0;
+       jint result = jvm->AttachCurrentThread(&env,NULL);
+       if (result != 0) {
+               ms_error("cannot attach VM\n");
+               return;
+       }
 
+       jobject listener = (jobject) ud;
+       jclass clazz = (jclass) env->GetObjectClass(listener);
+       jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V");
+
+       LinphoneCore *lc = linphone_chat_room_get_lc(linphone_chat_message_get_chat_room(msg));
+       LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc);
+       env->CallVoidMethod(
+                       listener,
+                       method,
+                       (jobject)linphone_chat_message_get_user_data(msg),
+                       env->CallStaticObjectMethod(lcData->chatMessageStateClass,lcData->chatMessageStateFromIntId,(jint)state));
+
+       if (state == LinphoneChatMessageStateDelivered || state == LinphoneChatMessageStateNotDelivered) {
+               env->DeleteGlobalRef(listener);
+       }
+}
+extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage2(JNIEnv*  env
+                                                                                                                                               ,jobject  thiz
+                                                                                                                                               ,jlong ptr
+                                                                                                                                               ,jlong jmessage
+                                                                                                                                               ,jobject jlistener) {
+       jobject listener = env->NewGlobalRef(jlistener);
+       linphone_chat_room_send_message2((LinphoneChatRoom*)ptr, (LinphoneChatMessage*)jmessage, chat_room_impl_callback, (void*)listener);
+}
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setVideoWindowId(JNIEnv* env
                                                                                                                                                ,jobject thiz
                                                                                                                                                ,jlong lc
index 77238d27070b31ed6233d518b756b830f7c0f39f..5e107619fffbc75e094e888e7c95be57030d8a37 100644 (file)
@@ -8,6 +8,7 @@ public interface LinphoneChatMessage {
                void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, State state);
        }
        static class State {
+               @SuppressWarnings("rawtypes")
                static private Vector values = new Vector();
                private final int mValue;
                public final int value() {return mValue;}
@@ -30,6 +31,7 @@ public interface LinphoneChatMessage {
                 */
                public final static State NotDelivered = new State(3,"NotDelivered");
                
+               @SuppressWarnings("unchecked")
                private State(int value,String stringValue) {
                        mValue = value;
                        values.addElement(this);
@@ -47,7 +49,14 @@ public interface LinphoneChatMessage {
                public String toString() {
                        return mStringValue;
                }
+               public int toInt() {
+                       return mValue;
+               }
        }
+       
+       long getNativePtr();
+       
        Object getUserData();
+       
        void setUserData();
 }
index 8c85b64bc9f4e509353cd74dbb008bf85d4a4ddf..102a03c217a1ad0e9453adcd8fc6661641900119 100644 (file)
@@ -39,11 +39,19 @@ public interface LinphoneChatRoom {
         * Send a message to peer member of this chat room.
         * @param chat message
         */
-       void sendMessage(LinphoneChatMessage msg, LinphoneChatMessage.StateListener listener);
+       void sendMessage(LinphoneChatMessage message, LinphoneChatMessage.StateListener listener);
        /**
         * DEPRECATED
         * @param opaque
         * @param message
         */
        void sendMessage(Object opaque, String message);
+       
+       /**
+        * Create a LinphoneChatMessage
+        * @param chatRoom chat room associated to the message
+        * @param message message to send
+        * @return LinphoneChatMessage object
+        */
+       LinphoneChatMessage createLinphoneChatMessage(String message);
 }