SocketServerService
hacker98
plain_text
5 months ago
10 kB
5
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