SocketServerService
hacker98
plain_text
a year ago
10 kB
9
Indexable
main
package com.example.chatappdemo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import com.example.chatappdemo.DAO.ConversationDAO;
import com.example.chatappdemo.DAO.MessDAO;
import com.example.chatappdemo.DAO.MyinfoDAO;
import com.example.chatappdemo.DAO.ReceiveRequestDAO;
import com.example.chatappdemo.DAO.SentRequestDAO;
import com.example.chatappdemo.model.Conversation;
import com.example.chatappdemo.model.Mess;
import com.example.chatappdemo.model.Myinfo;
import com.example.chatappdemo.model.ReceiveRequest;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Locale;
public class SocketServerService extends Service {
private static final String TAG = "SocketServerService";
private ServerSocket serverSocket;
private Thread socketServerThread;
private javaExternal func= new javaExternal();
private Myinfo myinfo;
@Override
public void onCreate() {
super.onCreate();
MyinfoDAO myinfoDAO = new MyinfoDAO(this);
String myIP= getDeviceIpAddress();
myinfo = myinfoDAO.getInfoByIP(myIP);
// Khởi tạo server trên một cổng nào đó
socketServerThread = new Thread(() -> {
try {
serverSocket = new ServerSocket(1234); // Chọn cổng cho server
Log.i(TAG, "Server started on port 1234");
while (!Thread.currentThread().isInterrupted()) {
Socket clientSocket = serverSocket.accept();
Log.i(TAG, "Client connected");
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String message = in.readLine();
Log.i(TAG, "Message from client: " + message);
String messText="";
String ClientIP= String.valueOf(clientSocket.getInetAddress().getHostAddress());
try{
JSONObject jsonObject=new JSONObject(message.toString());
String type=jsonObject.getString("type");
switch (type) {
case "MESSAGE": {
JSONObject messageContent = jsonObject.getJSONObject("content");
messText = messageContent.getString("mess_text");
// save database
Log.i("Socket","tin nhan nhan duoc tu" +ClientIP+ " la : " + messText);
ConversationDAO conversationDAO = new ConversationDAO(this);
MessDAO messDAO =new MessDAO(this);
Conversation conversation =conversationDAO.getConversationByIPReceive(ClientIP);
// giai ma tin nhan
String messAlgorithm= messageContent.getString("algorithm");
String messDecrypt="giai ma that bai";
if(messAlgorithm.equals("AES128")){
messDecrypt = func.decryptAES128(messText,conversation.getKeyEncrypt128());
}else if(messAlgorithm.equals("AES256")){
messDecrypt = func.decryptAES256(messText,conversation.getKeyEncrypt256());
}else if(messAlgorithm.equals("SNOWV")){
messDecrypt = func.decryptSNOWV(messText,conversation.getKeyEncrypt256());
}
// save database
Mess messSave= new Mess(conversation.getConver_id(),ClientIP,messText,getCurrentTime(),messAlgorithm);
conversation.setLast_mess(messDecrypt);
conversation.setLast_mess_time(getCurrentTime());
conversationDAO.updateConversation(conversation);
messDAO.insertMess(messSave);
// tao su kien
Intent intent = new Intent("com.example.chatappdemo.NEW_MESSAGE");
intent.putExtra("ClientIP",ClientIP);
intent.putExtra("message", messDecrypt);
sendBroadcast(intent);
break;
}
case "FRIEND_REQUEST": {
JSONObject messContent = jsonObject.getJSONObject("content");
// save database
String IPRequest = messContent.getString("IPRequest");
String name = messContent.getString("name");
String publicKey = messContent.getString("publicKey");
ReceiveRequest receiveRequest = new ReceiveRequest(IPRequest, name, publicKey);
ReceiveRequestDAO receiveRequestDAO = new ReceiveRequestDAO(this);
receiveRequestDAO.insertReceiveRequest(receiveRequest);
Intent intent = new Intent("com.example.chatappdemo.NEW_REQUEST");
sendBroadcast(intent);
break;
}
case "FRIEND_RESPONSE": {
JSONObject messContent = jsonObject.getJSONObject("content");
SentRequestDAO sentRequestDAO = new SentRequestDAO(this);
ConversationDAO conversationDAO = new ConversationDAO(this);
String IPSent = messContent.getString("IPSent");
String name = messContent.getString("name");
String key128 = messContent.getString("key128");
String key256= messContent.getString("key256");
String status = messContent.getString("status");
if (status.equals("ACCEPT")) {
sentRequestDAO.deleteSentRequestByIP(IPSent);
// giai ma khoa ma hoa
String keyEnrypt128= func.decryptRSA(key128,myinfo.getPrivateKey());
String keyEnrypt256 = func.decryptRSA(key256,myinfo.getPrivateKey());
// luu vao database
Conversation conversation = new Conversation(IPSent, name, " ", " ", keyEnrypt128,keyEnrypt256,"AES128");
conversationDAO.insertConversation(conversation);
// gui broadcast
Intent intent = new Intent("com.example.chatappdemo.CHANGE_ADAPTER_ACCEPT");
intent.putExtra("status",status);
intent.putExtra("ClientIP",ClientIP);
sendBroadcast(intent);
} else {
sentRequestDAO.deleteSentRequestByIP(IPSent);
Intent intent = new Intent("com.example.chatappdemo.CHANGE_ADAPTER_REFUSE");
intent.putExtra("status",status);
intent.putExtra("ClientIP",ClientIP);
sendBroadcast(intent);
}
break;
}
}
}catch (Exception e){
e.printStackTrace();
}
in.close();
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
});
socketServerThread.start();
}
public String getCurrentTime(){
SimpleDateFormat sdf= new SimpleDateFormat("hh:mm a", Locale.getDefault());
return sdf.format(new Date());
}
private String getDeviceIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().matches("\\d+\\.\\d+\\.\\d+\\.\\d+")) {
return inetAddress.getHostAddress();
}
}
}
} catch (Exception ex) {
Log.e(TAG, "Không thể lấy địa chỉ IP của thiết bị", ex);
}
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
// Dừng server socket khi service bị hủy
if (serverSocket != null && !serverSocket.isClosed()) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
socketServerThread.interrupt();
}
@Override
public IBinder onBind(Intent intent) {
return null; // Không sử dụng binding
}
}Editor is loading...
Leave a Comment