Packet geändert.
This commit is contained in:
1
Android/BewoKlientenApp/.idea/.name
generated
1
Android/BewoKlientenApp/.idea/.name
generated
@@ -1 +0,0 @@
|
||||
BewoKlientenApp
|
||||
10
Android/BewoKlientenApp/.idea/gradle.xml
generated
10
Android/BewoKlientenApp/.idea/gradle.xml
generated
@@ -3,20 +3,16 @@
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="distributionType" value="LOCAL" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleHome" value="C:\Program Files\Android\Android Studio\gradle\gradle-2.14.1" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="myModules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveModulePerSourceSet" value="false" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
2
Android/BewoKlientenApp/.idea/misc.xml
generated
2
Android/BewoKlientenApp/.idea/misc.xml
generated
@@ -10,7 +10,7 @@
|
||||
<ConfirmationsSetting value="0" id="Add" />
|
||||
<ConfirmationsSetting value="0" id="Remove" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
<component name="ProjectType">
|
||||
|
||||
@@ -32,12 +32,14 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
|
||||
@@ -64,14 +66,6 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
@@ -80,6 +74,14 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||
@@ -92,6 +94,7 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||
|
||||
@@ -5,7 +5,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.1.2'
|
||||
classpath 'com.android.tools.build:gradle:2.2.0'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#Mon May 09 08:53:20 CEST 2016
|
||||
#Fri Oct 07 15:42:19 CEST 2016
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
|
||||
|
||||
@@ -66,14 +66,6 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
@@ -82,11 +74,21 @@
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/multidex-instrumentation/1.0.1/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/multidex/1.0.1/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/21.0.3/jars" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
|
||||
@@ -97,6 +99,8 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/multi-dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
|
||||
@@ -109,8 +113,10 @@
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" exported="" scope="TEST" name="multidex-instrumentation-1.0.1" level="project" />
|
||||
<orderEntry type="library" exported="" name="appcompat-v7-21.0.3" level="project" />
|
||||
<orderEntry type="library" exported="" name="ksoap2-android-assembly-3.6.0-jar-with-dependencies" level="project" />
|
||||
<orderEntry type="library" exported="" name="multidex-1.0.1" level="project" />
|
||||
<orderEntry type="library" exported="" name="gson-2.6.2" level="project" />
|
||||
<orderEntry type="library" exported="" name="volley" level="project" />
|
||||
<orderEntry type="library" exported="" name="support-v4-21.0.3" level="project" />
|
||||
|
||||
@@ -4,8 +4,13 @@ android {
|
||||
compileSdkVersion 21
|
||||
buildToolsVersion '23.0.3'
|
||||
|
||||
dexOptions {
|
||||
maxProcessCount 2
|
||||
javaMaxHeapSize "2g"
|
||||
}
|
||||
defaultConfig {
|
||||
applicationId "beyondsoft.bewomitarbeiterapp"
|
||||
multiDexEnabled true
|
||||
minSdkVersion 18
|
||||
targetSdkVersion 21
|
||||
versionCode 1
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
@@ -17,7 +19,7 @@
|
||||
android:theme="@android:style/Theme.NoTitleBar"
|
||||
android:configChanges="orientation"
|
||||
android:screenOrientation="portrait"
|
||||
android:launchMode="singleTop">
|
||||
>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.Locale;
|
||||
import beyondsoft.bewomitarbeiterapp.ContactListItem;
|
||||
import entities.ChatMessage;
|
||||
import soapConnection.SoapConnectionManager;
|
||||
import util.BeWoLog;
|
||||
|
||||
/**
|
||||
* Created by bib on 07.06.2016.
|
||||
@@ -27,7 +28,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
private static final String LOGTAG = "DATABASE_HANDLER";
|
||||
|
||||
//DataBase version
|
||||
private static final int DATABASE_VERSION = 1;
|
||||
private static final int DATABASE_VERSION = 8;
|
||||
|
||||
//Database name
|
||||
private static final String DATABASE_NAME = "Contacts_Manager";
|
||||
@@ -74,6 +75,21 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
private static final String KEY_IS_DELIVERED_CHATMESSAGE = "isdelivered";
|
||||
private static final String KEY_SERVERSEITIGE_OID_CHATMESSAGE = "serverseitigeoid";
|
||||
private static final String KEY_IS_TEAM_CHATMESSAGE = "isteam";
|
||||
private static final String KEY_MESSAGE_ID_CHATMESSAGE = "messageid";
|
||||
private static final String KEY_SENDDATE_CHATMESSAGE = "senddate";
|
||||
|
||||
private static final String[] CHAT_MESSAGE_COLUMNS = new String[] {
|
||||
KEY_ID_CHATMESSAGE,
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE,
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE,
|
||||
KEY_INSTS_CHATMESSAGE,
|
||||
KEY_CHAT_TEXT_CHATMESSAGE,
|
||||
KEY_IS_DELIVERED_CHATMESSAGE,
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE,
|
||||
KEY_IS_TEAM_CHATMESSAGE,
|
||||
KEY_MESSAGE_ID_CHATMESSAGE,
|
||||
KEY_SENDDATE_CHATMESSAGE
|
||||
};
|
||||
|
||||
private static DatabaseHandler mInstance = null;
|
||||
|
||||
@@ -126,7 +142,9 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
KEY_CHAT_TEXT_CHATMESSAGE + " TEXT," +
|
||||
KEY_IS_DELIVERED_CHATMESSAGE + " INTEGER," +
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE + " INTEGER DEFAULT NULL," +
|
||||
KEY_IS_TEAM_CHATMESSAGE + " INTEGER DEFAULT 0)";
|
||||
KEY_IS_TEAM_CHATMESSAGE + " INTEGER DEFAULT 0," +
|
||||
KEY_MESSAGE_ID_CHATMESSAGE + " TEXT," +
|
||||
KEY_SENDDATE_CHATMESSAGE + " DATETIME DEFAULT NULL)";
|
||||
|
||||
db.execSQL(createChatMessageTable);
|
||||
|
||||
@@ -168,23 +186,11 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
public void addChatMessages(ArrayList<ChatMessage> messages) {
|
||||
SQLiteDatabase db = this.getWritableDatabase();
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
|
||||
try {
|
||||
db.beginTransaction();
|
||||
|
||||
for(ChatMessage message : messages) {
|
||||
values.put(KEY_SENDER_PERSON_OID_CHATMESSAGE, message.SenderPersonOid);
|
||||
values.put(KEY_RECIPIENT_PERSON_OID_CHATMESSAGE, message.RecipientPersonOid);
|
||||
values.put(KEY_INSTS_CHATMESSAGE, getDateTimeString(message.InsTs));
|
||||
values.put(KEY_CHAT_TEXT_CHATMESSAGE, message.ChatText);
|
||||
values.put(KEY_IS_DELIVERED_CHATMESSAGE, message.IsDelivered ? 1 : 0);
|
||||
values.put(KEY_SERVERSEITIGE_OID_CHATMESSAGE, message.ServerseitigeOid);
|
||||
values.put(KEY_IS_TEAM_CHATMESSAGE, message.IsTeam ? 1 : 0);
|
||||
|
||||
db.insertOrThrow(TABLE_CHATMESSAGE, null, values);
|
||||
|
||||
values.clear();
|
||||
db.insertOrThrow(TABLE_CHATMESSAGE, null, fillValuesForChatMessage(message));
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
@@ -211,37 +217,30 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
values.put(KEY_IS_DELIVERED_CHATMESSAGE, message.IsDelivered ? 1 : 0);
|
||||
values.put(KEY_SERVERSEITIGE_OID_CHATMESSAGE, message.ServerseitigeOid);
|
||||
values.put(KEY_IS_TEAM_CHATMESSAGE, message.IsTeam ? 1 : 0);
|
||||
values.put(KEY_MESSAGE_ID_CHATMESSAGE, message.MessageId);
|
||||
values.put(KEY_SENDDATE_CHATMESSAGE, (message.SendDate == null ? null : getDateTimeString(message.SendDate)));
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
public int updateChatMessage(ChatMessage message) {
|
||||
SQLiteDatabase writableDatabase = this.getWritableDatabase();
|
||||
ContentValues values = new ContentValues();
|
||||
|
||||
values.put(KEY_SENDER_PERSON_OID_CHATMESSAGE, message.SenderPersonOid);
|
||||
values.put(KEY_RECIPIENT_PERSON_OID_CHATMESSAGE, message.RecipientPersonOid);
|
||||
values.put(KEY_INSTS_CHATMESSAGE, getDateTimeString(message.InsTs));
|
||||
values.put(KEY_CHAT_TEXT_CHATMESSAGE, message.ChatText);
|
||||
values.put(KEY_IS_DELIVERED_CHATMESSAGE, message.IsDelivered ? 1 : 0);
|
||||
values.put(KEY_SERVERSEITIGE_OID_CHATMESSAGE, message.ServerseitigeOid);
|
||||
values.put(KEY_IS_TEAM_CHATMESSAGE, message.IsTeam ? 1 : 0);
|
||||
|
||||
return writableDatabase.update(TABLE_CHATMESSAGE, values, KEY_ID_CHATMESSAGE + " = ?", new String[] { String.valueOf(message.Id)});
|
||||
return writableDatabase.update(TABLE_CHATMESSAGE, fillValuesForChatMessage(message), KEY_ID_CHATMESSAGE + " = ?", new String[] { String.valueOf(message.Id)});
|
||||
}
|
||||
|
||||
public ArrayList<Integer> getExistingChatMessageIds() {
|
||||
ArrayList<Integer> result = new ArrayList<Integer>();
|
||||
public ArrayList<String> getExistingChatMessageUUIDs() {
|
||||
ArrayList<String> result = new ArrayList<>();
|
||||
|
||||
SQLiteDatabase db = this.getReadableDatabase();
|
||||
|
||||
String selectQuery = "SELECT "+ KEY_SERVERSEITIGE_OID_CHATMESSAGE + " FROM " + TABLE_CHATMESSAGE + " WHERE " + KEY_SERVERSEITIGE_OID_CHATMESSAGE + " <> 0";
|
||||
String selectQuery = "SELECT "+ KEY_MESSAGE_ID_CHATMESSAGE + " FROM " + TABLE_CHATMESSAGE + " WHERE " + KEY_MESSAGE_ID_CHATMESSAGE + " IS NOT NULL";
|
||||
|
||||
Cursor cursor = db.rawQuery(selectQuery, null);
|
||||
|
||||
if(cursor.moveToFirst()) {
|
||||
do {
|
||||
result.add(cursor.getInt(0));
|
||||
result.add(cursor.getString(0));
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
|
||||
@@ -250,18 +249,18 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
return result;
|
||||
}
|
||||
|
||||
public ArrayList<Integer> getExistingTeamChatMessageIds() {
|
||||
ArrayList<Integer> result = new ArrayList<Integer>();
|
||||
public ArrayList<String> getExistingTeamChatMessageUUIDs() {
|
||||
ArrayList<String> result = new ArrayList<String>();
|
||||
|
||||
SQLiteDatabase db = this.getReadableDatabase();
|
||||
|
||||
String selectQuery = "SELECT " + KEY_SERVERSEITIGE_OID_CHATMESSAGE + " FROM " + TABLE_CHATMESSAGE + " WHERE " + KEY_SERVERSEITIGE_OID_CHATMESSAGE + " <> 0 AND " + KEY_IS_TEAM_CHATMESSAGE + " = 1";
|
||||
String selectQuery = "SELECT " + KEY_MESSAGE_ID_CHATMESSAGE + " FROM " + TABLE_CHATMESSAGE + " WHERE " + KEY_MESSAGE_ID_CHATMESSAGE + " IS NOT NULL AND " + KEY_IS_TEAM_CHATMESSAGE + " = 1";
|
||||
|
||||
Cursor cursor = db.rawQuery(selectQuery, null);
|
||||
|
||||
if(cursor.moveToFirst()) {
|
||||
do {
|
||||
result.add(cursor.getInt(0));
|
||||
result.add(cursor.getString(0));
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
|
||||
@@ -317,17 +316,8 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
|
||||
Cursor cursor = readableDatabase.query(
|
||||
TABLE_CHATMESSAGE,
|
||||
new String[] {
|
||||
KEY_ID_CHATMESSAGE,
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE,
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE,
|
||||
KEY_INSTS_CHATMESSAGE,
|
||||
KEY_CHAT_TEXT_CHATMESSAGE,
|
||||
KEY_IS_DELIVERED_CHATMESSAGE,
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE,
|
||||
KEY_IS_TEAM_CHATMESSAGE
|
||||
},
|
||||
KEY_ID_CHATMESSAGE + "=?",
|
||||
CHAT_MESSAGE_COLUMNS,
|
||||
KEY_ID_CHATMESSAGE + " =? ",
|
||||
new String[]{String.valueOf(id)},
|
||||
null, null, null, null);
|
||||
|
||||
@@ -341,10 +331,20 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
boolean isDelivered = cursor.getInt(5) == 1;
|
||||
int serverseitigeOid = cursor.getInt(6);
|
||||
boolean isTeam = cursor.getInt(7) == 1;
|
||||
String messageUUID = cursor.getString(8);
|
||||
|
||||
Date sendDate = null;
|
||||
if(cursor.getString(9) != null) {
|
||||
sendDate = getDateFromString(cursor.getString(9));
|
||||
}
|
||||
|
||||
cursor.close();
|
||||
|
||||
return new ChatMessage(messageId, senderPersonOid, recipientPersonOid, insTs, chatText, isDelivered, serverseitigeOid, isTeam);
|
||||
ChatMessage result = new ChatMessage(messageId, senderPersonOid, recipientPersonOid, insTs, chatText, isDelivered, serverseitigeOid, isTeam, messageUUID);
|
||||
|
||||
result.SendDate = sendDate;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -357,23 +357,14 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
|
||||
Cursor cursor = readableDatabase.query(
|
||||
TABLE_CHATMESSAGE,
|
||||
new String[] {
|
||||
KEY_ID_CHATMESSAGE,
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE,
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE,
|
||||
KEY_INSTS_CHATMESSAGE,
|
||||
KEY_CHAT_TEXT_CHATMESSAGE,
|
||||
KEY_IS_DELIVERED_CHATMESSAGE,
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE,
|
||||
KEY_IS_TEAM_CHATMESSAGE
|
||||
},
|
||||
KEY_IS_TEAM_CHATMESSAGE + " = 0 AND " +
|
||||
CHAT_MESSAGE_COLUMNS,
|
||||
KEY_IS_TEAM_CHATMESSAGE + " = 0 AND ((" +
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE + "=? AND " +
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? OR " +
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=?) OR (" +
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? AND " +
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE + "=?"
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE + "=?))"
|
||||
,
|
||||
new String[] {String.valueOf(SoapConnectionManager.User.getPersonOid()), String.valueOf(recipientOid), String.valueOf(SoapConnectionManager.User.getPersonOid()), String.valueOf(recipientOid)},
|
||||
new String[] {String.valueOf(SoapConnectionManager.getUser().getPersonOid()), String.valueOf(recipientOid), String.valueOf(SoapConnectionManager.getUser().getPersonOid()), String.valueOf(recipientOid)},
|
||||
null, null, null, null);
|
||||
|
||||
if(cursor.moveToFirst()) {
|
||||
@@ -386,9 +377,14 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
cursor.getString(4),
|
||||
cursor.getInt(5) == 1,
|
||||
cursor.getInt(6),
|
||||
cursor.getInt(7) == 1
|
||||
cursor.getInt(7) == 1,
|
||||
cursor.getString(8)
|
||||
);
|
||||
|
||||
if(cursor.getString(9) != null) {
|
||||
message.SendDate = getDateFromString(cursor.getString(9));
|
||||
}
|
||||
|
||||
messages.add(message);
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
@@ -405,7 +401,7 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
|
||||
Cursor cursor = readableDatabase.query(
|
||||
TABLE_CHATMESSAGE,
|
||||
new String[] {KEY_ID_CHATMESSAGE, KEY_SENDER_PERSON_OID_CHATMESSAGE, KEY_RECIPIENT_PERSON_OID_CHATMESSAGE, KEY_INSTS_CHATMESSAGE, KEY_CHAT_TEXT_CHATMESSAGE, KEY_IS_DELIVERED_CHATMESSAGE, KEY_SERVERSEITIGE_OID_CHATMESSAGE, KEY_IS_TEAM_CHATMESSAGE},
|
||||
CHAT_MESSAGE_COLUMNS,
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE + "=? AND " + KEY_IS_TEAM_CHATMESSAGE + "= 1",
|
||||
new String[] {String.valueOf(teamOid)},
|
||||
null, null, null, null);
|
||||
@@ -420,9 +416,14 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
cursor.getString(4),
|
||||
cursor.getInt(5) == 1,
|
||||
cursor.getInt(6),
|
||||
cursor.getInt(7) == 1
|
||||
cursor.getInt(7) == 1,
|
||||
cursor.getString(8)
|
||||
);
|
||||
|
||||
if(cursor.getString(9) != null) {
|
||||
message.SendDate = getDateFromString(cursor.getString(9));
|
||||
}
|
||||
|
||||
messages.add(message);
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
@@ -513,9 +514,14 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
cursor.getString(4),
|
||||
cursor.getInt(5) == 1,
|
||||
cursor.getInt(6),
|
||||
cursor.getInt(7) == 1
|
||||
cursor.getInt(7) == 1,
|
||||
cursor.getString(8)
|
||||
);
|
||||
|
||||
if(cursor.getString(9) != null) {
|
||||
message.SendDate = getDateFromString(cursor.getString(9));
|
||||
}
|
||||
|
||||
result.add(message);
|
||||
|
||||
} while(cursor.moveToNext());
|
||||
@@ -612,46 +618,30 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean GetIsMessageInDatabase(int pServerseitigeOid) {
|
||||
|
||||
public boolean GetIsMessageInDatabase(String pMessageId) {
|
||||
SQLiteDatabase readableDatabase = this.getReadableDatabase();
|
||||
|
||||
Cursor cursor = readableDatabase.query(TABLE_CHATMESSAGE,
|
||||
new String[] {
|
||||
KEY_ID_CHATMESSAGE,
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE,
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE,
|
||||
KEY_INSTS_CHATMESSAGE,
|
||||
KEY_CHAT_TEXT_CHATMESSAGE,
|
||||
KEY_IS_DELIVERED_CHATMESSAGE,
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE,
|
||||
KEY_IS_TEAM_CHATMESSAGE
|
||||
},
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE + " =?",
|
||||
new String[] {String.valueOf(pServerseitigeOid)},
|
||||
CHAT_MESSAGE_COLUMNS,
|
||||
KEY_MESSAGE_ID_CHATMESSAGE + " =? ",
|
||||
new String[] {pMessageId},
|
||||
null, null, null, null);
|
||||
|
||||
return cursor != null && cursor.moveToFirst();
|
||||
}
|
||||
|
||||
public ArrayList<ChatMessage> getUnsentChatMessages() {
|
||||
BeWoLog.writeToLogFile("Lade unverschickte Nachrichten aus der Datenbank. (getUnsentMessages)");
|
||||
|
||||
ArrayList<ChatMessage> messages = new ArrayList<>();
|
||||
|
||||
SQLiteDatabase readableDatabase = this.getReadableDatabase();
|
||||
|
||||
Cursor cursor = readableDatabase.query(TABLE_CHATMESSAGE,
|
||||
new String[] {
|
||||
KEY_ID_CHATMESSAGE,
|
||||
KEY_SENDER_PERSON_OID_CHATMESSAGE,
|
||||
KEY_RECIPIENT_PERSON_OID_CHATMESSAGE,
|
||||
KEY_INSTS_CHATMESSAGE,
|
||||
KEY_CHAT_TEXT_CHATMESSAGE,
|
||||
KEY_IS_DELIVERED_CHATMESSAGE,
|
||||
KEY_SERVERSEITIGE_OID_CHATMESSAGE,
|
||||
KEY_IS_TEAM_CHATMESSAGE
|
||||
},
|
||||
KEY_IS_DELIVERED_CHATMESSAGE + " =? AND " + KEY_SENDER_PERSON_OID_CHATMESSAGE + " =?",
|
||||
new String[] {String.valueOf(0), String.valueOf(SoapConnectionManager.User.getPersonOid())}, null, null, null, null);
|
||||
Cursor cursor = readableDatabase.query(
|
||||
TABLE_CHATMESSAGE,
|
||||
CHAT_MESSAGE_COLUMNS,
|
||||
KEY_IS_DELIVERED_CHATMESSAGE + " =? AND " + KEY_SENDER_PERSON_OID_CHATMESSAGE + " =? ",
|
||||
new String[] {String.valueOf(0), String.valueOf(SoapConnectionManager.getUser().getPersonOid())}, null, null, null, null);
|
||||
|
||||
if(cursor.moveToFirst()) {
|
||||
do{
|
||||
@@ -663,9 +653,16 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
cursor.getString(4),
|
||||
cursor.getInt(5) == 1,
|
||||
cursor.getInt(6),
|
||||
cursor.getInt(7) == 1
|
||||
cursor.getInt(7) == 1,
|
||||
cursor.getString(8)
|
||||
);
|
||||
|
||||
BeWoLog.writeToLogFile("MessageId: " + message.MessageId + "; IsDelivered: " + message.IsDelivered + "; Name der IsDelivered-Spalte: " + cursor.getColumnName(5) + ". (getUnsentMessages)");
|
||||
|
||||
if(cursor.getString(9) != null) {
|
||||
message.SendDate = getDateFromString(cursor.getString(9));
|
||||
}
|
||||
|
||||
messages.add(message);
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
@@ -674,4 +671,62 @@ public class DatabaseHandler extends SQLiteOpenHelper {
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
public ArrayList<ChatMessage> getChatMessagesByMessageIds(ArrayList<String> messageIds) {
|
||||
String abc = "";
|
||||
for(String mid : messageIds) {
|
||||
abc += messageIds;
|
||||
if(messageIds.indexOf(mid) != (messageIds.size() - 1)) {
|
||||
abc += "\n";
|
||||
}
|
||||
}
|
||||
BeWoLog.writeToLogFile(abc);
|
||||
|
||||
ArrayList<ChatMessage> result = new ArrayList<>();
|
||||
|
||||
SQLiteDatabase readableDatabase = this.getReadableDatabase();
|
||||
|
||||
String whereClause = "";
|
||||
|
||||
for(int i = 0; i < messageIds.size(); i++) {
|
||||
whereClause = whereClause + KEY_MESSAGE_ID_CHATMESSAGE + " = '" + messageIds.get(i) + "' ";
|
||||
|
||||
if(i != (messageIds.size() - 1)) {
|
||||
whereClause += " OR ";
|
||||
}
|
||||
}
|
||||
|
||||
Cursor cursor = readableDatabase.query(TABLE_CHATMESSAGE, CHAT_MESSAGE_COLUMNS, whereClause, null, null, null, null);
|
||||
|
||||
if(cursor.moveToFirst()) {
|
||||
do{
|
||||
ChatMessage message = new ChatMessage(
|
||||
cursor.getInt(0),
|
||||
cursor.getInt(1),
|
||||
cursor.getInt(2),
|
||||
getDateFromString(cursor.getString(3)),
|
||||
cursor.getString(4),
|
||||
cursor.getInt(5) == 1,
|
||||
cursor.getInt(6),
|
||||
cursor.getInt(7) == 1,
|
||||
cursor.getString(8)
|
||||
);
|
||||
|
||||
String blubb = "";
|
||||
for(int i = 0; i < cursor.getColumnCount(); i++) {
|
||||
blubb += "" + i + ". " + cursor.getColumnName(i) + "; ";
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile(blubb);
|
||||
|
||||
if(cursor.getString(9) != null) {
|
||||
message.SendDate = getDateFromString(cursor.getString(9));
|
||||
}
|
||||
|
||||
result.add(message);
|
||||
} while(cursor.moveToNext());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@ import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.octo.android.robospice.SpiceManager;
|
||||
import com.octo.android.robospice.UncachedSpiceService;
|
||||
import com.octo.android.robospice.persistence.exception.SpiceException;
|
||||
@@ -13,16 +16,31 @@ import com.octo.android.robospice.request.listener.RequestListener;
|
||||
import org.ksoap2.serialization.PropertyInfo;
|
||||
import org.ksoap2.serialization.SoapPrimitive;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import Database.DatabaseHandler;
|
||||
import entities.ChatMessage;
|
||||
import soapConnection.DataIdentifier;
|
||||
import soapConnection.JsonSoapPrimitiveRequest;
|
||||
import soapConnection.Packet;
|
||||
import soapConnection.SoapCalls;
|
||||
import soapConnection.SoapConnectionManager;
|
||||
import tcpConnection.LoginCallback;
|
||||
import tcpConnection.SocketManager;
|
||||
import util.BeWoLog;
|
||||
import util.ChatMessageDeserializer;
|
||||
import util.ConnectivityReceiver;
|
||||
|
||||
import static soapConnection.SoapCalls.CHECK_MESSAGE_IDS;
|
||||
|
||||
/**
|
||||
* Created by JettenM on 24.08.2016.
|
||||
*/
|
||||
@@ -49,6 +67,17 @@ public class BeWoChatApplication extends Application {
|
||||
|
||||
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||
|
||||
public static Date lastOnlineTS;
|
||||
|
||||
private static int refreshIntervalInMinutes = 6;
|
||||
public static int getRefreshIntervalInMilliseconds() {
|
||||
return refreshIntervalInMinutes * 60 * 1000;
|
||||
}
|
||||
|
||||
public static int getRefreshIntervalInMinutes() {
|
||||
return refreshIntervalInMinutes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
@@ -65,13 +94,18 @@ public class BeWoChatApplication extends Application {
|
||||
@Override
|
||||
public void run() {
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.KEEP_ALIVE, new ArrayList<PropertyInfo>());
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
|
||||
|
||||
if(ConnectivityReceiver.isConnected()) {
|
||||
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < getRefreshIntervalInMilliseconds()) {
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
|
||||
}
|
||||
}
|
||||
|
||||
Log.i("LOOPER", "Halte Verbindung zum Soap-Server am leben...");
|
||||
}
|
||||
};
|
||||
|
||||
final ScheduledFuture<?> blubbHandle = scheduler.scheduleAtFixedRate(blubb, 10, 10, TimeUnit.MINUTES);
|
||||
final ScheduledFuture<?> blubbHandle = scheduler.scheduleAtFixedRate(blubb, refreshIntervalInMinutes, refreshIntervalInMinutes, TimeUnit.MINUTES);
|
||||
|
||||
scheduler.schedule(new Runnable() {
|
||||
@Override
|
||||
@@ -89,6 +123,16 @@ public class BeWoChatApplication extends Application {
|
||||
ConnectivityReceiver.connectivityReceiverListener = listener;
|
||||
}
|
||||
|
||||
public static void writeExceptionToLog(Throwable ex) {
|
||||
String logText = "Ausnahme: " + ex.toString() + "; Message: " + ex.getMessage() + "; Cause: " + ex.getCause();
|
||||
for(StackTraceElement ste : ex.getStackTrace()) {
|
||||
String steAsString = ste.toString();
|
||||
logText += "\t" + steAsString;
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile(logText);
|
||||
}
|
||||
|
||||
public BeWoChatApplication() {
|
||||
defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||
|
||||
@@ -98,6 +142,9 @@ public class BeWoChatApplication extends Application {
|
||||
Log.e("UNCAUGHT_EXCEPTION", "Eine unbehandelte Ausnahme ist aufgetreten!\n" + ex.getMessage());
|
||||
ex.printStackTrace();
|
||||
|
||||
|
||||
writeExceptionToLog(ex);
|
||||
|
||||
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
nm.cancelAll();
|
||||
@@ -113,16 +160,210 @@ public class BeWoChatApplication extends Application {
|
||||
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
Log.e("BEWOAPP", "Fehler beim am Leben erhalten!");
|
||||
|
||||
BeWoLog.writeToLogFile("Verbindungserneuerung ist fehlgeschlagen (JsonSoapPrimitiveRequestListener->onRequestFailure)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
if(soapPrimitive == null) {
|
||||
Log.e("BEWOAPP", "Antwort ist null!");
|
||||
BeWoLog.writeToLogFile("Die Verbindungserneuerung lieferte Null zurück. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
} else {
|
||||
BeWoChatApplication.lastOnlineTS = Calendar.getInstance().getTime();
|
||||
BeWoLog.writeToLogFile("Erneuere die Verbindung. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
Log.i("BEWOAPP", "Die Antwort hat einen Wert");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener implements RequestListener<SoapPrimitive> {
|
||||
|
||||
private final static String LOGTAG = "UUID_CHECK";
|
||||
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
Log.e(LOGTAG, "Die Anfrage an den Server ist gescheitert! (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestFailure)");
|
||||
BeWoLog.writeToLogFile("Die Anfrage an den Server ist gescheitert. Kann nicht überprüfen, ob die Nachrichten dem Server bekannt sind! Exception: <<" + spiceException.toString() + ">> (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestFailure)");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
if(soapPrimitive == null) {
|
||||
Log.e(LOGTAG, "Antwort vom Server ist null!");
|
||||
BeWoLog.writeToLogFile("Antwort vom Server ist null. Kann nicht überprüfen, ob die Nachrichten dem Server bekannt sind! (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
|
||||
return;
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile("Die Anfrage an den Server war mit Erfolg gekrönt. Liste mit dem Server bekannten Nachrichten erhalten. (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
|
||||
|
||||
GsonBuilder builder = new GsonBuilder();
|
||||
|
||||
Gson gson = builder.create();
|
||||
|
||||
Type listType = new TypeToken<ArrayList<String>>(){}.getType();
|
||||
|
||||
final ArrayList<String> result = gson.fromJson(soapPrimitive.toString(), listType);
|
||||
|
||||
if(result != null) {
|
||||
if(result.size() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
String blubb = "";
|
||||
for(String ms : result) {
|
||||
blubb += ms;
|
||||
|
||||
if(result.indexOf(ms) != (result.size() - 1)) {
|
||||
blubb += "\n";
|
||||
}
|
||||
}
|
||||
BeWoLog.writeToLogFile("Vom Server zurückgelieferte MessageIds: " + blubb);
|
||||
|
||||
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(BeWoChatApplication.getInstance());
|
||||
ArrayList<ChatMessage> messages2send = databaseHandler.getChatMessagesByMessageIds(result);
|
||||
|
||||
BeWoLog.writeToLogFile("Es existieren " + messages2send.size() + " Nachrichten, deren Response verloren gegangen ist. (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
|
||||
|
||||
for(ChatMessage cm : messages2send) {
|
||||
final Packet unsentPacket = new Packet();
|
||||
|
||||
unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
|
||||
unsentPacket.ChatMessage = cm.ChatText;
|
||||
unsentPacket.ChatName = SoapConnectionManager.getUser().getFullName();
|
||||
unsentPacket.RecipientPersonOid = cm.RecipientPersonOid;
|
||||
unsentPacket.ClientseitigeOid = cm.Id;
|
||||
unsentPacket.MessageTimeStamp = cm.InsTs;
|
||||
unsentPacket.SenderPersonOid = cm.SenderPersonOid;
|
||||
unsentPacket.Tenant = SoapConnectionManager.getUser().getTenant();
|
||||
unsentPacket.IsDelivered = cm.IsDelivered;
|
||||
unsentPacket.MessageId = cm.MessageId;
|
||||
|
||||
BeWoLog.writeToLogFile("Verschicke Nachricht, deren Response verloren gegangen ist. ("+unsentPacket.MessageId+") (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)" + unsentPacket.toString());
|
||||
SocketManager.sendMessage(unsentPacket);
|
||||
|
||||
try {
|
||||
Thread.sleep(75);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Result ist null. Konversion von Json zu Objekten ist gescheitert. (JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener->onRequestSuccess)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void reconnectWithServer(boolean isConnected, final Context context) {
|
||||
Log.e("UTIL", isConnected ? "Ist mit dem Internet/WLAN verbunden" : "Ist mit keinem Netzwerk verbunden");
|
||||
|
||||
if(isConnected) {
|
||||
try {
|
||||
BeWoLog.writeToLogFile("Setze Socket zurück.(reconnectWithServer)");
|
||||
// SocketManager.shutDownConnectionToServer("reconnectWithServer");
|
||||
|
||||
BeWoLog.writeToLogFile("Setze LoginCallback des Sockets. (reconnectWithServer)");
|
||||
SocketManager.loginCallback = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Verschicke nicht verschickte Nachrichten...");
|
||||
BeWoLog.writeToLogFile("Verschicke nicht verschickte Nachrichten. (reconnectWithServer)");
|
||||
sendUnsentMessages(context);
|
||||
|
||||
sendStatusRequest();
|
||||
|
||||
// TODO: Nachrichten herunterladen, sofern man sich in der ChatActivity befindet
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
BeWoLog.writeToLogFile("Verbinde mit dem Socket. (reconnectWithServer)");
|
||||
SocketManager.connectToServer("BeWoApplication -> reconnectWithServer");
|
||||
|
||||
Log.i("RECONNECT_WITH_SERVER", "connectToServer aufgerufen...");
|
||||
}
|
||||
catch(Exception es) {
|
||||
Log.e("RECONNECT_WITH_SERVER", "Ausnahme beim Login nach Reconnect");
|
||||
BeWoLog.writeToLogFile("Ausnahme beim Login nach Reconnect. (reconnectWithServer)");
|
||||
es.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendUnsentMessages(final Context context) {
|
||||
Thread thread = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
BeWoLog.writeToLogFile("Lade nicht verschickte Nachrichten aus der Datenbank zum verschicken.");
|
||||
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(context);
|
||||
|
||||
ArrayList<ChatMessage> unsentMessages = databaseHandler.getUnsentChatMessages();
|
||||
ArrayList<ChatMessage> messagesWithoutResponse = new ArrayList<>();
|
||||
|
||||
if(unsentMessages.size() > 0) {
|
||||
BeWoLog.writeToLogFile("Habe " + unsentMessages.size() + " Nachrichten gefunden.");
|
||||
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Habe keine nicht verschickten Nachrichten gefunden.");
|
||||
}
|
||||
|
||||
for(ChatMessage cm : unsentMessages) {
|
||||
if (cm.SendDate == null) {
|
||||
final Packet unsentPacket = new Packet();
|
||||
|
||||
unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
|
||||
unsentPacket.ChatMessage = cm.ChatText;
|
||||
unsentPacket.ChatName = SoapConnectionManager.getUser().getFullName();
|
||||
unsentPacket.RecipientPersonOid = cm.RecipientPersonOid;
|
||||
unsentPacket.ClientseitigeOid = cm.Id;
|
||||
unsentPacket.MessageTimeStamp = cm.InsTs;
|
||||
unsentPacket.SenderPersonOid = cm.SenderPersonOid;
|
||||
unsentPacket.Tenant = SoapConnectionManager.getUser().getTenant();
|
||||
unsentPacket.IsDelivered = cm.IsDelivered;
|
||||
unsentPacket.MessageId = cm.MessageId;
|
||||
|
||||
BeWoLog.writeToLogFile("Verschicke Nachricht("+unsentPacket.ChatMessage+") mit MessageId (" + unsentPacket.MessageId + ") ");
|
||||
SocketManager.sendMessage(unsentPacket);
|
||||
Thread.sleep(75);
|
||||
} else {
|
||||
messagesWithoutResponse.add(cm);
|
||||
}
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile("Habe " + messagesWithoutResponse.size() + " Nachrichten gefunden, deren Message-Response verloren gegangen ist.");
|
||||
|
||||
String pExceptions = "";
|
||||
for(int i = 0; i < messagesWithoutResponse.size(); i++) {
|
||||
pExceptions += messagesWithoutResponse.get(i).MessageId;
|
||||
|
||||
if(i != (messagesWithoutResponse.size() - 1)) {
|
||||
pExceptions += ";";
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("messageIds", pExceptions, String.class));
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.CHECK_MESSAGE_IDS, propertyInfos);
|
||||
spiceManager.execute(request, new JsonSoapPrimitveCheckingUndeliveredButSentMessagesListener());
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
thread.start();
|
||||
}
|
||||
|
||||
public static void sendStatusRequest() {
|
||||
final Packet requestPacket = new Packet();
|
||||
|
||||
requestPacket.ChatDataIdentifier = DataIdentifier.STATUS_REQUEST;
|
||||
requestPacket.ChatName = SoapConnectionManager.getUser().getFullName();
|
||||
requestPacket.SenderPersonOid = SoapConnectionManager.getUser().getPersonOid().intValue();
|
||||
requestPacket.Tenant = SoapConnectionManager.getUser().getTenant();
|
||||
|
||||
SocketManager.sendMessage(requestPacket);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package beyondsoft.bewomitarbeiterapp;
|
||||
import android.app.NotificationManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Canvas;
|
||||
@@ -15,12 +16,12 @@ import android.graphics.RectF;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AbsListView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
@@ -40,12 +41,14 @@ import com.octo.android.robospice.request.listener.RequestListener;
|
||||
import org.ksoap2.serialization.PropertyInfo;
|
||||
import org.ksoap2.serialization.SoapPrimitive;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import Database.DatabaseHandler;
|
||||
import entities.ChatEntity;
|
||||
@@ -56,10 +59,13 @@ import soapConnection.Packet;
|
||||
|
||||
import soapConnection.SoapCalls;
|
||||
import soapConnection.SoapConnectionManager;
|
||||
import tcpConnection.LoginCallback;
|
||||
import tcpConnection.SocketManager;
|
||||
import tcpConnection.UIHandler;
|
||||
import util.BeWoLog;
|
||||
import util.ChatMessageDeserializer;
|
||||
import util.ConnectivityReceiver;
|
||||
import util.SecurityUtils;
|
||||
import util.Util;
|
||||
|
||||
/**
|
||||
@@ -81,6 +87,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
protected String teamMemberNames;
|
||||
protected boolean isTeam;
|
||||
protected boolean isEmployee;
|
||||
protected byte[] image;
|
||||
|
||||
private SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class);
|
||||
|
||||
@@ -90,15 +97,20 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
|
||||
private final static String LOGTAG = "CHAT_ACTIVITY";
|
||||
|
||||
|
||||
@Override
|
||||
public void onNetworkConnectionChanged(boolean isConnected) {
|
||||
Util.reconnectWithServer(isConnected, ChatActivity.this);
|
||||
BeWoLog.writeToLogFile("onNetworkConnectionChanged in ChatActivity aufgerufen. Bin "+ (isConnected ? "online" : "offline"));
|
||||
|
||||
BeWoChatApplication.reconnectWithServer(isConnected, ChatActivity.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
BeWoLog.writeToLogFile("Erzeuge die ChatActivity");
|
||||
|
||||
setContentView(R.layout.chat);
|
||||
|
||||
ActionBar action = getSupportActionBar();
|
||||
@@ -118,39 +130,42 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
|
||||
listView = (ListView)findViewById(R.id.list_msg);
|
||||
|
||||
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
|
||||
|
||||
@Override
|
||||
public void onScrollStateChanged(AbsListView view, int scrollState) {
|
||||
if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
|
||||
Log.i("ON_SCROLL_STATE_CHANGED", "Berühre das Ende");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
|
||||
Log.i("ON_SCROLL", "Scrolle... firstVisibleItem: " + firstVisibleItem + "; visibleItemCount: " + visibleItemCount + "; totalItemCount" + totalItemCount);
|
||||
}
|
||||
});
|
||||
// listView.setOnScrollListener(new AbsListView.OnScrollListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void onScrollStateChanged(AbsListView view, int scrollState) {
|
||||
// if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
|
||||
// Log.i("ON_SCROLL_STATE_CHANGED", "Berühre das Ende");
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
|
||||
// Log.i("ON_SCROLL", "Scrolle... firstVisibleItem: " + firstVisibleItem + "; visibleItemCount: " + visibleItemCount + "; totalItemCount" + totalItemCount);
|
||||
// }
|
||||
// });
|
||||
|
||||
Bundle zielkorb = getIntent().getExtras();
|
||||
recipientName = zielkorb.getString("Name");
|
||||
recipientPersonOid = zielkorb.getInt("RecipientOid");
|
||||
byte[] bildArray = zielkorb.getByteArray("Bild");
|
||||
image = zielkorb.getByteArray("Bild");
|
||||
isTeam = zielkorb.getBoolean("IsTeam");
|
||||
teamMemberOids = zielkorb.getString("TeamMemberOids");
|
||||
teamMemberNames = zielkorb.getString("TeamMemberNames");
|
||||
isEmployee = zielkorb.getBoolean("IsEmployee");
|
||||
|
||||
ReloadChatView(recipientName, recipientPersonOid, bildArray, isTeam, teamMemberOids, teamMemberNames, isEmployee);
|
||||
Log.i("EXTRAS_KONTROLLE", "Empfänger: " + recipientName + "; " + recipientPersonOid);
|
||||
|
||||
ReloadChatView(recipientName, recipientPersonOid, image, isTeam, teamMemberOids, teamMemberNames, isEmployee);
|
||||
}
|
||||
|
||||
private void ReloadChatView(String contactName, int recipientOid, byte[] contactImage, boolean pIsTeam, String pTeamMemberOids, String pTeamMemberNames, boolean pIsEmployee) {
|
||||
private void ReloadChatView(final String contactName, final int recipientOid, final byte[] contactImage, boolean pIsTeam, String pTeamMemberOids, String pTeamMemberNames, boolean pIsEmployee) {
|
||||
chatMessages = new ArrayList<>();
|
||||
|
||||
recipientPersonOid = recipientOid;
|
||||
recipientName = contactName;
|
||||
isTeam = pIsTeam;
|
||||
Log.i("CHAT", "IsTeam: " + isTeam);
|
||||
teamMemberOids = pTeamMemberOids;
|
||||
teamMemberNames = pTeamMemberNames;
|
||||
isEmployee = pIsEmployee;
|
||||
@@ -176,19 +191,23 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
|
||||
adapter = new MessageAdapter(this, R.layout.item_chat_left, chatMessages);
|
||||
adapter.sort(DATE_COMPARATOR);
|
||||
adapter.notifyDataSetChanged();
|
||||
|
||||
listView.setAdapter(adapter);
|
||||
|
||||
chatUIHandler = new UIHandler() {
|
||||
@Override
|
||||
public void updateUserInterface(final Packet chatPacket) {
|
||||
try {
|
||||
Log.i(LOGTAG, "Identifier: " + chatPacket.ChatDataIdentifier.name());
|
||||
|
||||
switch(chatPacket.ChatDataIdentifier) {
|
||||
case MESSAGE:
|
||||
listView.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if(chatPacket.SenderPersonOid == recipientPersonOid && BeWoChatApplication.isActivityVisible()) {
|
||||
chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false));
|
||||
chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false, chatPacket.MessageId));
|
||||
adapter.sort(DATE_COMPARATOR);
|
||||
adapter.notifyDataSetChanged();
|
||||
} else {
|
||||
@@ -198,7 +217,29 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case MESSAGE_RESPONSE:
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for(ChatMessage cm : chatMessages) {
|
||||
Log.i("RESPONSE", "lokale Id: " + cm.Id);
|
||||
if(cm.Id == chatPacket.ClientseitigeOid) {
|
||||
cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
|
||||
Log.i("RESPONSE", "COid: " + cm.Id + "; Text: " + cm.ChatText + "; " + cm.ServerseitigeOid);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
adapter.sort(DATE_COMPARATOR);
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
|
||||
break;
|
||||
|
||||
case STATUS_NOTIFICATION_LOGIN:
|
||||
BeWoLog.writeToLogFile("Benutzer " + chatPacket.ChatName + " ist jetzt online. (ChatActivity)");
|
||||
if(chatPacket.SenderPersonOid == recipientPersonOid) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
@@ -211,6 +252,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
|
||||
break;
|
||||
case STATUS_NOTIFICATION_LOGOUT:
|
||||
BeWoLog.writeToLogFile("Benutzer " + chatPacket.ChatName + " ist jetzt offline. (ChatActivity)");
|
||||
if(chatPacket.SenderPersonOid == recipientPersonOid) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
@@ -227,7 +269,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
@Override
|
||||
public void run() {
|
||||
if(isTeam && chatPacket.RecipientPersonOid == recipientPersonOid && BeWoChatApplication.isActivityVisible()) {
|
||||
chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true));
|
||||
chatMessages.add(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true, chatPacket.MessageId));
|
||||
adapter.sort(DATE_COMPARATOR);
|
||||
adapter.notifyDataSetChanged();
|
||||
} else {
|
||||
@@ -252,9 +294,13 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
Calendar c = Calendar.getInstance();
|
||||
Date now = c.getTime();
|
||||
|
||||
String messageId = UUID.randomUUID().toString();
|
||||
|
||||
Packet packet = new Packet();
|
||||
packet.ChatMessage = text.getText().toString();
|
||||
packet.ChatDataIdentifier = isTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
|
||||
packet.IsEmployee = SoapConnectionManager.getUser().getIsEmployee();
|
||||
packet.MessageId = messageId;
|
||||
|
||||
if(isTeam) {
|
||||
packet.ChatName = recipientName;
|
||||
@@ -263,14 +309,17 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
packet.RecipientPersonOid = recipientPersonOid;
|
||||
packet.MessageTimeStamp = now;
|
||||
|
||||
packet.Tenant = SoapConnectionManager.User.getTenant();
|
||||
packet.Tenant = SoapConnectionManager.getUser().getTenant();
|
||||
|
||||
final ChatMessage message = new ChatMessage(packet.SenderPersonOid, packet.RecipientPersonOid, packet.MessageTimeStamp, packet.ChatMessage, false, 0, isTeam);
|
||||
final ChatMessage message = new ChatMessage(packet.SenderPersonOid, packet.RecipientPersonOid, packet.MessageTimeStamp, packet.ChatMessage, false, 0, isTeam, messageId);
|
||||
|
||||
long coid = databaseHandler.addChatMessage(message);
|
||||
message.Id = Long.valueOf(coid).intValue();
|
||||
|
||||
packet.ClientseitigeOid = Long.valueOf(coid).intValue();
|
||||
|
||||
Log.i("PACKET_MESSAGE_ID", "MessageId: " + packet.MessageId);
|
||||
|
||||
SocketManager.sendMessage(packet);
|
||||
|
||||
listView.post(new Runnable() {
|
||||
@@ -289,7 +338,7 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
}
|
||||
});
|
||||
|
||||
ArrayList<Integer> test = isTeam ? databaseHandler.getExistingTeamChatMessageIds() : databaseHandler.getExistingChatMessageIds();
|
||||
ArrayList<String> test = isTeam ? databaseHandler.getExistingTeamChatMessageUUIDs() : databaseHandler.getExistingChatMessageUUIDs();
|
||||
|
||||
String pExceptions = "";
|
||||
for(int i = 0; i < test.size(); i++) {
|
||||
@@ -301,16 +350,53 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
}
|
||||
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pSenderPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pSenderPersonOid", SoapConnectionManager.getUser().getPersonOid(), Long.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pRecipientPersonOid", recipientPersonOid, Long.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pExceptions", pExceptions, String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pIsForTeam", isTeam, Boolean.class));
|
||||
|
||||
Log.i(LOGTAG, "IsTeam: " + isTeam);
|
||||
final JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_ALL_CHAT_MESSAGES, propertyInfos);
|
||||
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_ALL_CHAT_MESSAGES, propertyInfos);
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener());
|
||||
final LoginCallback corruptedSpiceCallback = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
BeWoLog.writeToLogFile("Callback bei erneutem Login auf dem Soap-Server wird ausgeführt. (ChatActivity)");
|
||||
|
||||
spiceManager.shouldStop();
|
||||
spiceManager.start(ChatActivity.this);
|
||||
|
||||
SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
//ReloadChatView(contactName, recipientOid, contactImage, isTeam, teamMemberOids, teamMemberNames, isEmployee);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// SocketManager.shutDownConnectionToServer("ChatActivity->corruptedSpiceCallback");
|
||||
SocketManager.connectToServer("ChatActivity -> corruptedSpiceCallback");
|
||||
}
|
||||
};
|
||||
|
||||
if(ConnectivityReceiver.isConnected()) {
|
||||
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
|
||||
BeWoLog.writeToLogFile("Lade alle Nachrichten für diesen Chat herunter. (ChatActivity)");
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener(corruptedSpiceCallback));
|
||||
} else {
|
||||
// SocketManager.shutDownConnectionToServer("ChatActivity->Letzter Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her");
|
||||
SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
BeWoLog.writeToLogFile("Lade alle Nachrichten für diesen Chat nach fehlgeschlagenem ersten Versuch herunter. (ChatActivity)");
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener(corruptedSpiceCallback));
|
||||
}
|
||||
};
|
||||
SocketManager.connectToServer("ChatActivity -> Letzter Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her");
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("App ist offline. (ChatActivity)");
|
||||
Toast.makeText(getApplicationContext(), "Offline. Keine Aktion möglich.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
NotificationManager mNotifyMgr = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
@@ -319,11 +405,15 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
if(SocketManager.notificationEntities.get(entity) != null) {
|
||||
mNotifyMgr.cancel(SocketManager.notificationEntities.get(entity).getNotificationId());
|
||||
Util.removeMessagesCount(entity);
|
||||
} else {
|
||||
Log.i("CHAT_ACTIVITY", "Keine Notification für diesen Chat vorhanden.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
BeWoLog.writeToLogFile("Resümiere mit der ChatActivity");
|
||||
|
||||
BeWoChatApplication.activityResumed();
|
||||
|
||||
SocketManager.uiHandler = chatUIHandler;
|
||||
@@ -335,18 +425,24 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
|
||||
@Override
|
||||
public void onStop(){
|
||||
BeWoLog.writeToLogFile("Stoppe die ChatActivity");
|
||||
|
||||
spiceManager.shouldStop();
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
BeWoLog.writeToLogFile("Pausiere die ChatActivity");
|
||||
|
||||
super.onPause();
|
||||
BeWoChatApplication.activityPaused();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
BeWoLog.writeToLogFile("Starte die ChatActivity");
|
||||
|
||||
super.onStart();
|
||||
spiceManager.start(this);
|
||||
}
|
||||
@@ -379,6 +475,12 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
KontaktChatActivity.setShouldReloadLatestMessages(true);
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
@@ -425,19 +527,70 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
|
||||
private final class JsonSoapPrimitiveRequestListener implements RequestListener<SoapPrimitive> {
|
||||
|
||||
public LoginCallback corruptedRequestCallback;
|
||||
|
||||
public JsonSoapPrimitiveRequestListener(LoginCallback corruptedRequestCallback) {
|
||||
this.corruptedRequestCallback = corruptedRequestCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist beim Herunterladen der Nachrichten passiert.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
|
||||
Log.e("GET_ALL_MESSAGES", "" + spiceException.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
|
||||
if(soapPrimitive == null) {
|
||||
Log.e(LOGTAG, "Der vom Server zurückgelieferte Wert ist NULL! (Laden sämtlicher Nachrichten)");
|
||||
BeWoLog.writeToLogFile("Laden der Nachrichten ist fehlgeschlagen. Führe erneuten Login auf dem Soap-Server durch. (ChatActivity)");
|
||||
|
||||
try {
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
|
||||
SharedPreferences settings = getSharedPreferences(Util.PREFS_NAME, 0);
|
||||
String savedTenant = settings.getString(Util.PREFS_TENANT_KEY, null);
|
||||
String savedUsername = settings.getString(Util.PREFS_USERNAME_KEY, null);
|
||||
String savedPassword = settings.getString(Util.PREFS_PASSWORD, null);
|
||||
|
||||
byte[] tenantByteArray = Base64.decode(savedTenant, Base64.DEFAULT);
|
||||
ByteArrayInputStream tenantStream = new ByteArrayInputStream(tenantByteArray);
|
||||
|
||||
byte[] usernameByteArray = Base64.decode(savedUsername, Base64.DEFAULT);
|
||||
ByteArrayInputStream usernameStream = new ByteArrayInputStream(usernameByteArray);
|
||||
|
||||
byte[] passwordByteArray = Base64.decode(savedPassword, Base64.DEFAULT);
|
||||
ByteArrayInputStream passwordStream = new ByteArrayInputStream(passwordByteArray);
|
||||
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pTenant", SecurityUtils.decrypt(tenantStream).toString(), String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pUsername", SecurityUtils.decrypt(usernameStream).toString(), String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pPassword", SecurityUtils.decrypt(passwordStream).toString(), String.class));
|
||||
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.LOGIN_CALL, propertyInfos);
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveReLoginRequestListener());
|
||||
} catch(Exception e) {
|
||||
BeWoLog.writeToLogFile("Der erneute Login ist fehlgeschlagen. (ChatActivity)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile("Das Laden der Nachrichten war erfolgreich. (ChatActivity)");
|
||||
|
||||
BeWoChatApplication.lastOnlineTS = Calendar.getInstance().getTime();
|
||||
|
||||
GsonBuilder builder = new GsonBuilder();
|
||||
builder.registerTypeAdapter(ChatMessage.class, new ChatMessageDeserializer());
|
||||
|
||||
@@ -458,12 +611,74 @@ public class ChatActivity extends ActionBarActivity implements ConnectivityRecei
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private final class JsonSoapPrimitiveReLoginRequestListener implements RequestListener<SoapPrimitive> {
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
BeWoLog.writeToLogFile("Der erneute Login ist fehlgeschlagen. (ChatActivity->ReLoginRequestListener->onRequestFailure)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(ChatActivity.this, "Ein Fehler ist beim erneuten Login auftegreten.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
|
||||
Log.e("GET_ALL_MESSAGES", "Erneuter Login ist gescheitert: " + spiceException.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
if(soapPrimitive == null) {
|
||||
BeWoLog.writeToLogFile("Der Versuch eines erneuten Logins ist gescheitert. Das vom Soap-Server zurückgelieferte Objekt ist null! (ChatActivity->ReLoginRequestListener->onRequestSuccess)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(ChatActivity.this, "Ein fataler Fehler ist aufgetreten. Bitte loggen Sie sich erneut an.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
String abc = soapPrimitive.toString();
|
||||
|
||||
BeWoLog.writeToLogFile("Erneuter Login war erfolgreich. (ChatActivity->ReLoginRequestListener->onRequestSuccess)");
|
||||
|
||||
Bundle zielkorb = new Bundle();
|
||||
zielkorb.putString("Name", recipientName);
|
||||
zielkorb.putInt("RecipientOid", recipientPersonOid);
|
||||
zielkorb.putByteArray("Bild", image);
|
||||
zielkorb.putBoolean("IsTeam", isTeam);
|
||||
zielkorb.putString("TeamMemberOids", teamMemberOids);
|
||||
zielkorb.putString("TeamMemberNames", teamMemberNames);
|
||||
zielkorb.putBoolean("IsEmployee", isEmployee);
|
||||
|
||||
if(abc != null) {
|
||||
if(abc.contains(";")) {
|
||||
Intent chatActivity = new Intent(getApplicationContext(), ChatActivity.class);
|
||||
chatActivity.putExtras(zielkorb);
|
||||
startActivity(chatActivity);
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Der erneute Login ist fehlgeschlagen. Die Credentials waren inkorrekt. (ChatActivity->ReLoginRequestListener->onRequestSuccess)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static final Comparator<ChatMessage> DATE_COMPARATOR = new Comparator<ChatMessage>() {
|
||||
@Override
|
||||
public int compare(ChatMessage lhs, ChatMessage rhs) {
|
||||
return lhs.InsTs.getTime() > rhs.InsTs.getTime() ? 0 : 1;
|
||||
return lhs.compareTo(rhs);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -75,17 +75,13 @@ public class KontaktAdapter extends ArrayAdapter<ContactListItem> {
|
||||
ContactListItem cli = values.get(position);
|
||||
|
||||
int bildId = R.drawable.mitarbeiter_avatar;
|
||||
String blah = "Mitarbeiter";
|
||||
|
||||
if(cli.isTeam) {
|
||||
bildId = R.drawable.mitarbeiter_team_avatar;
|
||||
blah = "Team";
|
||||
} else if(!cli.getIsEmployee()) {
|
||||
bildId = R.drawable.klient_avatar;
|
||||
blah = "Klient";
|
||||
}
|
||||
|
||||
Log.i("KONTAKT_ADAPTER", "Kontakt hat KEIN Bild. Benutze Standardbild. Kontakt ist " + blah + "; Id: " + bildId);
|
||||
Bitmap bitmap = decodeSampledBitmapFromResource(inflater.getContext().getResources(), bildId, 100, 100);
|
||||
|
||||
imageView.setImageBitmap(ImageConverter.getRoundedCornerBitmap(bitmap, bitmap.getWidth() / 2));
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package beyondsoft.bewomitarbeiterapp;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@@ -25,12 +27,16 @@ import com.octo.android.robospice.request.listener.RequestListener;
|
||||
import org.ksoap2.serialization.PropertyInfo;
|
||||
import org.ksoap2.serialization.SoapPrimitive;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import Database.DatabaseHandler;
|
||||
import entities.ChatEntity;
|
||||
@@ -41,17 +47,21 @@ import soapConnection.OnRequestSuccessCallback;
|
||||
import soapConnection.Packet;
|
||||
import soapConnection.SoapCalls;
|
||||
import soapConnection.SoapConnectionManager;
|
||||
import tcpConnection.LoginCallback;
|
||||
import tcpConnection.SocketManager;
|
||||
import tcpConnection.UIHandler;
|
||||
import util.BeWoLog;
|
||||
import util.ChatMessageDeserializer;
|
||||
import util.ConnectivityReceiver;
|
||||
import util.SecurityUtils;
|
||||
import util.Util;
|
||||
|
||||
/**
|
||||
* Created by bib on 02.05.2016.
|
||||
*/
|
||||
public class KontaktChatActivity extends ActionBarActivity implements ConnectivityReceiver.ConnectivityReceiverListener, SwipeRefreshLayout.OnRefreshListener {
|
||||
|
||||
private static boolean isDownloadOfContacsInProgress = false;
|
||||
private static boolean isDownloadOfNewestMessagesInProgress = false;
|
||||
private static final String LOGTAG = "KONTAKT_CHAT_ACTIVITY";
|
||||
|
||||
private SpiceManager spiceManager = new SpiceManager(UncachedSpiceService.class);
|
||||
@@ -59,18 +69,28 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
|
||||
public ListView listView;
|
||||
|
||||
private static boolean shouldReloadLatestMessages = false;
|
||||
public static void setShouldReloadLatestMessages(boolean pShouldReloadLatestMessages) {
|
||||
shouldReloadLatestMessages = pShouldReloadLatestMessages;
|
||||
}
|
||||
|
||||
private SwipeRefreshLayout swipeRefreshLayout;
|
||||
|
||||
ArrayList<ContactListItem> contactList = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void onNetworkConnectionChanged(boolean isConnected) {
|
||||
Util.reconnectWithServer(isConnected, KontaktChatActivity.this);
|
||||
BeWoChatApplication.reconnectWithServer(isConnected, KontaktChatActivity.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
SocketManager.initialLoginCallback = null;
|
||||
|
||||
BeWoLog.writeToLogFile("Erzeuge die KontaktChatActivity");
|
||||
|
||||
setContentView(R.layout.kontakt_list_chat);
|
||||
|
||||
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
|
||||
@@ -129,30 +149,131 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
Log.i(LOGTAG, "Führe onRefresh durch");
|
||||
updateContactList();
|
||||
}
|
||||
|
||||
private void updateContactList() {
|
||||
if(isDownloadOfContacsInProgress) {
|
||||
BeWoLog.writeToLogFile("Download der Kontakte wird von anderer Stelle versucht. (KontaktChatActivity)");
|
||||
return;
|
||||
}
|
||||
|
||||
isDownloadOfContacsInProgress = true;
|
||||
|
||||
Timer timer = new Timer();
|
||||
timer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
isDownloadOfContacsInProgress = false;
|
||||
BeWoLog.writeToLogFile("isDownloadOfContacsInProgress wird nach 10 Sekunden zurückgesetzt.");
|
||||
}
|
||||
}, 10*1000);
|
||||
|
||||
BeWoLog.writeToLogFile("Lade Kontakte (updateContactList)");
|
||||
swipeRefreshLayout.setRefreshing(true);
|
||||
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class));
|
||||
if(SoapConnectionManager.getUser() == null) {
|
||||
BeWoLog.writeToLogFile("User ist null. (updateContactList)");
|
||||
Log.i(LOGTAG, "Angemeldeter User ist null");
|
||||
} else {
|
||||
Log.i(LOGTAG, "UserPersonOid: " + SoapConnectionManager.getUser().getPersonOid());
|
||||
}
|
||||
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos);
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
Util.sendStatusRequest();
|
||||
if(SoapConnectionManager.getUser().getPersonOid() == null) {
|
||||
Log.i(LOGTAG, "UserPersonOid ist null");
|
||||
BeWoLog.writeToLogFile("UserPersonOid ist null (updateContactList)");
|
||||
}
|
||||
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pPersonOid", SoapConnectionManager.getUser().getPersonOid(), Long.class));
|
||||
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pRecipientPersonOid", SoapConnectionManager.User.getPersonOid(), Long.class));
|
||||
final JsonSoapPrimitiveRequest getContactsRequest = new JsonSoapPrimitiveRequest(SoapCalls.GET_CONTACTS_FOR_PERSON, propertyInfos);
|
||||
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest("GetNewestMessages", propertyInfos);
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListenerForNewestMessages());
|
||||
if(ConnectivityReceiver.isConnected()) {
|
||||
BeWoLog.writeToLogFile("App ist mit dem Internet verbunden (updateContactList)");
|
||||
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
|
||||
BeWoLog.writeToLogFile("Jetzt - letzter Serverkontakt ist kleiner als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten. (updateContactList)");
|
||||
spiceManager.execute(getContactsRequest, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
BeWoChatApplication.sendStatusRequest();
|
||||
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pRecipientPersonOid", SoapConnectionManager.getUser().getPersonOid(), Long.class));
|
||||
|
||||
final JsonSoapPrimitiveRequest getNewestMessagesRequest = new JsonSoapPrimitiveRequest("GetNewestMessages", propertyInfos);
|
||||
|
||||
if(ConnectivityReceiver.isConnected()) {
|
||||
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
|
||||
spiceManager.execute(getNewestMessagesRequest, new JsonSoapPrimitiveRequestListenerForNewestMessages());
|
||||
}
|
||||
} else {
|
||||
// SocketManager.shutDownConnectionToServer("KontaktChatAcvitity->Letzer Kontakt ist weniger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her, aber die Internetverbindung war erneut weg");
|
||||
SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
spiceManager.execute(getNewestMessagesRequest, new JsonSoapPrimitiveRequestListenerForNewestMessages());
|
||||
}
|
||||
};
|
||||
|
||||
SocketManager.connectToServer("KontaktChatActivity -> Intervall nicht erreicht");
|
||||
}
|
||||
}
|
||||
}));
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her. Starte Verbindung zum SocketServer neu. (updateContactlist)");
|
||||
|
||||
// SocketManager.shutDownConnectionToServer("KontaktChatAcitivty->Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMinutes() + " Minuten her");
|
||||
SocketManager.loginCallback2 = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
spiceManager.execute(getContactsRequest, new JsonSoapPrimitiveRequestListener(new OnRequestSuccessCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
BeWoLog.writeToLogFile("LoginCallback mit Abruf der neuesten Nachrichten und den Kontakten wird aufgerufen. (updateContactlist)");
|
||||
|
||||
BeWoChatApplication.sendStatusRequest();
|
||||
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pRecipientPersonOid", SoapConnectionManager.getUser().getPersonOid(), Long.class));
|
||||
|
||||
final JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest("GetNewestMessages", propertyInfos);
|
||||
|
||||
if(ConnectivityReceiver.isConnected()) {
|
||||
BeWoLog.writeToLogFile("LoginCallback ist mit dem Internet verbunden. (updateContactlist)");
|
||||
if((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
|
||||
BeWoLog.writeToLogFile("LoginCallback ");
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListenerForNewestMessages());
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("LoginCallback ist nicht mit dem Internet verbunden. (updateContactlist)");
|
||||
// SocketManager.shutDownConnectionToServer("KontaktChatActivity->");
|
||||
SocketManager.loginCallbackAfterConnectionLost = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
BeWoLog.writeToLogFile("loginCallbackAfterConnectionLost im normalen LoginCallback aufgerufen, weil offline. (updateContactlist)");
|
||||
spiceManager.execute(request, new JsonSoapPrimitiveRequestListenerForNewestMessages());
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
SocketManager.connectToServer("KontaktChatActivity -> Intervall überschritten");
|
||||
}
|
||||
}));
|
||||
} else {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
isDownloadOfContacsInProgress = false;
|
||||
BeWoLog.writeToLogFile("Offline. (KontaktChatActivity)");
|
||||
Toast.makeText(getApplicationContext(), "Offline. Keine Aktion möglich.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
public UIHandler kontaktChatActivityUIHandler = new UIHandler() {
|
||||
@@ -315,6 +436,10 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
|
||||
BeWoLog.writeToLogFile("Resümiere mit der KontaktChatActivity");
|
||||
|
||||
BeWoChatApplication.activityResumed();
|
||||
|
||||
SocketManager.uiHandler = kontaktChatActivityUIHandler;
|
||||
@@ -331,35 +456,48 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
if(shouldReloadLatestMessages) {
|
||||
BeWoLog.writeToLogFile("Lade die Kontaktliste neu beim Resümieren");
|
||||
updateContactList();
|
||||
shouldReloadLatestMessages = false;
|
||||
}
|
||||
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop(){
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
|
||||
spiceManager.shouldStop();
|
||||
|
||||
BeWoLog.writeToLogFile("Stoppe die KontaktChatActivity");
|
||||
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
|
||||
BeWoLog.writeToLogFile("Pausiere die KontaktChatActivity");
|
||||
|
||||
super.onPause();
|
||||
BeWoChatApplication.activityPaused();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
|
||||
BeWoLog.writeToLogFile("Starte die KontaktChatActivity");
|
||||
|
||||
super.onStart();
|
||||
spiceManager.start(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
// SocketManager.logout();
|
||||
//
|
||||
// Intent intent = new Intent(KontaktChatActivity.this, LoginActivity.class);
|
||||
// KontaktChatActivity.this.startActivity(intent);
|
||||
|
||||
Intent i = new Intent();
|
||||
i.setAction(Intent.ACTION_MAIN);
|
||||
i.addCategory(Intent.CATEGORY_HOME);
|
||||
@@ -372,16 +510,69 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der neuesten Nachrichten aufgetreten.", Toast.LENGTH_SHORT).show();
|
||||
BeWoLog.writeToLogFile("Ein Fehler ist beim Laden der neuesten Nachrichten aufgetreten (SoapListenerForNewestMessages->onRequestFailure)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der neuesten Nachrichten aufgetreten.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
});
|
||||
|
||||
if(soapPrimitive == null) {
|
||||
BeWoLog.writeToLogFile("Antwort vom Server war null. Ein erneuter Login erfolgt. (SoapListenerForNewestMessages->onRequestSuccess)");
|
||||
Log.e("KONTAKT_CHAT_ACTIVITY", "Der vom Server zurückgelieferte Wert ist NULL! (Laden der neuesten Nachrichten)");
|
||||
|
||||
try {
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
|
||||
SharedPreferences settings = getSharedPreferences(Util.PREFS_NAME, 0);
|
||||
String savedTenant = settings.getString(Util.PREFS_TENANT_KEY, null);
|
||||
String savedUsername = settings.getString(Util.PREFS_USERNAME_KEY, null);
|
||||
String savedPassword = settings.getString(Util.PREFS_PASSWORD, null);
|
||||
|
||||
byte[] tenantByteArray = Base64.decode(savedTenant, Base64.DEFAULT);
|
||||
ByteArrayInputStream tenantStream = new ByteArrayInputStream(tenantByteArray);
|
||||
|
||||
byte[] usernameByteArray = Base64.decode(savedUsername, Base64.DEFAULT);
|
||||
ByteArrayInputStream usernameStream = new ByteArrayInputStream(usernameByteArray);
|
||||
|
||||
byte[] passwordByteArray = Base64.decode(savedPassword, Base64.DEFAULT);
|
||||
ByteArrayInputStream passwordStream = new ByteArrayInputStream(passwordByteArray);
|
||||
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pTenant", SecurityUtils.decrypt(tenantStream).toString(), String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pUsername", SecurityUtils.decrypt(usernameStream).toString(), String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pPassword", SecurityUtils.decrypt(passwordStream).toString(), String.class));
|
||||
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.LOGIN_CALL, propertyInfos);
|
||||
|
||||
BeWoLog.writeToLogFile("Lade neueste Nachrichten erneut herunter. (SoapListenerForNewestMessages->onRequestSuccess)");
|
||||
spiceManager.execute(request, new KontaktChatActivity.JsonSoapPrimitiveReLoginRequestListener());
|
||||
} catch(Exception e) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile("Herunterladen der neuesten Nachrichten war erfolgreich. (SoapListenerForNewestMessages->onRequestSuccess)");
|
||||
|
||||
GsonBuilder builder = new GsonBuilder();
|
||||
builder.registerTypeAdapter(ChatMessage.class, new ChatMessageDeserializer());
|
||||
|
||||
@@ -396,9 +587,9 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
if(adapter != null) {
|
||||
for(ContactListItem item : adapter.values) {
|
||||
|
||||
if(item.getPersonOid() == message.SenderPersonOid && !item.isTeam && !message.IsTeam || item.isTeam && message.IsTeam && item.getPersonOid() == message.RecipientPersonOid) {
|
||||
if((item.getPersonOid() == message.SenderPersonOid ||item.getPersonOid() == message.RecipientPersonOid) && !item.isTeam && !message.IsTeam || item.isTeam && message.IsTeam && item.getPersonOid() == message.RecipientPersonOid) {
|
||||
item.setMessagePreview(message.ChatText);
|
||||
item.setIsNewMessage2Preview(!databaseHandler.GetIsMessageInDatabase(message.ServerseitigeOid));
|
||||
item.setIsNewMessage2Preview(!databaseHandler.GetIsMessageInDatabase(message.MessageId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,16 +609,72 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der Kontaktliste aufgetreten.", Toast.LENGTH_SHORT).show();
|
||||
BeWoLog.writeToLogFile("Laden der Kontakte ist fehlgeschlagen. (JsonSoapPrimitiveRequestListener->onRequestFailure)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(KontaktChatActivity.this, "Ein Fehler ist beim laden der Kontaktliste aufgetreten.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
if(soapPrimitive == null) {
|
||||
BeWoLog.writeToLogFile("Antwort vom Server war null. Ein erneuter Login erfolgt. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
}
|
||||
});
|
||||
|
||||
Log.e(LOGTAG, "Der vom Server zurückgelieferte Wert ist NULL! (Laden der Kontakte)");
|
||||
|
||||
//TODO: wie im Chat
|
||||
try {
|
||||
ArrayList<PropertyInfo> propertyInfos = new ArrayList<>();
|
||||
|
||||
SharedPreferences settings = getSharedPreferences(Util.PREFS_NAME, 0);
|
||||
String savedTenant = settings.getString(Util.PREFS_TENANT_KEY, null);
|
||||
String savedUsername = settings.getString(Util.PREFS_USERNAME_KEY, null);
|
||||
String savedPassword = settings.getString(Util.PREFS_PASSWORD, null);
|
||||
|
||||
byte[] tenantByteArray = Base64.decode(savedTenant, Base64.DEFAULT);
|
||||
ByteArrayInputStream tenantStream = new ByteArrayInputStream(tenantByteArray);
|
||||
|
||||
byte[] usernameByteArray = Base64.decode(savedUsername, Base64.DEFAULT);
|
||||
ByteArrayInputStream usernameStream = new ByteArrayInputStream(usernameByteArray);
|
||||
|
||||
byte[] passwordByteArray = Base64.decode(savedPassword, Base64.DEFAULT);
|
||||
ByteArrayInputStream passwordStream = new ByteArrayInputStream(passwordByteArray);
|
||||
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pTenant", SecurityUtils.decrypt(tenantStream).toString(), String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pUsername", SecurityUtils.decrypt(usernameStream).toString(), String.class));
|
||||
propertyInfos.add(SoapConnectionManager.BuildProperty("pPassword", SecurityUtils.decrypt(passwordStream).toString(), String.class));
|
||||
|
||||
JsonSoapPrimitiveRequest request = new JsonSoapPrimitiveRequest(SoapCalls.LOGIN_CALL, propertyInfos);
|
||||
|
||||
BeWoLog.writeToLogFile("Lade Kontakte erneut herunter. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
spiceManager.execute(request, new KontaktChatActivity.JsonSoapPrimitiveReLoginRequestListener());
|
||||
} catch(Exception e) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile("Laden der Kontakte war erfolgreich. (JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
|
||||
isDownloadOfContacsInProgress = false;
|
||||
|
||||
Gson gson = new GsonBuilder().create();
|
||||
|
||||
Type listType = new TypeToken<ArrayList<ChatPerson>>(){}.getType();
|
||||
@@ -442,19 +689,12 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
oid2VersionList.put(new ChatEntity(item.getPersonOid(), item.isTeam, item.getIsEmployee()), item.getVersion());
|
||||
}
|
||||
|
||||
for(Map.Entry<ChatEntity, Integer> entry : oid2VersionList.entrySet()) {
|
||||
ChatEntity key = entry.getKey();
|
||||
Log.i(LOGTAG, "\nOid: " + key.getOid() + "\nIsTeam: " + key.getIsTeam() + "\nIsEmployee: " + key.getIsEmployee());
|
||||
}
|
||||
|
||||
for(ChatPerson cp : result) {
|
||||
Log.i(LOGTAG, cp.Name + " " + cp.IsEmployee);
|
||||
ContactListItem contact = new ContactListItem(cp.Name, cp.Oid, cp.IsTeam, cp.TeamMemberOids, cp.TeamMemberNames, cp.Version, cp.IsEmployee);
|
||||
|
||||
ChatEntity cliEntity = new ChatEntity(cp.Oid, cp.IsTeam, cp.IsEmployee);
|
||||
|
||||
if(!oid2VersionList.containsKey(cliEntity)) {
|
||||
Log.i(LOGTAG, "Nicht in der Klientenliste enthalten");
|
||||
databaseHandler.addContact(contact);
|
||||
} else if(oid2VersionList.get(cliEntity) < cp.Version) {
|
||||
|
||||
@@ -495,4 +735,55 @@ public class KontaktChatActivity extends ActionBarActivity implements Connectivi
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final class JsonSoapPrimitiveReLoginRequestListener implements RequestListener<SoapPrimitive> {
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
swipeRefreshLayout.setRefreshing(false);
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Die Serveranfrage ist gescheitert (Erneuter Login). Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
|
||||
BeWoLog.writeToLogFile("Erneuter Login ist fehlgeschlagen. (JsonSoapPrimitiveReLoginRequestListener->onRequestFailure)");
|
||||
Log.e("GET_ALL_MESSAGES", "Fehler beim erneuten Login: " + spiceException.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
if(soapPrimitive == null) {
|
||||
BeWoLog.writeToLogFile("Antwort vom Server war null. (JsonSoapPrimitiveReLoginRequestListener->onRequestSuccess)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
String abc = soapPrimitive.toString();
|
||||
|
||||
BeWoLog.writeToLogFile("Erneuter Login war erfolgreich. (JsonSoapPrimitiveReLoginRequestListener->onRequestSuccess)");
|
||||
Log.i("ERNEUTER_LOGIN", "Antwort vom Server erhalten in KONTAKT_CHAT_ACTIVITY");
|
||||
|
||||
if(abc != null) {
|
||||
if(abc.contains(";")) {
|
||||
// Intent kontaktChatActivity = new Intent(getApplicationContext(), KontaktChatActivity.class);
|
||||
// startActivity(kontaktChatActivity);
|
||||
} else {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Ein fataler Fehler ist aufgetreten. Bitte Loggen Sie sich erneut ein.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import java.security.InvalidAlgorithmParameterException;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
import javax.crypto.NoSuchPaddingException;
|
||||
|
||||
@@ -49,6 +50,7 @@ import soapConnection.SoapCalls;
|
||||
import soapConnection.SoapConnectionManager;
|
||||
import tcpConnection.LoginCallback;
|
||||
import tcpConnection.SocketManager;
|
||||
import util.BeWoLog;
|
||||
import util.SecurityUtils;
|
||||
import util.Util;
|
||||
|
||||
@@ -69,9 +71,37 @@ public class LoginActivity extends ActionBarActivity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
BeWoLog.writeToLogFile("Erzeuge die LoginActivity");
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_login);
|
||||
|
||||
SocketManager.connectionFailureCallback = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Offline. Aktion nicht möglich.", Toast.LENGTH_LONG).show();
|
||||
Log.i("LOGIN", "Verbindung mit dem TCP-Server nicht möglich");
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
SocketManager.sendFailureCallback = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(getApplicationContext(), "Offline. Senden vorgemerkt.", Toast.LENGTH_LONG).show();
|
||||
Log.i("LOGIN", "Verbindung mit dem TCP-Server nicht vorhanden. Nachricht wird später verschickt.");
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
mChatCodeView = (EditText) findViewById(R.id.token);
|
||||
mTenantView = (EditText) findViewById(R.id.tenant);
|
||||
mUsernameView = (EditText) findViewById(R.id.username);
|
||||
@@ -133,27 +163,35 @@ public class LoginActivity extends ActionBarActivity {
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
BeWoLog.writeToLogFile("Starte die LoginActivity");
|
||||
|
||||
super.onStart();
|
||||
spiceManager.start(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
BeWoLog.writeToLogFile("Stoppe die LoginActivity");
|
||||
|
||||
spiceManager.shouldStop();
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
BeWoLog.writeToLogFile("Pausiere die LoginActivity");
|
||||
|
||||
super.onPause();
|
||||
BeWoChatApplication.activityPaused();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
BeWoLog.writeToLogFile("Resümiere mit der LoginActivity");
|
||||
|
||||
BeWoChatApplication.activityResumed();
|
||||
|
||||
if(SoapConnectionManager.User != null) {
|
||||
if(SoapConnectionManager.getUser() != null) {
|
||||
Log.i("LOGIN", "Benutzer ist angemeldet");
|
||||
} else {
|
||||
Log.i("LOGIN", "Benutzer ist NICHT angemeldet");
|
||||
@@ -163,6 +201,8 @@ public class LoginActivity extends ActionBarActivity {
|
||||
}
|
||||
|
||||
private void attemptLogin() {
|
||||
BeWoLog.writeToLogFile("Versuche Login auf dem Soap-Server von der LoginActivity aus.");
|
||||
|
||||
mTenantView.setError(null);
|
||||
mChatCodeView.setError(null);
|
||||
mUsernameView.setError(null);
|
||||
@@ -250,47 +290,70 @@ public class LoginActivity extends ActionBarActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private final class JsonSoapPrimitiveRequestListener implements RequestListener<SoapPrimitive> {
|
||||
public final class JsonSoapPrimitiveRequestListener implements RequestListener<SoapPrimitive> {
|
||||
|
||||
@Override
|
||||
public void onRequestFailure(SpiceException spiceException) {
|
||||
|
||||
showProgress(false);
|
||||
BeWoLog.writeToLogFile("Login ist fehlgeschlagen (LoginActivity->JsonSoapPrimitiveRequestListener->onRequestFailure)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
showProgress(false);
|
||||
|
||||
Toast.makeText(getApplicationContext(), "Offline. Anmeldung nicht möglich", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
|
||||
Log.e("Error", spiceException.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestSuccess(SoapPrimitive soapPrimitive) {
|
||||
if(soapPrimitive == null) {
|
||||
showProgress(false);
|
||||
showLoginUIErrors(true, true, true, true);
|
||||
BeWoLog.writeToLogFile("Null vom Server erhalten (LoginActivity->JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
|
||||
Toast.makeText(LoginActivity.this, "Login nicht möglich", Toast.LENGTH_SHORT).show();
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
showProgress(false);
|
||||
showLoginUIErrors(true, true, true, true);
|
||||
|
||||
Toast.makeText(LoginActivity.this, "Login nicht möglich", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
BeWoChatApplication.lastOnlineTS = Calendar.getInstance().getTime();
|
||||
|
||||
String abc = soapPrimitive.toString();
|
||||
|
||||
if(abc != null) {
|
||||
|
||||
BeWoLog.writeToLogFile("Der Loginversuch war erfolgreich (LoginActivity->JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
Log.i("LOGIN", abc);
|
||||
|
||||
if(abc.contains(";")) {
|
||||
BeWoLog.writeToLogFile("Der User ist angemeldet (LoginActivity->JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
|
||||
String[] blubb = abc.split(";");
|
||||
SoapConnectionManager.User = new ApplicationUser(blubb[1], blubb[2], Long.valueOf(blubb[0]), Long.valueOf(blubb[3]));
|
||||
SoapConnectionManager.setUser(new ApplicationUser(blubb[1], blubb[2], Long.valueOf(blubb[0]), Long.valueOf(blubb[3])));
|
||||
|
||||
Log.i("LOGIN", "UserPersonOid: " + SoapConnectionManager.getUser().getPersonOid());
|
||||
|
||||
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(getApplicationContext());
|
||||
|
||||
int owner = databaseHandler.getOwnerOid();
|
||||
if(owner == 0) {
|
||||
databaseHandler.insertOwnerOid(SoapConnectionManager.User.getPersonOid().intValue());
|
||||
} else if(owner != SoapConnectionManager.User.getPersonOid().intValue()) {
|
||||
databaseHandler.insertOwnerOid(SoapConnectionManager.getUser().getPersonOid().intValue());
|
||||
} else if(owner != SoapConnectionManager.getUser().getPersonOid().intValue()) {
|
||||
databaseHandler.clearDatabase();
|
||||
databaseHandler.insertOwnerOid(SoapConnectionManager.User.getPersonOid().intValue());
|
||||
databaseHandler.insertOwnerOid(SoapConnectionManager.getUser().getPersonOid().intValue());
|
||||
}
|
||||
|
||||
SoapConnectionManager.User.setTenant(mTenantView.getText().toString());
|
||||
SoapConnectionManager.getUser().setTenant(mTenantView.getText().toString());
|
||||
|
||||
if(mRememberMeCheckBoxView.isChecked()) {
|
||||
ByteArrayOutputStream tokenOutputStream = new ByteArrayOutputStream();
|
||||
@@ -321,11 +384,13 @@ public class LoginActivity extends ActionBarActivity {
|
||||
|
||||
SocketManager.tenant = mTenantView.getText().toString();
|
||||
|
||||
SocketManager.loginCallback = new LoginCallback() {
|
||||
SocketManager.initialLoginCallback = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Ist verbunden und ruft die ChatActivity nun auf.");
|
||||
|
||||
BeWoLog.writeToLogFile("Rufe die KontaktChatActivity auf (LoginActivity->JsonSoapPrimitiveRequestListener->onRequestSuccess)");
|
||||
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -338,21 +403,25 @@ public class LoginActivity extends ActionBarActivity {
|
||||
}
|
||||
};
|
||||
|
||||
SocketManager.connectToServer();
|
||||
SocketManager.connectToServer("LoginActivity");
|
||||
} else {
|
||||
showProgress(false);
|
||||
|
||||
switch(abc) {
|
||||
case "WrongTenant":
|
||||
BeWoLog.writeToLogFile("Falsche Kundennummer beim Login");
|
||||
showLoginUIErrors(false, true, false, false);
|
||||
break;
|
||||
case "WrongCredentials":
|
||||
BeWoLog.writeToLogFile("Falsche Credentials beim Login");
|
||||
showLoginUIErrors(false, false, true, true);
|
||||
break;
|
||||
case "Unauthorized":
|
||||
BeWoLog.writeToLogFile("Chat-Recht fehlt beim Login");
|
||||
Toast.makeText(getApplicationContext(), "Sie sind nicht zum Chatten autorisiert. Bitte wenden Sie sich an Ihren Administrator.", Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
default:
|
||||
BeWoLog.writeToLogFile("Unbekannter Fehler beim Login");
|
||||
Toast.makeText(getApplicationContext(), "Ein unbekannter Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.", Toast.LENGTH_LONG).show();
|
||||
break;
|
||||
}
|
||||
@@ -413,4 +482,8 @@ public class LoginActivity extends ActionBarActivity {
|
||||
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,185 +0,0 @@
|
||||
package beyondsoft.bewomitarbeiterapp;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import Database.DatabaseHandler;
|
||||
|
||||
import entities.ChatMessage;
|
||||
|
||||
import soapConnection.Packet;
|
||||
import soapConnection.SoapConnectionManager;
|
||||
|
||||
import tcpConnection.SocketManager;
|
||||
import tcpConnection.UIHandler;
|
||||
import util.ConnectivityReceiver;
|
||||
import util.Util;
|
||||
|
||||
|
||||
public class MainActivityMitarbeiter extends Activity implements ConnectivityReceiver.ConnectivityReceiverListener {
|
||||
|
||||
protected Button dokubutton;
|
||||
protected Button chatbutton;
|
||||
protected Button logoutbutton;
|
||||
|
||||
protected String loggedInUserName;
|
||||
|
||||
private UIHandler mainUIHandler;
|
||||
|
||||
int loggedInUserPersonOid;
|
||||
|
||||
private final static String LOGTAG = "MAIN_ACTIVITY";
|
||||
|
||||
@Override
|
||||
public void onNetworkConnectionChanged(boolean isConnected) {
|
||||
Util.reconnectWithServer(isConnected, MainActivityMitarbeiter.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main_activity_mitarbeiter);
|
||||
|
||||
SocketManager.connectToServer();
|
||||
|
||||
setzeButtonListener();
|
||||
|
||||
loggedInUserName = SoapConnectionManager.User.getFullName();
|
||||
|
||||
loggedInUserPersonOid = SoapConnectionManager.User.getPersonOid() <= Integer.MAX_VALUE ? SoapConnectionManager.User.getPersonOid().intValue() : 0;
|
||||
|
||||
mainUIHandler = new UIHandler() {
|
||||
@Override
|
||||
public void updateUserInterface(Packet chatPacket) {
|
||||
switch(chatPacket.ChatDataIdentifier) {
|
||||
case MESSAGE:
|
||||
Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.SenderPersonOid, false, null, null, chatPacket.IsEmployee, getApplicationContext());
|
||||
|
||||
break;
|
||||
|
||||
case MESSAGE_RESPONSE:
|
||||
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(getApplicationContext());
|
||||
|
||||
ChatMessage cm = databaseHandler.getChatMessageById(chatPacket.ClientseitigeOid);
|
||||
|
||||
cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
|
||||
cm.IsDelivered = true;
|
||||
|
||||
databaseHandler.updateChatMessage(cm);
|
||||
|
||||
break;
|
||||
case STATUS_NOTIFICATION_LOGIN_BROADCAST:
|
||||
String[] bitch = chatPacket.ChatMessage.split(",");
|
||||
|
||||
for (String aBitch : bitch) {
|
||||
SocketManager.onlinePersonOids.add(Integer.parseInt(aBitch));
|
||||
}
|
||||
|
||||
break;
|
||||
case STATUS_NOTIFICATION_LOGIN:
|
||||
if(!SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
|
||||
SocketManager.onlinePersonOids.add(chatPacket.SenderPersonOid);
|
||||
}
|
||||
|
||||
break;
|
||||
case STATUS_NOTIFICATION_LOGOUT:
|
||||
if(SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
|
||||
SocketManager.onlinePersonOids.remove(Integer.valueOf(chatPacket.SenderPersonOid));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case TEAM:
|
||||
ContactListItem cli = DatabaseHandler.getInstance(getApplicationContext()).getContactByPersonOid(chatPacket.RecipientPersonOid, true);
|
||||
|
||||
Util.SetNotify(chatPacket.ChatName, chatPacket.ChatMessage, chatPacket.RecipientPersonOid, true, cli.teamMemberOids, cli.teamMemberNames, cli.getIsEmployee(), getApplicationContext());
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Util.sendUnsentMessages(MainActivityMitarbeiter.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
// Inflate the menu; this adds items to the action bar if it is present.
|
||||
getMenuInflater().inflate(R.menu.menu_main_activity_mitarbeiter, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
int id = item.getItemId();
|
||||
|
||||
//noinspection SimplifiableIfStatement
|
||||
|
||||
if (id == R.id.action_Logout) {
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
public void setzeButtonListener() {
|
||||
|
||||
dokubutton = (Button) findViewById(R.id.Dokubutton);
|
||||
dokubutton.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
|
||||
startActivity(new Intent(getBaseContext(),WebdokuActivity.class));
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
chatbutton = (Button) findViewById(R.id.Chatbutton);
|
||||
chatbutton.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
Intent kontaktChatActivity = new Intent(getBaseContext(), KontaktChatActivity.class);
|
||||
|
||||
startActivity(kontaktChatActivity);
|
||||
}
|
||||
});
|
||||
|
||||
logoutbutton = (Button) findViewById(R.id.Logoutbutton);
|
||||
logoutbutton.setOnClickListener(new View.OnClickListener() {
|
||||
public void onClick(View v) {
|
||||
SocketManager.logout();
|
||||
|
||||
finish();
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
SocketManager.uiHandler = mainUIHandler;
|
||||
|
||||
BeWoChatApplication.getInstance().setConnectivityListener(this);
|
||||
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
Log.i(LOGTAG, "Logge aus...");
|
||||
|
||||
SocketManager.logout();
|
||||
|
||||
finish();
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,10 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import Database.DatabaseHandler;
|
||||
@@ -19,12 +21,13 @@ import soapConnection.SoapConnectionManager;
|
||||
public class MessageAdapter extends ArrayAdapter<ChatMessage> {
|
||||
|
||||
private Activity activity;
|
||||
//private List<ChatMessage> messages;
|
||||
public ArrayList<ChatMessage> messages;
|
||||
|
||||
|
||||
public MessageAdapter(Activity context, int resource, List<ChatMessage> objects) {
|
||||
super(context, resource, objects);
|
||||
this.activity = context;
|
||||
//this.messages = objects;
|
||||
this.messages = new ArrayList<>(objects);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -35,7 +38,7 @@ public class MessageAdapter extends ArrayAdapter<ChatMessage> {
|
||||
int layoutResource;
|
||||
ChatMessage chatMessage = getItem(position);
|
||||
|
||||
if (chatMessage.SenderPersonOid == SoapConnectionManager.User.getPersonOid()) {
|
||||
if (chatMessage.SenderPersonOid == SoapConnectionManager.getUser().getPersonOid()) {
|
||||
layoutResource = R.layout.item_chat_right;
|
||||
}else {
|
||||
layoutResource = R.layout.item_chat_left;
|
||||
@@ -47,7 +50,11 @@ public class MessageAdapter extends ArrayAdapter<ChatMessage> {
|
||||
|
||||
holder.msg.setText(chatMessage.ChatText);
|
||||
|
||||
if(chatMessage.IsTeam && chatMessage.SenderPersonOid != SoapConnectionManager.User.getPersonOid()) {
|
||||
if(holder.pending_msg_image != null && chatMessage.ServerseitigeOid != 0) {
|
||||
holder.pending_msg_image.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
if(chatMessage.IsTeam && chatMessage.SenderPersonOid != SoapConnectionManager.getUser().getPersonOid()) {
|
||||
DatabaseHandler instance = DatabaseHandler.getInstance(this.getContext());
|
||||
ContactListItem sender = instance.getContactByPersonOid(chatMessage.SenderPersonOid, false);
|
||||
|
||||
@@ -57,7 +64,7 @@ public class MessageAdapter extends ArrayAdapter<ChatMessage> {
|
||||
holder.teamMemberName.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
if(chatMessage.SenderPersonOid == SoapConnectionManager.User.getPersonOid()){
|
||||
if(chatMessage.SenderPersonOid == SoapConnectionManager.getUser().getPersonOid()){
|
||||
holder.dateIn.setText(chatMessage.getInsTsAsString());
|
||||
} else {
|
||||
holder.dateOut.setText(chatMessage.getInsTsAsString());
|
||||
@@ -84,14 +91,14 @@ public class MessageAdapter extends ArrayAdapter<ChatMessage> {
|
||||
private TextView dateOut;
|
||||
private TextView dateIn;
|
||||
private TextView teamMemberName;
|
||||
//private TextView send_tick;
|
||||
private ImageView pending_msg_image;
|
||||
|
||||
public ViewHolder(View v) {
|
||||
ViewHolder(View v) {
|
||||
msg = (TextView) v.findViewById(R.id.txt_msg);
|
||||
dateOut = (TextView)v.findViewById(R.id.DateOUT);
|
||||
dateIn = (TextView)v.findViewById(R.id.DateIN);
|
||||
teamMemberName = (TextView) v.findViewById(R.id.teamMember);
|
||||
//send_tick = (TextView)v.findViewById(R.id.txt_msg_tick);
|
||||
pending_msg_image = (ImageView) v.findViewById(R.id.pending_msg_img);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import java.util.Locale;
|
||||
/**
|
||||
* Created by JettenM on 26.07.2016.
|
||||
*/
|
||||
public class ChatMessage {
|
||||
public class ChatMessage implements Comparable<ChatMessage> {
|
||||
public int Id;
|
||||
public int SenderPersonOid;
|
||||
public int RecipientPersonOid;
|
||||
@@ -16,26 +16,30 @@ public class ChatMessage {
|
||||
public boolean IsDelivered;
|
||||
public int ServerseitigeOid;
|
||||
public boolean IsTeam;
|
||||
public String MessageId;
|
||||
public Date SendDate;
|
||||
|
||||
public ChatMessage(int id, int senderPersonOid, int recipientPersonOid, Date insTs, String chatText, boolean isDelivered, int serverseitigeOid, boolean isTeam) {
|
||||
Id = id;
|
||||
SenderPersonOid = senderPersonOid;
|
||||
public ChatMessage(int id, int senderPersonOid, int recipientPersonOid, Date insTs, String chatText, boolean isDelivered, int serverseitigeOid, boolean isTeam, String messageId) {
|
||||
Id = id;
|
||||
SenderPersonOid = senderPersonOid;
|
||||
RecipientPersonOid = recipientPersonOid;
|
||||
InsTs = insTs;
|
||||
ChatText = chatText;
|
||||
IsDelivered = isDelivered;
|
||||
ServerseitigeOid = serverseitigeOid;
|
||||
IsTeam = isTeam;
|
||||
InsTs = insTs;
|
||||
ChatText = chatText;
|
||||
IsDelivered = isDelivered;
|
||||
ServerseitigeOid = serverseitigeOid;
|
||||
IsTeam = isTeam;
|
||||
MessageId = messageId;
|
||||
}
|
||||
|
||||
public ChatMessage(int senderPersonOid, int recipientPersonOid, Date insTs, String chatText, boolean isDelivered, int serverseitigeOid, boolean isTeam) {
|
||||
SenderPersonOid = senderPersonOid;
|
||||
public ChatMessage(int senderPersonOid, int recipientPersonOid, Date insTs, String chatText, boolean isDelivered, int serverseitigeOid, boolean isTeam, String messageId) {
|
||||
SenderPersonOid = senderPersonOid;
|
||||
RecipientPersonOid = recipientPersonOid;
|
||||
InsTs = insTs;
|
||||
ChatText = chatText;
|
||||
IsDelivered = isDelivered;
|
||||
ServerseitigeOid = serverseitigeOid;
|
||||
IsTeam = isTeam;
|
||||
InsTs = insTs;
|
||||
ChatText = chatText;
|
||||
IsDelivered = isDelivered;
|
||||
ServerseitigeOid = serverseitigeOid;
|
||||
IsTeam = isTeam;
|
||||
MessageId = messageId;
|
||||
}
|
||||
|
||||
public String getInsTsAsString() {
|
||||
@@ -43,6 +47,15 @@ public class ChatMessage {
|
||||
return dateFormat.format(InsTs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(ChatMessage cm) {
|
||||
if(InsTs == null || cm.InsTs == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return InsTs.compareTo(cm.InsTs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
String asString = "Id: " + Id;
|
||||
@@ -53,6 +66,7 @@ public class ChatMessage {
|
||||
asString += "\nIsDelivered: " + IsDelivered;
|
||||
asString += "\nServerseitigeOid: " + ServerseitigeOid;
|
||||
asString += "\nIsTeam: " + IsTeam;
|
||||
asString += "\nMessageId: " + MessageId;
|
||||
|
||||
return asString;
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ public class ApplicationUser {
|
||||
}
|
||||
|
||||
public boolean getIsEmployee() {
|
||||
return employeeOid == 0 && customerOid > 0;
|
||||
return employeeOid != null && customerOid == null;
|
||||
}
|
||||
|
||||
public ApplicationUser(String fullName, String username, Long employeeOid, Long personOid) {
|
||||
|
||||
@@ -19,7 +19,8 @@ public enum DataIdentifier {
|
||||
STATUS_NOTIFICATION_ONLINE(12),
|
||||
STATUS_NOTIFICATION_OFFLINE(13),
|
||||
LOGIN_SUCCESS(14),
|
||||
STATUS_REQUEST(15);
|
||||
STATUS_REQUEST(15),
|
||||
KEEP_ALIVE(16);
|
||||
|
||||
private final int value;
|
||||
DataIdentifier(int value) {
|
||||
|
||||
@@ -26,29 +26,31 @@ public class Packet {
|
||||
public int ServerseitigeOid;
|
||||
public int ClientseitigeOid;
|
||||
public boolean IsEmployee;
|
||||
public String MessageId;
|
||||
|
||||
public Packet() {
|
||||
ChatDataIdentifier = DataIdentifier.NULL;
|
||||
ChatMessage = "";
|
||||
ChatName = SoapConnectionManager.User.getFullName();
|
||||
ChatName = SoapConnectionManager.getUser().getFullName();
|
||||
Tenant = "";
|
||||
SenderPersonOid = SoapConnectionManager.User.getPersonOid().intValue();
|
||||
SenderPersonOid = SoapConnectionManager.getUser().getPersonOid().intValue();
|
||||
RecipientPersonOid = 0;
|
||||
IsDelivered = false;
|
||||
MessageTimeStamp = Calendar.getInstance().getTime();
|
||||
IsEmployee = SoapConnectionManager.User.getIsEmployee();
|
||||
IsEmployee = SoapConnectionManager.getUser().getIsEmployee();
|
||||
MessageId = "";
|
||||
}
|
||||
|
||||
public String getFormattedMessageTimeStamp() {
|
||||
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
|
||||
private String getFormattedMessageTimeStamp() {
|
||||
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.GERMAN);
|
||||
return df.format(MessageTimeStamp);
|
||||
}
|
||||
|
||||
//Aufbau Message:
|
||||
// die ersten fünf ";" ignorieren
|
||||
// SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;ServerseitigeOid;ClientseitigeOid;Tenant;IsEmployee;[ClientName][ChatMessage][MessageTimeStamp][IsDelivered]
|
||||
// SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;ServerseitigeOid;ClientseitigeOid;Tenant;IsEmployee;MessageId;[ClientName][ChatMessage][MessageTimeStamp][IsDelivered]
|
||||
|
||||
//23;281;20;389;1;38;932[Tenant]; 8 Semikola
|
||||
//23;281;20;389;1;38;932;[Tenant];1; 10 Semikola
|
||||
|
||||
public Packet(String message) {
|
||||
Log.i("PACKET_CONSTRUCTOR_MSG", message);
|
||||
@@ -64,6 +66,7 @@ public class Packet {
|
||||
String clientseitigeOidString = gesplittet[6];
|
||||
Tenant = gesplittet[7];
|
||||
String isEmployeeString = gesplittet[8];
|
||||
MessageId = gesplittet[9];
|
||||
|
||||
SenderPersonOid = Integer.parseInt(senderPersonOidString);
|
||||
RecipientPersonOid = Integer.parseInt(recipientPersonOidString);
|
||||
@@ -76,14 +79,14 @@ public class Packet {
|
||||
int chatNameLength = Integer.parseInt(chatNameLengthString);
|
||||
int chatMessageLength = Integer.parseInt(chatMessageLengthString);
|
||||
|
||||
int headerLength = senderPersonOidString.length() + recipientPersonOidString.length() + chatNameLengthString.length() + chatMessageLengthString.length() + chatIdentifierString.length() + Tenant.length() + serverseitigeOidString.length() + clientseitigeOidString.length() + 10;
|
||||
int headerLength = senderPersonOidString.length() + recipientPersonOidString.length() + chatNameLengthString.length() + chatMessageLengthString.length() + chatIdentifierString.length() + Tenant.length() + serverseitigeOidString.length() + clientseitigeOidString.length() + MessageId.length() + 12;
|
||||
String actualMessage = message.substring(headerLength - 1);
|
||||
|
||||
ChatName = actualMessage.substring(0, chatNameLength);
|
||||
|
||||
ChatMessage = actualMessage.substring(chatNameLength, chatMessageLength + chatNameLength);
|
||||
|
||||
String dateString = actualMessage.substring(chatMessageLength + chatNameLength);
|
||||
String dateString = actualMessage.substring(chatMessageLength + chatNameLength, actualMessage.length() - 1);
|
||||
|
||||
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss", Locale.GERMAN);
|
||||
|
||||
@@ -99,7 +102,7 @@ public class Packet {
|
||||
}
|
||||
|
||||
public byte[] getDataStream() {
|
||||
String dataStreamAsString = "" + SenderPersonOid + ";" + RecipientPersonOid + ";" + ChatName.length() + ";" + ChatMessage.length()+ ";" + ChatDataIdentifier.getValue() + ";" + ServerseitigeOid + ";" + ClientseitigeOid + ";" + Tenant + ";" + (IsEmployee ? 1 : 0) + ";";
|
||||
String dataStreamAsString = "" + SenderPersonOid + ";" + RecipientPersonOid + ";" + ChatName.length() + ";" + ChatMessage.length()+ ";" + ChatDataIdentifier.getValue() + ";" + ServerseitigeOid + ";" + ClientseitigeOid + ";" + Tenant + ";" + (IsEmployee ? 1 : 0) + ";" + MessageId + ";";
|
||||
|
||||
dataStreamAsString += ChatName + ChatMessage + getFormattedMessageTimeStamp() + "" + (IsDelivered ? 1 : 0);
|
||||
|
||||
@@ -117,6 +120,23 @@ public class Packet {
|
||||
}
|
||||
|
||||
private void writeToLog(String prefix) {
|
||||
Log.i("PACKET_LOG", prefix + ": SenderPersonOid: " + SenderPersonOid + "\nRecipientPersonOid: " + RecipientPersonOid + "\nChatDataIdentifier: " + ChatDataIdentifier.name() + "\nChatName: " + ChatName + "\nChatMessage: " + ChatMessage + "\nTenant: " + Tenant + "\nIsDelivered: " + IsDelivered + "\nMessageTimeStamp: " + MessageTimeStamp + "\nServerseitigeOid: " + ServerseitigeOid + "\nClientseitigeOid: " + ClientseitigeOid + "\nIsEmployee: " + IsEmployee);
|
||||
Log.i("PACKET_LOG", prefix + ": SenderPersonOid: " + SenderPersonOid + "\nRecipientPersonOid: " + RecipientPersonOid + "\nChatDataIdentifier: " + ChatDataIdentifier.name() + "\nChatName: " + ChatName + "\nChatMessage: " + ChatMessage + "\nTenant: " + Tenant + "\nIsDelivered: " + IsDelivered + "\nMessageTimeStamp: " + MessageTimeStamp + "\nServerseitigeOid: " + ServerseitigeOid + "\nClientseitigeOid: " + ClientseitigeOid + "\nIsEmployee: " + IsEmployee + "\nMessageId: " + MessageId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SenderPersonOid: " + SenderPersonOid +
|
||||
"\nRecipientPersonOid: " + RecipientPersonOid +
|
||||
"\nChatDataIdentifier: " + ChatDataIdentifier.name() +
|
||||
"\nChatName: " + ChatName +
|
||||
"\nChatMessage: " + ChatMessage +
|
||||
"\nTenant: " + Tenant +
|
||||
"\nIsDelivered: " + IsDelivered +
|
||||
"\nMessageTimeStamp: " + MessageTimeStamp +
|
||||
"\nServerseitigeOid: " + ServerseitigeOid +
|
||||
"\nClientseitigeOid: " + ClientseitigeOid +
|
||||
"\nIsEmployee: " + IsEmployee +
|
||||
"\nMessageId: " + MessageId;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ public class SoapCalls {
|
||||
public static String GET_ALL_CHAT_MESSAGES = "GetAllChatMessagesForSenderAndRecipient";
|
||||
public static String KEEP_ALIVE = "KeepAlive";
|
||||
|
||||
public static String CHECK_MESSAGE_IDS = "CheckChatMessagesByUUIDs";
|
||||
|
||||
//TODO: "app4.bewoplaner.de";//
|
||||
public static String DESTINATION_ADDRESS = "app4.bewoplaner.de";
|
||||
public static int DESTINATION_PORT = 5000;
|
||||
|
||||
@@ -17,7 +17,15 @@ import java.util.ArrayList;
|
||||
* Created by JettenM on 05.07.2016.
|
||||
*/
|
||||
public class SoapConnectionManager {
|
||||
public static ApplicationUser User;
|
||||
private static ApplicationUser user;
|
||||
|
||||
public static ApplicationUser getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public static void setUser(ApplicationUser pUser) {
|
||||
user = pUser;
|
||||
}
|
||||
|
||||
private static final String LOGTAG = "SoapConnectionManager";
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package tcpConnection;
|
||||
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
@@ -9,6 +10,7 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.net.NetworkInterface;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -24,6 +26,8 @@ import entities.NotificationLog;
|
||||
import soapConnection.DataIdentifier;
|
||||
import soapConnection.Packet;
|
||||
import soapConnection.SoapCalls;
|
||||
import util.BeWoLog;
|
||||
import util.ConnectivityReceiver;
|
||||
import util.Util;
|
||||
|
||||
/**
|
||||
@@ -41,29 +45,72 @@ public class SocketManager {
|
||||
private static SocketListener socketListener;
|
||||
public static UIHandler uiHandler;
|
||||
public static LoginCallback loginCallback;
|
||||
public static LoginCallback initialLoginCallback;
|
||||
public static LoginCallback connectionFailureCallback;
|
||||
public static LoginCallback loginCallbackAfterConnectionLost;
|
||||
public static LoginCallback sendFailureCallback;
|
||||
private static DataOutputStream dataOutputStream;
|
||||
|
||||
public static ArrayList<Integer> onlinePersonOids = new ArrayList<>();
|
||||
public static ArrayList<ChatEntity> onlineEntities = new ArrayList<>();
|
||||
public static HashMap<ChatEntity, NotificationLog> notificationEntities = new HashMap<>();
|
||||
public static LoginCallback loginCallback2;
|
||||
public static LoginCallback socketConnectionFailedCallback;
|
||||
|
||||
public static void connectToServer(){
|
||||
public static void connectToServer(String herkunft){
|
||||
BeWoLog.writeToLogFile("connectToServer wird aufgerufen von " + herkunft);
|
||||
new Thread(new ConnectionOpener()).start();
|
||||
}
|
||||
|
||||
public static void shutDownConnectionToServer(String herkunft){
|
||||
BeWoLog.writeToLogFile("Aufruf von " + herkunft + ". (shutDownConnectionToServer)");
|
||||
new Thread(new ConnectionCloser()).start();
|
||||
}
|
||||
|
||||
public static void sendMessage(Packet packet) {
|
||||
new Thread(new MessageSender(packet.getDataStream())).start();
|
||||
}
|
||||
|
||||
private static boolean loginInProgress = false;
|
||||
private static class ConnectionOpener implements Runnable {
|
||||
public void run() {
|
||||
try {
|
||||
if(loginInProgress) {
|
||||
BeWoLog.writeToLogFile("Login wird von anderer Stelle versucht. (ConnectionOpener)");
|
||||
return;
|
||||
}
|
||||
|
||||
BeWoLog.writeToLogFile("Login mit dem TCP-Server wird ausgeführt");
|
||||
|
||||
loginInProgress = true;
|
||||
if(socket != null) {
|
||||
socket.close();
|
||||
}
|
||||
|
||||
if (dataOutputStream != null) {
|
||||
dataOutputStream.flush();
|
||||
dataOutputStream.close();
|
||||
}
|
||||
|
||||
if(socketListener != null) {
|
||||
socketListener.isRunning = false;
|
||||
}
|
||||
|
||||
socket = null;
|
||||
socket = new Socket(SoapCalls.DESTINATION_ADDRESS, SoapCalls.DESTINATION_PORT);
|
||||
|
||||
try {
|
||||
socket = new Socket(SoapCalls.DESTINATION_ADDRESS, SoapCalls.DESTINATION_PORT);
|
||||
|
||||
BeWoChatApplication.lastOnlineTS = Calendar.getInstance().getTime();
|
||||
} catch(Exception e) {
|
||||
BeWoChatApplication.writeExceptionToLog(e);
|
||||
|
||||
if(socketConnectionFailedCallback != null) {
|
||||
socketConnectionFailedCallback.doCallback();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
dataOutputStream = null;
|
||||
onlinePersonOids.clear();
|
||||
@@ -71,22 +118,38 @@ public class SocketManager {
|
||||
|
||||
dataOutputStream = new DataOutputStream(socket.getOutputStream());
|
||||
|
||||
socketListener = null;
|
||||
socketListener = new SocketListener();
|
||||
listenerThread = new Thread(socketListener);
|
||||
listenerThread.start();
|
||||
|
||||
Timer timer = new Timer();
|
||||
timer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
loginInProgress = false;
|
||||
BeWoLog.writeToLogFile("loginInProgress wird nach 10 Sekunden zurückgesetzt.");
|
||||
}
|
||||
}, 10*1000);
|
||||
|
||||
loginOnServer();
|
||||
} catch(Exception exception) {
|
||||
BeWoChatApplication.writeExceptionToLog(exception);
|
||||
|
||||
socket = null;
|
||||
try {
|
||||
new Timer().schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
connectToServer();
|
||||
connectToServer("Login-Timeout in ConnectionOpener");
|
||||
}
|
||||
}, 5000);
|
||||
}, 11000);
|
||||
} catch(Exception exception2) {
|
||||
BeWoChatApplication.writeExceptionToLog(exception2);
|
||||
exception2.printStackTrace();
|
||||
if(connectionFailureCallback != null) {
|
||||
connectionFailureCallback.doCallback();
|
||||
}
|
||||
}
|
||||
|
||||
exception.printStackTrace();
|
||||
@@ -101,11 +164,16 @@ public class SocketManager {
|
||||
|
||||
packet.ChatDataIdentifier = DataIdentifier.LOGOUT;
|
||||
|
||||
new Thread(new MessageSender(packet.getDataStream())).start();
|
||||
BeWoLog.writeToLogFile("Schicke Logout-Packet an den TCP-Server. (logout)");
|
||||
|
||||
new Thread(new MessageSender(packet.getDataStream())).start();
|
||||
//TODO: komplett beenden
|
||||
} catch(Exception exception) {
|
||||
BeWoChatApplication.writeExceptionToLog(exception);
|
||||
exception.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Logout-Packet konnte nicht an den TCP-Server gesendet werden. (logout)");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,19 +185,28 @@ public class SocketManager {
|
||||
packet.ChatMessage = getMACAddress();
|
||||
packet.ChatDataIdentifier = DataIdentifier.LOGIN;
|
||||
|
||||
BeWoLog.writeToLogFile("Schicke Login-Packet an den TCP-Server. (loginOnServer)");
|
||||
|
||||
new Thread(new MessageSender(packet.getDataStream())).start();
|
||||
} catch(Exception exception) {
|
||||
BeWoChatApplication.writeExceptionToLog(exception);
|
||||
exception.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Login-Packet konnte nicht an den TCP-Server gesendet werden. (loginOnServer)");
|
||||
}
|
||||
}
|
||||
|
||||
public static class ConnectionCloser implements Runnable{
|
||||
public void run(){
|
||||
try {
|
||||
BeWoLog.writeToLogFile("Schließe die Verbindung zum TCP-Server. (ConnectionCloser)");
|
||||
|
||||
if (dataOutputStream != null) {
|
||||
dataOutputStream.flush();
|
||||
dataOutputStream.close();
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("dataOutputStream ist null. (ConnectionCloser)");
|
||||
}
|
||||
|
||||
if (socket != null) {
|
||||
@@ -137,15 +214,16 @@ public class SocketManager {
|
||||
}
|
||||
|
||||
} catch (IOException se) {
|
||||
BeWoChatApplication.writeExceptionToLog(se);
|
||||
se.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MessageSender implements Runnable {
|
||||
private static class MessageSender implements Runnable {
|
||||
byte[] packetToSend;
|
||||
|
||||
public MessageSender(byte[] packet2Send) {
|
||||
MessageSender(byte[] packet2Send) {
|
||||
packetToSend = packet2Send;
|
||||
}
|
||||
|
||||
@@ -153,35 +231,71 @@ public class SocketManager {
|
||||
public void run() {
|
||||
if(socket == null || !socket.isConnected()) {
|
||||
Log.e("MESSAGE_SENDER", "Socket ist nicht verbunden");
|
||||
BeWoLog.writeToLogFile("Socket ist nicht mit dem Server verbunden. (MessageSender)");
|
||||
}
|
||||
|
||||
if(socket != null && dataOutputStream != null) {
|
||||
try {
|
||||
dataOutputStream.write(packetToSend);
|
||||
dataOutputStream.flush();
|
||||
} catch (IOException e) {
|
||||
try {
|
||||
Packet packet = new Packet(new String(packetToSend, "UTF-8"));
|
||||
if(ConnectivityReceiver.isConnected()) {
|
||||
if ((Calendar.getInstance().getTime().getTime() - BeWoChatApplication.lastOnlineTS.getTime()) < BeWoChatApplication.getRefreshIntervalInMilliseconds()) {
|
||||
if(socket != null && dataOutputStream != null) {
|
||||
try {
|
||||
//TODO: mit Versenden der nicht verschickten Nachrichten synchronisieren
|
||||
|
||||
dataOutputStream.write(packetToSend);
|
||||
dataOutputStream.flush();
|
||||
|
||||
if(packet.ChatDataIdentifier == DataIdentifier.MESSAGE || packet.ChatDataIdentifier == DataIdentifier.TEAM) {
|
||||
DatabaseHandler db = DatabaseHandler.getInstance(BeWoChatApplication.getInstance().getApplicationContext());
|
||||
ChatMessage undeliveredMessage = db.getChatMessageById(packet.ClientseitigeOid);
|
||||
if(undeliveredMessage != null) {
|
||||
undeliveredMessage.IsDelivered = false;
|
||||
int affectedRows = db.updateChatMessage(undeliveredMessage);
|
||||
}
|
||||
}
|
||||
} catch (UnsupportedEncodingException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
Packet packet = new Packet(new String(packetToSend, "UTF-8"));
|
||||
|
||||
e.printStackTrace();
|
||||
ChatMessage sentMessage = db.getChatMessageById(packet.ClientseitigeOid);
|
||||
|
||||
if(sentMessage != null) {
|
||||
sentMessage.SendDate = Calendar.getInstance().getTime();
|
||||
int affectedRows = db.updateChatMessage(sentMessage);
|
||||
Log.i("MESSAGE_SENDER", "SendDate wurde erfolgreich aktualisiert: " + (affectedRows == 1));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
BeWoChatApplication.writeExceptionToLog(e);
|
||||
|
||||
try {
|
||||
Packet packet = new Packet(new String(packetToSend, "UTF-8"));
|
||||
|
||||
if(packet.ChatDataIdentifier == DataIdentifier.MESSAGE || packet.ChatDataIdentifier == DataIdentifier.TEAM) {
|
||||
DatabaseHandler db = DatabaseHandler.getInstance(BeWoChatApplication.getInstance().getApplicationContext());
|
||||
ChatMessage undeliveredMessage = db.getChatMessageById(packet.ClientseitigeOid);
|
||||
if(undeliveredMessage != null) {
|
||||
undeliveredMessage.IsDelivered = false;
|
||||
int affectedRows = db.updateChatMessage(undeliveredMessage);
|
||||
}
|
||||
}
|
||||
|
||||
// SocketManager.shutDownConnectionToServer("MessageSender->Socket ist nicht erreichbar.");
|
||||
SocketManager.connectToServer("MessageSender beim gescheiterten Versenden einer Nachricht.");
|
||||
} catch (UnsupportedEncodingException e1) {
|
||||
BeWoChatApplication.writeExceptionToLog(e1);
|
||||
e1.printStackTrace();
|
||||
}
|
||||
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
// SocketManager.shutDownConnectionToServer("MessageSender->Socket und/oder OutputStream sind null");
|
||||
SocketManager.connectToServer("MessageSender. Socket und/oder OutputStream sind null");
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Letzer Serverkontakt ist länger als " + BeWoChatApplication.getRefreshIntervalInMilliseconds() + " Minuten. (MessageSender)");
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Ist nicht mit dem Internet verbunden. (MessageSender)");
|
||||
|
||||
if(sendFailureCallback != null) {
|
||||
BeWoLog.writeToLogFile("Führe sendFailureCallback aus. (MessageSender)");
|
||||
sendFailureCallback.doCallback();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class SocketListener implements Runnable {
|
||||
private static class SocketListener implements Runnable {
|
||||
|
||||
Packet chatPacket;
|
||||
|
||||
@@ -191,6 +305,8 @@ public class SocketManager {
|
||||
public void run() {
|
||||
try {
|
||||
while (isRunning) {
|
||||
Thread.currentThread().sleep(1000);
|
||||
Log.i("SOCKET_MANAGER", "Lausche...");
|
||||
if (socket != null) {
|
||||
if (socket.isConnected()) {
|
||||
|
||||
@@ -202,40 +318,65 @@ public class SocketManager {
|
||||
continue;
|
||||
}
|
||||
|
||||
BeWoChatApplication.lastOnlineTS = Calendar.getInstance().getTime();
|
||||
|
||||
byte[] message = new byte[size];
|
||||
|
||||
stream.read(message, 0, size);
|
||||
|
||||
try {
|
||||
chatPacket = new Packet(new String(message, "UTF-8"));
|
||||
Log.i("SOCKET_LISTENER", "Erstelle Packet; " + (chatPacket.ChatMessage.isEmpty() ? "<<LEER>>" : chatPacket.ChatMessage) + "; Typ: " + chatPacket.ChatDataIdentifier + ": " + new String(message, "UTF-8"));
|
||||
} catch(Exception e) {
|
||||
BeWoChatApplication.writeExceptionToLog(e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if(chatPacket.ChatDataIdentifier.equals(DataIdentifier.LOGIN_SUCCESS) && loginCallback != null) {
|
||||
if(chatPacket.ChatDataIdentifier.equals(DataIdentifier.LOGIN_SUCCESS)) {
|
||||
loginInProgress = false;
|
||||
|
||||
BeWoLog.writeToLogFile("Der Login am TCP-Server war erfolgreich. (SocketManager)");
|
||||
Log.i(LOGTAG, "Der Login war erfolgreich");
|
||||
loginCallback.doCallback();
|
||||
if(initialLoginCallback != null) {
|
||||
initialLoginCallback.doCallback();
|
||||
}
|
||||
|
||||
if(loginCallback != null) {
|
||||
loginCallback.doCallback();
|
||||
}
|
||||
|
||||
if(loginCallback2 != null) {
|
||||
loginCallback2.doCallback();
|
||||
}
|
||||
|
||||
if(loginCallbackAfterConnectionLost != null) {
|
||||
loginCallbackAfterConnectionLost.doCallback();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
switch (chatPacket.ChatDataIdentifier) {
|
||||
case MESSAGE:
|
||||
BeWoLog.writeToLogFile("Erhalte Packet mit Identifier: " + chatPacket.ChatDataIdentifier.name());
|
||||
Log.i("SOCKET_MANAGER", "Erhalte Packet mit Identifier: " + chatPacket.ChatDataIdentifier.name());
|
||||
|
||||
switch (chatPacket.ChatDataIdentifier) {
|
||||
case KEEP_ALIVE:
|
||||
|
||||
break;
|
||||
case MESSAGE:
|
||||
BeWoLog.writeToLogFile("Empfange Nacahricht. (SocketManager)");
|
||||
Log.i(LOGTAG, "Empfange Nacahricht");
|
||||
|
||||
databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false));
|
||||
databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, false, chatPacket.MessageId));
|
||||
|
||||
break;
|
||||
|
||||
case TEAM:
|
||||
|
||||
databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true));
|
||||
BeWoLog.writeToLogFile("Empfange Team-Nacahricht. (SocketManager)");
|
||||
databaseHandler.addChatMessage(new ChatMessage(chatPacket.SenderPersonOid, chatPacket.RecipientPersonOid, chatPacket.MessageTimeStamp, chatPacket.ChatMessage, true, chatPacket.ServerseitigeOid, true, chatPacket.MessageId));
|
||||
|
||||
break;
|
||||
|
||||
case MESSAGE_RESPONSE:
|
||||
BeWoLog.writeToLogFile("Empfange Zustellbestätigung. (SocketManager)");
|
||||
ChatMessage cm = databaseHandler.getChatMessageById(chatPacket.ClientseitigeOid);
|
||||
|
||||
cm.ServerseitigeOid = chatPacket.ServerseitigeOid;
|
||||
@@ -244,7 +385,7 @@ public class SocketManager {
|
||||
databaseHandler.updateChatMessage(cm);
|
||||
break;
|
||||
case STATUS_NOTIFICATION_LOGIN:
|
||||
|
||||
BeWoLog.writeToLogFile("Benutzer " + chatPacket.ChatName + " ist jetzt online. (SocketManager)");
|
||||
if(!SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
|
||||
SocketManager.onlinePersonOids.add(chatPacket.SenderPersonOid);
|
||||
}
|
||||
@@ -264,7 +405,7 @@ public class SocketManager {
|
||||
|
||||
break;
|
||||
case STATUS_NOTIFICATION_LOGOUT:
|
||||
|
||||
BeWoLog.writeToLogFile("Benutzer " + chatPacket.ChatName + " ist jetzt offline. (SocketManager)");
|
||||
if(SocketManager.onlinePersonOids.contains(chatPacket.SenderPersonOid)) {
|
||||
SocketManager.onlinePersonOids.remove(Integer.valueOf(chatPacket.SenderPersonOid));
|
||||
}
|
||||
@@ -276,7 +417,7 @@ public class SocketManager {
|
||||
break;
|
||||
|
||||
case STATUS_NOTIFICATION_LOGIN_BROADCAST:
|
||||
|
||||
BeWoLog.writeToLogFile("Aktualisiere Onlinestatusliste. (SocketManager)");
|
||||
String[] onlinePersons = chatPacket.ChatMessage.split(",");
|
||||
|
||||
for (String onlinePerson : onlinePersons) {
|
||||
@@ -291,7 +432,7 @@ public class SocketManager {
|
||||
break;
|
||||
|
||||
case STATUS_REQUEST:
|
||||
|
||||
BeWoLog.writeToLogFile("Empfange eingeloggte User. (SocketManager)");
|
||||
String contactsCsv = chatPacket.ChatMessage;
|
||||
|
||||
String[] stringOids = contactsCsv.split(",");
|
||||
@@ -305,6 +446,7 @@ public class SocketManager {
|
||||
break;
|
||||
}
|
||||
} catch(Exception e) {
|
||||
BeWoChatApplication.writeExceptionToLog(e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -314,15 +456,21 @@ public class SocketManager {
|
||||
Log.e("ERROR_SOCKETLISTENER", "uiHandler ist null");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
BeWoLog.writeToLogFile("Socket ist null. (SocketListener)");
|
||||
|
||||
isRunning = false;
|
||||
connectToServer("SocketListener -> Socket ist null");
|
||||
}
|
||||
}
|
||||
} catch(Exception exception) {
|
||||
BeWoChatApplication.writeExceptionToLog(exception);
|
||||
exception.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String getMACAddress() {
|
||||
private static String getMACAddress() {
|
||||
try {
|
||||
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
|
||||
|
||||
@@ -348,6 +496,7 @@ public class SocketManager {
|
||||
return res1.toString();
|
||||
}
|
||||
} catch(Exception ex) {
|
||||
BeWoChatApplication.writeExceptionToLog(ex);
|
||||
Log.e("GET_MAC_ADDRESS", ex.getMessage());
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package util;
|
||||
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Created by JettenM on 14.10.2016.
|
||||
*/
|
||||
|
||||
public class BeWoLog {
|
||||
public static void writeToLogFile(String data) {
|
||||
if(!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
|
||||
Log.e("BEWOLOG", "Kein externes Speichermedium vorhanden.");
|
||||
return;
|
||||
}
|
||||
|
||||
Date currentDate = Calendar.getInstance().getTime();
|
||||
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.SSS", Locale.GERMAN);
|
||||
|
||||
String dateString = dateFormat.format(currentDate);
|
||||
|
||||
File root = android.os.Environment.getExternalStorageDirectory();
|
||||
|
||||
File dir = new File(root.getAbsolutePath() + "/BeWo");
|
||||
dir.mkdirs();
|
||||
|
||||
File file = new File(dir, Util.LOGFILENAME);
|
||||
try {
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(file, true);
|
||||
PrintWriter printWriter = new PrintWriter(fileOutputStream);
|
||||
|
||||
printWriter.println(dateString + ": " + data + "\n");
|
||||
|
||||
printWriter.flush();
|
||||
printWriter.close();
|
||||
fileOutputStream.close();
|
||||
} catch(IOException ioException) {
|
||||
ioException.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
import entities.ChatMessage;
|
||||
|
||||
@@ -22,7 +23,7 @@ public class ChatMessageDeserializer implements JsonDeserializer<ChatMessage> {
|
||||
@Override
|
||||
public ChatMessage deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
|
||||
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.GERMAN);
|
||||
|
||||
JsonObject json = (JsonObject) jsonElement;
|
||||
|
||||
@@ -30,6 +31,12 @@ public class ChatMessageDeserializer implements JsonDeserializer<ChatMessage> {
|
||||
int recipientPersonOid = Long.valueOf(json.get("EmpfängerPersonOid").getAsLong()).intValue();
|
||||
int serverseitigeOid = Long.valueOf(json.get("Oid").getAsLong()).intValue();
|
||||
String chatText = json.get("ChatText").getAsString();
|
||||
String messageId = null;
|
||||
|
||||
boolean isMessageIdNull = json.get("MessageId").isJsonNull();
|
||||
if(!isMessageIdNull) {
|
||||
messageId = json.get("MessageId").getAsString();
|
||||
}
|
||||
|
||||
boolean isDelivered = json.get("IsDelivered").getAsBoolean();
|
||||
|
||||
@@ -47,7 +54,7 @@ public class ChatMessageDeserializer implements JsonDeserializer<ChatMessage> {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
ChatMessage result = new ChatMessage(senderPersonOid, recipientPersonOid, insTs, chatText, isDelivered, serverseitigeOid, isTeam);
|
||||
ChatMessage result = new ChatMessage(senderPersonOid, recipientPersonOid, insTs, chatText, isDelivered, serverseitigeOid, isTeam, messageId);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -28,10 +28,14 @@ public class ConnectivityReceiver extends BroadcastReceiver {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
BeWoLog.writeToLogFile("ConnectivityReceiver hat Netzwerkstatusänderung bekommen");
|
||||
|
||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
|
||||
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
|
||||
|
||||
BeWoLog.writeToLogFile("Bin " + (networkInfo != null && networkInfo.isConnected() ? "online" : "offline"));
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
|
||||
if(networkInfo != null && networkInfo.isConnected()) {
|
||||
|
||||
@@ -12,6 +12,9 @@ import android.os.Bundle;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
|
||||
import com.octo.android.robospice.SpiceManager;
|
||||
import com.octo.android.robospice.UncachedSpiceService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
@@ -54,7 +57,6 @@ public class Util {
|
||||
//TODO: Notifications zählen. Bei Nachrichten verschiedener Unterhaltungen nur noch eine kleine Notification anzeigen mit "Sie haben x Nachrichten in y Unterhaltungen
|
||||
public static void SetNotify(String username, String message, int recipientOid, boolean isTeam, String teamMemberOids, String teamMemberNames, boolean isEmployee, Context packageContext) {
|
||||
int unreadMessagesCount = entity2MessagesCountRel.size() + 1;
|
||||
//TODO: unterscheiden, ob es sich um eine einzelne Benachrichtigung handelt
|
||||
|
||||
if(SocketManager.notificationEntities.keySet().size() >= 1) {
|
||||
conversationsCount = SocketManager.notificationEntities.keySet().size();
|
||||
@@ -161,82 +163,6 @@ public class Util {
|
||||
alert.create().show();
|
||||
}
|
||||
|
||||
public static void reconnectWithServer(boolean isConnected, final Context context) {
|
||||
Log.e("UTIL", isConnected ? "Ist mit dem Internet/WLAN verbunden" : "Ist mit keinem Netzwerk verbunden");
|
||||
|
||||
if(isConnected) {
|
||||
try {
|
||||
SocketManager.loginCallback = new LoginCallback() {
|
||||
@Override
|
||||
public void doCallback() {
|
||||
Log.e("LOGIN_CALLBACK", "LoginCallback aufgerufen. Verschicke nicht verschickte Nachrichten...");
|
||||
|
||||
sendUnsentMessages(context);
|
||||
|
||||
sendStatusRequest();
|
||||
|
||||
// TODO: Nachrichten herunterladen, sofern man sich in der ChatActivity befindet
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
SocketManager.connectToServer();
|
||||
|
||||
Log.i("RECONNECT_WITH_SERVER", "connectToServer aufgerufen...");
|
||||
}
|
||||
catch(Exception es) {
|
||||
Log.e("RECONNECT_WITH_SERVER", "Ausnahme beim Login nach Reconnect");
|
||||
es.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendUnsentMessages(final Context context) {
|
||||
Thread thread = new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
DatabaseHandler databaseHandler = DatabaseHandler.getInstance(context);
|
||||
|
||||
ArrayList<ChatMessage> unsentMessages = databaseHandler.getUnsentChatMessages();
|
||||
|
||||
for(ChatMessage cm : unsentMessages) {
|
||||
final Packet unsentPacket = new Packet();
|
||||
|
||||
unsentPacket.ChatDataIdentifier = cm.IsTeam ? DataIdentifier.TEAM : DataIdentifier.MESSAGE;
|
||||
unsentPacket.ChatMessage = cm.ChatText;
|
||||
unsentPacket.ChatName = SoapConnectionManager.User.getFullName();
|
||||
unsentPacket.RecipientPersonOid = cm.RecipientPersonOid;
|
||||
unsentPacket.ClientseitigeOid = cm.Id;
|
||||
unsentPacket.MessageTimeStamp = cm.InsTs;
|
||||
unsentPacket.SenderPersonOid = cm.SenderPersonOid;
|
||||
unsentPacket.Tenant = SoapConnectionManager.User.getTenant();
|
||||
unsentPacket.IsDelivered = cm.IsDelivered;
|
||||
|
||||
SocketManager.sendMessage(unsentPacket);
|
||||
|
||||
Thread.sleep(50);
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
thread.start();
|
||||
}
|
||||
|
||||
public static void sendStatusRequest() {
|
||||
final Packet requestPacket = new Packet();
|
||||
|
||||
requestPacket.ChatDataIdentifier = DataIdentifier.STATUS_REQUEST;
|
||||
requestPacket.ChatName = SoapConnectionManager.User.getFullName();
|
||||
requestPacket.SenderPersonOid = SoapConnectionManager.User.getPersonOid().intValue();
|
||||
requestPacket.Tenant = SoapConnectionManager.User.getTenant();
|
||||
|
||||
SocketManager.sendMessage(requestPacket);
|
||||
}
|
||||
|
||||
public static ChatEntity getChatEntityFromOnlineEntitiesByOid(int personOid, boolean isTeam) {
|
||||
for(ChatEntity item : SocketManager.onlineEntities) {
|
||||
if(item.getOid() == personOid && item.getIsTeam() == isTeam) {
|
||||
@@ -283,4 +209,6 @@ public class Util {
|
||||
public static boolean contains(final Integer[] array, final int key) {
|
||||
return Arrays.asList(array).contains(key);
|
||||
}
|
||||
|
||||
public static String LOGFILENAME = "BeWoLog.txt";
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 293 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
@@ -1,41 +0,0 @@
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingTop="@dimen/activity_vertical_margin"
|
||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
tools:context=".MainActivityMitarbeiter"
|
||||
>
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Chat"
|
||||
android:id="@+id/Chatbutton"
|
||||
android:layout_marginTop="54dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentEnd="true" />
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Doku"
|
||||
android:id="@+id/Dokubutton"
|
||||
android:layout_below="@+id/Chatbutton"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="120dp"
|
||||
android:layout_alignEnd="@+id/Chatbutton" />
|
||||
|
||||
<Button
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Logout"
|
||||
android:id="@+id/Logoutbutton"
|
||||
android:layout_below="@+id/Dokubutton"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_marginTop="120dp"
|
||||
android:layout_alignParentEnd="true" />
|
||||
</RelativeLayout>
|
||||
@@ -3,38 +3,32 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="0dp"
|
||||
android:orientation="vertical"
|
||||
android:background="@color/white"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context=".ChatActivity">
|
||||
|
||||
<LinearLayout
|
||||
<ListView
|
||||
android:id="@+id/list_msg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="0.9"
|
||||
android:background="@color/white">
|
||||
|
||||
<ListView
|
||||
android:id="@+id/list_msg"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:divider="@null"
|
||||
android:listSelector="@android:color/transparent"
|
||||
android:stackFromBottom="true"
|
||||
android:background="@color/white"
|
||||
android:transcriptMode="alwaysScroll"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
android:layout_weight="1"
|
||||
android:divider="@null"
|
||||
android:listSelector="@android:color/transparent"
|
||||
android:stackFromBottom="true"
|
||||
android:background="@color/white"
|
||||
android:transcriptMode="alwaysScroll"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
/>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="22dp"
|
||||
android:layout_weight="0.1"
|
||||
android:layout_height="60dp"
|
||||
android:minHeight="50dp"
|
||||
android:padding="0dp"
|
||||
android:background="@android:color/white">
|
||||
android:background="@color/white">
|
||||
|
||||
<EditText
|
||||
android:layout_width="0dp"
|
||||
|
||||
@@ -34,14 +34,15 @@
|
||||
android:paddingBottom="5dp"
|
||||
android:textColor="@android:color/black"/>
|
||||
|
||||
<!-- 5 dp-->
|
||||
<!--<TextView-->
|
||||
<!--android:id="@+id/txt_msg_tick"-->
|
||||
<!--android:layout_width="wrap_content"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:gravity="end"-->
|
||||
<!--android:padding="5dp"-->
|
||||
<!--android:textColor="@android:color/holo_blue_light"/>-->
|
||||
<ImageView
|
||||
android:id="@+id/pending_msg_img"
|
||||
android:src="@drawable/noch_nicht_an_server_uebertragen"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:layout_gravity="end"
|
||||
android:padding="5dp"
|
||||
android:visibility="visible"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -9,11 +9,10 @@
|
||||
android:id="@+id/imageView1"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:src="@drawable/bslogo"
|
||||
android:scaleType="fitCenter" />
|
||||
|
||||
android:scaleType="fitCenter"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentStart="true"/>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -6,5 +6,7 @@
|
||||
<item name="colorPrimary">@color/beyondsoft_orange</item>
|
||||
<item name="colorAccent">@color/beyondsoft_orange</item>
|
||||
<item name="android:statusBarColor">?android:attr/colorPrimary</item>
|
||||
<item name="android:navigationBarColor">@color/beyondsoft_orange</item>
|
||||
<item name="android:colorForeground">@color/beyondsoft_orange</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -5,6 +5,7 @@
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/beyondsoft_orange</item>
|
||||
<item name="colorAccent">@color/beyondsoft_orange</item>
|
||||
<item name="android:colorForeground">@color/beyondsoft_orange</item>
|
||||
</style>
|
||||
|
||||
<!--<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">-->
|
||||
|
||||
@@ -5,7 +5,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.2.0'
|
||||
classpath 'com.android.tools.build:gradle:2.2.2'
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# Default value: -Xmx10248m -XX:MaxPermSize=256m
|
||||
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
|
||||
org.gradle.jvmargs=-Xmx2048m
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
|
||||
@@ -13,6 +13,8 @@ namespace BeWo.ViewModel
|
||||
|
||||
public static string PropertyName_IstGelesen = "IstGelesen";
|
||||
|
||||
public static string PropertyName_MessageId = "MessageId";
|
||||
|
||||
private string _ChatText;
|
||||
|
||||
private DateTime _Uhrzeit;
|
||||
@@ -27,12 +29,24 @@ namespace BeWo.ViewModel
|
||||
|
||||
private long? _TeamOid;
|
||||
|
||||
private string _MessageId;
|
||||
|
||||
public ChatMessageVM(ChatMessageDC pDC)
|
||||
: base(pDC, true)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual string MessageId
|
||||
{
|
||||
get { return _MessageId; }
|
||||
set
|
||||
{
|
||||
if(AreDifferent(_MessageId, value))
|
||||
{
|
||||
_MessageId = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual string ChatText
|
||||
{
|
||||
@@ -144,24 +158,26 @@ namespace BeWo.ViewModel
|
||||
|
||||
protected override void InitByDataContract(ChatMessageDC pDataContract)
|
||||
{
|
||||
_SenderPersonOid = pDataContract.SenderPersonOid;
|
||||
_SenderPersonOid = pDataContract.SenderPersonOid;
|
||||
_EmpfängerPersonOid = pDataContract.EmpfängerPersonOid;
|
||||
_Uhrzeit = pDataContract.Uhrzeit;
|
||||
_ChatText = pDataContract.ChatText;
|
||||
_IsDelivered = pDataContract.IsDelivered;
|
||||
_IstGelesen = pDataContract.IstGelesen;
|
||||
_TeamOid = pDataContract.TeamOid;
|
||||
_Uhrzeit = pDataContract.Uhrzeit;
|
||||
_ChatText = pDataContract.ChatText;
|
||||
_IsDelivered = pDataContract.IsDelivered;
|
||||
_IstGelesen = pDataContract.IstGelesen;
|
||||
_TeamOid = pDataContract.TeamOid;
|
||||
_MessageId = pDataContract.MessageId;
|
||||
}
|
||||
|
||||
protected override ChatMessageDC MapToDataContract(ChatMessageDC pDataContract, bool doCommit)
|
||||
{
|
||||
pDataContract.SenderPersonOid = _SenderPersonOid;
|
||||
pDataContract.SenderPersonOid = _SenderPersonOid;
|
||||
pDataContract.EmpfängerPersonOid = _EmpfängerPersonOid;
|
||||
pDataContract.Uhrzeit = _Uhrzeit;
|
||||
pDataContract.ChatText = _ChatText;
|
||||
pDataContract.IsDelivered = _IsDelivered;
|
||||
pDataContract.IstGelesen = _IstGelesen;
|
||||
pDataContract.TeamOid = _TeamOid;
|
||||
pDataContract.Uhrzeit = _Uhrzeit;
|
||||
pDataContract.ChatText = _ChatText;
|
||||
pDataContract.IsDelivered = _IsDelivered;
|
||||
pDataContract.IstGelesen = _IstGelesen;
|
||||
pDataContract.TeamOid = _TeamOid;
|
||||
pDataContract.MessageId = _MessageId;
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
@@ -139,8 +139,16 @@ namespace BeWoChatServer
|
||||
|
||||
dataPacket.GetData(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("dataPacket ist korrupt: " + dataPacket);
|
||||
}
|
||||
|
||||
switch(dataPacket.DataIdentifier) {
|
||||
case DataIdentifier.KeepAlive:
|
||||
|
||||
break;
|
||||
|
||||
switch(dataPacket.DataIdentifier) {
|
||||
case DataIdentifier.Login:
|
||||
try
|
||||
{
|
||||
@@ -167,11 +175,21 @@ namespace BeWoChatServer
|
||||
clientList[dataPacket.Socket].MacAddress = dataPacket.ChatMessage;
|
||||
}
|
||||
|
||||
var notificationPacket = new Packet(dataPacket.Socket, dataPacket.ClientName, dataPacket.SenderPersonOid, 0, dataPacket.IsEmployee) { DataIdentifier = DataIdentifier.StatusNotificationLogin, Tenant = dataPacket.Tenant };
|
||||
var notificationPacket = new Packet(
|
||||
dataPacket.Socket,
|
||||
dataPacket.ClientName,
|
||||
dataPacket.SenderPersonOid,
|
||||
0,
|
||||
dataPacket.IsEmployee)
|
||||
{
|
||||
DataIdentifier = DataIdentifier.StatusNotificationLogin,
|
||||
Tenant = dataPacket.Tenant
|
||||
};
|
||||
|
||||
Console.WriteLine(DateTime.Now + ": Benachrichtige die anderen angemeldeten Clients. Alte Logins enthalten: " + alteLogins);
|
||||
foreach (var client in clientList.Where(w => !w.Value.PersonOid.Equals(dataPacket.SenderPersonOid)))
|
||||
{
|
||||
Console.WriteLine("Sende Login-Benachrichtigung an " + client.Value.MacAddress + " mit PersonOid " + client.Value.PersonOid);
|
||||
client.Key.Send(notificationPacket.GetDataStream());
|
||||
}
|
||||
|
||||
@@ -246,7 +264,7 @@ namespace BeWoChatServer
|
||||
{
|
||||
Console.BackgroundColor = ConsoleColor.Black;
|
||||
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||
Console.WriteLine(DateTime.Now + ": Chat-Nachricht erhalten: " + dataPacket.ChatMessage);
|
||||
Console.WriteLine(DateTime.Now + ": Chat-Nachricht erhalten: " + dataPacket.MessageTimeStamp.ToString("dd.MM.yyyy HH:mm:ss"));
|
||||
Console.BackgroundColor = ConsoleColor.Black;
|
||||
Console.ForegroundColor = ConsoleColor.Gray;
|
||||
|
||||
@@ -256,15 +274,16 @@ namespace BeWoChatServer
|
||||
|
||||
var chatMessage = new ChatMessage
|
||||
{
|
||||
SenderPersonOid = dataPacket.SenderPersonOid,
|
||||
ChatText = Encoding.UTF8.GetBytes(dataPacket.ChatMessage),
|
||||
SenderPersonOid = dataPacket.SenderPersonOid,
|
||||
ChatText = Encoding.UTF8.GetBytes(dataPacket.ChatMessage),
|
||||
EmpfaengerPersonOid = dataPacket.RecipientPersonOid,
|
||||
Uhrzeit = DateTime.Now,
|
||||
InsUser = dataPacket.ClientName,
|
||||
IsDelivered = true
|
||||
Uhrzeit = DateTime.Now,
|
||||
InsUser = dataPacket.ClientName,
|
||||
IsDelivered = true,
|
||||
MessageId = dataPacket.MessageId
|
||||
};
|
||||
|
||||
Console.WriteLine(DateTime.Now + ": Speichere die Chat-Nachricht in die Datenbank");
|
||||
Console.WriteLine(DateTime.Now + ": Speichere die Chat-Nachricht in der Datenbank");
|
||||
DAOFactory.GenericDAO.Insert(chatMessage);
|
||||
|
||||
if(chatMessage.Oid != null)
|
||||
@@ -290,7 +309,9 @@ namespace BeWoChatServer
|
||||
{
|
||||
ClientseitigeOid = dataPacket.ClientseitigeOid,
|
||||
ServerseitigeOid = dataPacket.ServerseitigeOid,
|
||||
DataIdentifier = DataIdentifier.MessageResponse
|
||||
DataIdentifier = DataIdentifier.MessageResponse,
|
||||
MessageTimeStamp = chatMessage.Uhrzeit,
|
||||
MessageId = dataPacket.MessageId
|
||||
};
|
||||
|
||||
Console.WriteLine(DateTime.Now + ": Sende Datenbank-Insert-Bestätigung an den Absender, damit die Nachricht später nicht doppelt auf den Client heruntergeladen wird");
|
||||
@@ -339,7 +360,9 @@ namespace BeWoChatServer
|
||||
EmpfaengerPersonOid = dataPacket.RecipientPersonOid,
|
||||
Uhrzeit = dataPacket.MessageTimeStamp,
|
||||
InsUser = dataPacket.ClientName,
|
||||
TeamOid = dataPacket.RecipientPersonOid
|
||||
TeamOid = dataPacket.RecipientPersonOid,
|
||||
IsDelivered = true,
|
||||
MessageId = dataPacket.MessageId
|
||||
};
|
||||
|
||||
var team = DAOFactory.GenericDAO.LoadByID<Team>(dataPacket.RecipientPersonOid);
|
||||
@@ -365,7 +388,8 @@ namespace BeWoChatServer
|
||||
{
|
||||
ClientseitigeOid = dataPacket.ClientseitigeOid,
|
||||
ServerseitigeOid = dataPacket.ServerseitigeOid,
|
||||
DataIdentifier = DataIdentifier.MessageResponse
|
||||
DataIdentifier = DataIdentifier.MessageResponse,
|
||||
MessageId = dataPacket.MessageId
|
||||
};
|
||||
|
||||
Console.WriteLine(DateTime.Now + ": Sende Datenbank-Insert-Bestätigung an den Absender, damit die Nachricht später nicht doppelt auf den Client heruntergeladen wird");
|
||||
|
||||
@@ -96,17 +96,19 @@ namespace BeWoPlanerAndroid
|
||||
[WebMethod(EnableSession = true)]
|
||||
public string GetAllChatMessagesForSenderAndRecipient(long pSenderPersonOid, long pRecipientPersonOid, string pExceptions, bool pIsForTeam)
|
||||
{
|
||||
var exceptions = new List<long>();
|
||||
Debug.WriteLine("Lade alle Nachrichten für einen Chat herunter.");
|
||||
|
||||
var exceptions = new List<string>();
|
||||
|
||||
if (pExceptions.Length > 0)
|
||||
{
|
||||
var splittedString = pExceptions.Split(';');
|
||||
exceptions = splittedString.Select(item => Convert.ToInt64(item)).ToList();
|
||||
exceptions = splittedString.ToList();
|
||||
}
|
||||
|
||||
var jsonMessages = new List<ChatMessageForJson>();
|
||||
|
||||
var messages = DAOFactory.SearchDAO.FindAllChatMessagesForAndroid(pSenderPersonOid, pRecipientPersonOid, exceptions, pIsForTeam).DoForEach(dfe => jsonMessages.Add(new ChatMessageForJson(dfe.EmpfaengerPersonOid, dfe.SenderPersonOid, dfe.IsDelivered, dfe.IstGelesen, dfe.TeamOid, dfe.ChatText, dfe.Uhrzeit, dfe.Oid, dfe.InsTs)));
|
||||
var messages = DAOFactory.SearchDAO.FindAllChatMessagesForAndroid(pSenderPersonOid, pRecipientPersonOid, exceptions, pIsForTeam).DoForEach(dfe => jsonMessages.Add(new ChatMessageForJson(dfe.EmpfaengerPersonOid, dfe.SenderPersonOid, dfe.IsDelivered, dfe.IstGelesen, dfe.TeamOid, dfe.ChatText, dfe.Uhrzeit, dfe.Oid, dfe.InsTs, dfe.MessageId)));
|
||||
|
||||
return JsonConvert.SerializeObject(jsonMessages);
|
||||
}
|
||||
@@ -115,7 +117,7 @@ namespace BeWoPlanerAndroid
|
||||
public string GetNewestMessages(long pRecipientPersonOid)
|
||||
{
|
||||
var jsonMessages = new List<ChatMessageForJson>();
|
||||
var liste = DAOFactory.SearchDAO.FindNewestChatMessages(pRecipientPersonOid).DoForEach(dfe => jsonMessages.Add(new ChatMessageForJson(dfe.EmpfaengerPersonOid, dfe.SenderPersonOid, dfe.IsDelivered, dfe.IstGelesen, dfe.TeamOid, dfe.ChatText, dfe.Uhrzeit, dfe.Oid, dfe.InsTs)));
|
||||
var liste = DAOFactory.SearchDAO.FindNewestChatMessages(pRecipientPersonOid).DoForEach(dfe => jsonMessages.Add(new ChatMessageForJson(dfe.EmpfaengerPersonOid, dfe.SenderPersonOid, dfe.IsDelivered, dfe.IstGelesen, dfe.TeamOid, dfe.ChatText, dfe.Uhrzeit, dfe.Oid, dfe.InsTs, dfe.MessageId)));
|
||||
|
||||
return JsonConvert.SerializeObject(jsonMessages);
|
||||
}
|
||||
@@ -181,6 +183,16 @@ namespace BeWoPlanerAndroid
|
||||
return "lebt";
|
||||
}
|
||||
|
||||
[WebMethod(EnableSession = true)]
|
||||
public string CheckChatMessagesByUUIDs(string messageIds)
|
||||
{
|
||||
var splittet = messageIds.Split(";").ToList();
|
||||
|
||||
var existingMessageIds = (DAOFactory.SearchDAO.FindChatMessageIds(splittet) ?? new List<string>()).ToList();
|
||||
|
||||
return JsonConvert.SerializeObject(existingMessageIds);
|
||||
}
|
||||
|
||||
public class ChatPerson
|
||||
{
|
||||
public long Oid { get; set; }
|
||||
@@ -220,8 +232,9 @@ namespace BeWoPlanerAndroid
|
||||
public long? TeamOid { get; set; }
|
||||
public long? Oid { get; set; }
|
||||
public DateTime? InsTs { get; set; }
|
||||
public string MessageId { get; set; }
|
||||
|
||||
public ChatMessageForJson(long? pRecipientOid, long? pSenderOid, bool pIsDelivered, int pIstGelesen, long? pTeamOid, byte[] pChatTextAsBytes, DateTime pUhrzeit, long? pOid, DateTime? pInsTs)
|
||||
public ChatMessageForJson(long? pRecipientOid, long? pSenderOid, bool pIsDelivered, int pIstGelesen, long? pTeamOid, byte[] pChatTextAsBytes, DateTime pUhrzeit, long? pOid, DateTime? pInsTs, string pMessageId)
|
||||
{
|
||||
EmpfängerPersonOid = pRecipientOid;
|
||||
SenderPersonOid = pSenderOid;
|
||||
@@ -232,6 +245,7 @@ namespace BeWoPlanerAndroid
|
||||
ChatText = Encoding.UTF8.GetString(pChatTextAsBytes);
|
||||
Oid = pOid;
|
||||
InsTs = pInsTs;
|
||||
MessageId = pMessageId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ using NHibernate.SqlCommand;
|
||||
using BS.Shared.Core;
|
||||
using BS.Shared;
|
||||
using BS.Shared.DataContracts.Compact;
|
||||
using NHibernate.Linq.Functions;
|
||||
using NHibernate.Transform;
|
||||
using Login = BeWo.Data.Entities.Login;
|
||||
|
||||
@@ -1607,7 +1608,7 @@ namespace BeWo.Data.Access
|
||||
return c.List<CustomerAPPCode>();
|
||||
}
|
||||
|
||||
public IEnumerable<ChatMessage> FindAllChatMessagesForAndroid(long pSenderOid, long pRecipientOid, List<long> pExceptions, bool pForTeam)
|
||||
public IEnumerable<ChatMessage> FindAllChatMessagesForAndroid(long pSenderOid, long pRecipientOid, List<string> pExceptions, bool pForTeam)
|
||||
{
|
||||
var c = CreateCriteriaIsActive<ChatMessage>()
|
||||
.Add(
|
||||
@@ -1618,26 +1619,26 @@ namespace BeWo.Data.Access
|
||||
Restrictions.And(
|
||||
Restrictions.Eq(ChatMessage.PropertyName_SenderPersonOid, pRecipientOid),
|
||||
Restrictions.Eq(ChatMessage.PropertyName_EmpfaengerPersonOid, pSenderOid))))
|
||||
.Add(Restrictions.Not(Restrictions.In(BeWoEntityBase.PropertyName_Oid, pExceptions)))
|
||||
.Add(Restrictions.Not(Restrictions.In(ChatMessage.PropertyName_MessageId, pExceptions)))
|
||||
.Add(Restrictions.IsNull(ChatMessage.PropertyName_TeamOid));
|
||||
|
||||
if(pForTeam)
|
||||
{
|
||||
c = CreateCriteriaIsActive<ChatMessage>()
|
||||
.Add(Restrictions.Eq(ChatMessage.PropertyName_TeamOid, pRecipientOid))
|
||||
.Add(Restrictions.Not(Restrictions.In(BeWoEntityBase.PropertyName_Oid, pExceptions)));
|
||||
.Add(Restrictions.Not(Restrictions.In(ChatMessage.PropertyName_MessageId, pExceptions)));
|
||||
}
|
||||
|
||||
return c.List<ChatMessage>();
|
||||
}
|
||||
|
||||
public IEnumerable<ChatMessage> FindAllUnreadChatMessages(List<long> pExceptions)
|
||||
{
|
||||
var c = CreateCriteriaIsActive<ChatMessage>()
|
||||
.Add(Restrictions.Not(Restrictions.In(BeWoEntityBase.PropertyName_Oid, pExceptions)));
|
||||
//public IEnumerable<ChatMessage> FindAllUnreadChatMessages(List<long> pExceptions)
|
||||
//{
|
||||
// var c = CreateCriteriaIsActive<ChatMessage>()
|
||||
// .Add(Restrictions.Not(Restrictions.In(ChatMessage.PropertyName_MessageId, pExceptions)));
|
||||
|
||||
return c.List<ChatMessage>();
|
||||
}
|
||||
// return c.List<ChatMessage>();
|
||||
//}
|
||||
|
||||
public Dictionary<Person, bool> FindAllChatAuthorizedPersonsForEmployee(long pEmployeeOid)
|
||||
{
|
||||
@@ -1674,10 +1675,22 @@ namespace BeWo.Data.Access
|
||||
|
||||
public IEnumerable<ChatMessage> FindNewestChatMessages(long pRecipientPersonOid)
|
||||
{
|
||||
var query = Session.CreateSQLQuery(string.Format("SELECT MAX({0}) FROM chatmessages WHERE {1} = {2} AND {3} IS NULL OR {3} IS NOT NULL AND {1} IN (SELECT t.{0} FROM Team t JOIN employee2team e ON e.{3} WHERE e.{4} = {2}) GROUP BY {1}, {5}", BeWoEntityBase.PropertyName_Oid, ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientPersonOid, "TeamOid", "EmployeeOid", ChatMessage.PropertyName_SenderPersonOid));
|
||||
var result = query.List<long>();
|
||||
var query2 = Session.CreateSQLQuery(string.Format("SELECT MAX({0}) FROM chatmessages WHERE ({1} = {2} OR {3} = {2}) AND {4} IS NULL OR {4} IS NOT NULL AND {1} IN (SELECT t.{0} FROM Team t JOIN employee2team e ON e.{4} = t.{0}) GROUP BY {1}, {3}",
|
||||
BeWoEntityBase.PropertyName_Oid, ChatMessage.PropertyName_EmpfaengerPersonOid, pRecipientPersonOid, ChatMessage.PropertyName_SenderPersonOid, "TeamOid"));
|
||||
|
||||
var result = query2.List<long>();
|
||||
|
||||
return result.Count > 0 ? DAOFactory.GenericDAO.LoadByIDs<ChatMessage>(result) : new List<ChatMessage>();
|
||||
}
|
||||
|
||||
public IEnumerable<string> FindChatMessageIds(List<string> messageIds)
|
||||
{
|
||||
var c = CreateCriteria<ChatMessage>()
|
||||
.Add(Restrictions.In(ChatMessage.PropertyName_MessageId, messageIds));
|
||||
|
||||
var liste = c.List<ChatMessage>();
|
||||
|
||||
return liste.Select(s => s.MessageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ namespace BeWo.Data.Entities
|
||||
|
||||
public static string PropertyName_IstGelesen = "IstGelesen";
|
||||
|
||||
public static string PropertyName_MessageId = "MessageId";
|
||||
|
||||
private byte[] _ChatText;
|
||||
|
||||
private long? _EmpfaengerPersonOid;
|
||||
@@ -31,6 +33,8 @@ namespace BeWo.Data.Entities
|
||||
|
||||
private long? _TeamOid;
|
||||
|
||||
private string _MessageId;
|
||||
|
||||
private DateTime _Uhrzeit;
|
||||
|
||||
public ChatMessage()
|
||||
@@ -38,6 +42,18 @@ namespace BeWo.Data.Entities
|
||||
_Tid = TableID.ChatMessage;
|
||||
}
|
||||
|
||||
public virtual string MessageId
|
||||
{
|
||||
get { return _MessageId; }
|
||||
set
|
||||
{
|
||||
if(AreDifferent(_MessageId, value))
|
||||
{
|
||||
_MessageId = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual byte[] ChatText
|
||||
{
|
||||
get { return _ChatText; }
|
||||
|
||||
@@ -1,25 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
|
||||
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
|
||||
<class name="BeWo.Data.Entities.ChatMessage,BeWo.Data" table="chatmessages">
|
||||
<class name="BeWo.Data.Entities.ChatMessage, BeWo.Data" table="chatmessages">
|
||||
<id name="Oid" column ="Oid" unsaved-value="null">
|
||||
<generator class="identity" />
|
||||
</id>
|
||||
<version type="Int64" column="Version" name="Version" />
|
||||
<property name="SenderPersonOid" column="SenderPersonOid" />
|
||||
<property name="EmpfaengerPersonOid" column="EmpfaengerPersonOid" />
|
||||
<property name="InsTs" />
|
||||
<property name="InsUser" />
|
||||
<property name="SenderPersonOid" column="SenderPersonOid" />
|
||||
<property name="EmpfaengerPersonOid" column="EmpfaengerPersonOid" />
|
||||
<property name="InsTs" />
|
||||
<property name="InsUser" />
|
||||
<property column="Tid" type="BS.Shared.TableID, BS.Shared" name="_Tid" access="field" />
|
||||
<property name="UdpUser" />
|
||||
<property name="IsActive" type="BS.Shared.ActivationTypeId, BS.Shared" />
|
||||
<property name="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" />
|
||||
<property name="Notice" />
|
||||
<property name="Uhrzeit" column="Uhrzeit" />
|
||||
<property name="ChatText" column="ChatText" />
|
||||
<property name="IsDelivered" column="istZugestellt" />
|
||||
<property name="IstGelesen" column="IstGelesen" />
|
||||
<property name="TeamOid" column="TeamOid" />
|
||||
<property name="UdpUser" />
|
||||
<property name="IsActive" type="BS.Shared.ActivationTypeId, BS.Shared" />
|
||||
<property name="SystemEntryID" type="BS.Shared.SystemEntryID, BS.Shared" />
|
||||
<property name="Notice" />
|
||||
<property name="Uhrzeit" column="Uhrzeit" />
|
||||
<property name="ChatText" column="ChatText" />
|
||||
<property name="IsDelivered" column="istZugestellt" />
|
||||
<property name="IstGelesen" column="IstGelesen" />
|
||||
<property name="TeamOid" column="TeamOid" />
|
||||
<property name="MessageId" column="MessageId" />
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
1
Model/changes 16-10-17.sql
Normal file
1
Model/changes 16-10-17.sql
Normal file
@@ -0,0 +1 @@
|
||||
ALTER TABLE chatmessages ADD COLUMN `MessageId` VARCHAR(1024) DEFAULT NULL;
|
||||
@@ -15,19 +15,21 @@ namespace BeWo.Service.DCEntityMapper
|
||||
pDataContract.IsDelivered = pEntity.IsDelivered;
|
||||
pDataContract.IstGelesen = pEntity.IstGelesen;
|
||||
pDataContract.TeamOid = pEntity.TeamOid;
|
||||
pDataContract.MessageId = pEntity.MessageId;
|
||||
|
||||
return pDataContract;
|
||||
}
|
||||
|
||||
public override ChatMessage MergeWithEntity(ChatMessageDC pDataContract, ChatMessage pEntity)
|
||||
{
|
||||
pEntity.SenderPersonOid = pDataContract.SenderPersonOid;
|
||||
pEntity.SenderPersonOid = pDataContract.SenderPersonOid;
|
||||
pEntity.EmpfaengerPersonOid = pDataContract.EmpfängerPersonOid;
|
||||
pEntity.Uhrzeit = pDataContract.Uhrzeit;
|
||||
pEntity.IsDelivered = pDataContract.IsDelivered;
|
||||
pEntity.ChatText = System.Text.Encoding.Default.GetBytes(pDataContract.ChatText);
|
||||
pEntity.IstGelesen = pDataContract.IstGelesen;
|
||||
pEntity.TeamOid = pDataContract.TeamOid;
|
||||
pEntity.Uhrzeit = pDataContract.Uhrzeit;
|
||||
pEntity.IsDelivered = pDataContract.IsDelivered;
|
||||
pEntity.ChatText = System.Text.Encoding.Default.GetBytes(pDataContract.ChatText);
|
||||
pEntity.IstGelesen = pDataContract.IstGelesen;
|
||||
pEntity.TeamOid = pDataContract.TeamOid;
|
||||
pEntity.MessageId = pDataContract.MessageId;
|
||||
|
||||
return pEntity;
|
||||
}
|
||||
|
||||
@@ -839,7 +839,8 @@ namespace BS.Shared
|
||||
StatusNotificationOnline,
|
||||
StatusNotificationOffline,
|
||||
LoginSuccess,
|
||||
StatusRequest
|
||||
StatusRequest,
|
||||
KeepAlive
|
||||
}
|
||||
|
||||
public enum ChatType
|
||||
|
||||
@@ -29,5 +29,8 @@ namespace BS.Shared.DataContracts
|
||||
|
||||
[DataMember]
|
||||
public long? TeamOid { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public string MessageId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -8,23 +8,27 @@ namespace BS.Shared
|
||||
{
|
||||
public class Packet
|
||||
{
|
||||
// Fehlercodes zwischen 1500 und 1999
|
||||
// Fehlercodes zwischen 1500 und 1999
|
||||
public Socket Socket { get; set; }
|
||||
public string ClientName { get; set; }
|
||||
public long SenderPersonOid { get; set; }
|
||||
public long RecipientPersonOid { get; set; }
|
||||
public DataIdentifier DataIdentifier { get; set; }
|
||||
public string ChatMessage { get; set; }
|
||||
public byte[] SoundDatei { get; set; }
|
||||
public byte[] DokumentenDatei { get; set; }
|
||||
public byte[] BildDatei { get; set; }
|
||||
public DateTime MessageTimeStamp { get; set; }
|
||||
public string Tenant { get; set; }
|
||||
public bool IsDelivered { get; set; }
|
||||
public long ServerseitigeOid { get; set; }
|
||||
public long ClientseitigeOid { get; set; }
|
||||
public bool IsEmployee { get; set; }
|
||||
public string MessageId { get; set; }
|
||||
|
||||
public byte[] DataBuffer = new byte[1024];
|
||||
|
||||
//Aufbau Message:
|
||||
// Aufbau Message:
|
||||
// die ersten fünf ";" ignorieren
|
||||
// SenderOid;RecipientOid;ClientNameLength;MessageLength;ChatDataIdentifier;Tenant;[ClientName][ChatMessage][MessageTimeStamp]
|
||||
|
||||
@@ -40,6 +44,7 @@ namespace BS.Shared
|
||||
ChatMessage = "";
|
||||
Tenant = "";
|
||||
IsEmployee = pIsEmployee;
|
||||
MessageId = "";
|
||||
}
|
||||
|
||||
public Packet()
|
||||
@@ -67,6 +72,10 @@ namespace BS.Shared
|
||||
var clientseitigeOidString = gesplittet[6];
|
||||
Tenant = gesplittet[7];
|
||||
var isEmployeeString = gesplittet[8];
|
||||
MessageId = gesplittet[9];
|
||||
//var SoundDateiAsString = gesplittet[10];
|
||||
//var DokumentenDateiAsString = gesplittet[11];
|
||||
//var BildDateiAsString = gesplittet[12];
|
||||
|
||||
DataIdentifier = (DataIdentifier) Convert.ToInt32(chatIdentifierString);
|
||||
|
||||
@@ -74,12 +83,12 @@ namespace BS.Shared
|
||||
RecipientPersonOid = Convert.ToInt64(recipientPersonOidString);
|
||||
ServerseitigeOid = Convert.ToInt64(serverseitigeOidString);
|
||||
ClientseitigeOid = Convert.ToInt64(clientseitigeOidString);
|
||||
IsEmployee = Convert.ToBoolean(isEmployeeString);
|
||||
IsEmployee = Convert.ToInt32(isEmployeeString) == 1;
|
||||
|
||||
var chatNameLength = Convert.ToInt32(chatNameLengthString);
|
||||
var chatMessageLength = Convert.ToInt32(chatMessageLengthString);
|
||||
|
||||
var headerLength = senderPersonOidString.Length + recipientPersonOidString.Length + chatNameLengthString.Length + chatMessageLengthString.Length + chatIdentifierString.Length + Tenant.Length + serverseitigeOidString.Length + clientseitigeOidString.Length + 10;
|
||||
var headerLength = senderPersonOidString.Length + recipientPersonOidString.Length + chatNameLengthString.Length + chatMessageLengthString.Length + chatIdentifierString.Length + Tenant.Length + serverseitigeOidString.Length + clientseitigeOidString.Length + MessageId.Length + 12;
|
||||
var actualMessage = message.Substring(headerLength - 1);
|
||||
|
||||
ClientName = actualMessage.Substring(0, chatNameLength);
|
||||
@@ -103,7 +112,7 @@ namespace BS.Shared
|
||||
{
|
||||
var result = "";
|
||||
|
||||
result += SenderPersonOid + ";" + RecipientPersonOid + ";" + ClientName.Length + ";" + ChatMessage.Length + ";" + (int) DataIdentifier + ";" + ServerseitigeOid + ";" + ClientseitigeOid + ";" + Tenant + ";" + (IsEmployee ? 1 : 0) + ";" + ClientName + ChatMessage + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "" + (IsDelivered ? 1 : 0);
|
||||
result += SenderPersonOid + ";" + RecipientPersonOid + ";" + ClientName.Length + ";" + ChatMessage.Length + ";" + (int)DataIdentifier + ";" + ServerseitigeOid + ";" + ClientseitigeOid + ";" + Tenant + ";" + (IsEmployee ? 1 : 0) + ";" + MessageId + ";" + ClientName + ChatMessage + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "" + (IsDelivered ? 1 : 0);
|
||||
|
||||
Debug.WriteLine("Verschicke Paket: " + result);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user