mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 18:36:30 +02:00
uwu
This commit is contained in:
@@ -9,6 +9,7 @@ import java.net.Socket;
|
||||
import java.net.UnknownHostException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import es.um.redes.nanoFiles.tcp.message.PeerMessage;
|
||||
import es.um.redes.nanoFiles.tcp.message.PeerMessageOps;
|
||||
@@ -35,8 +36,10 @@ public class NFConnector {
|
||||
* partir de los streams de entrada/salida del socket creado. Se usarán para
|
||||
* enviar (dos) y recibir (dis) datos del servidor.
|
||||
*/
|
||||
try {
|
||||
|
||||
socket = new Socket(serverAddr.getAddress(), serverAddr.getPort());
|
||||
socket = new Socket(fserverAddr.getAddress(), fserverAddr.getPort());
|
||||
} catch (Exception e) { e.printStackTrace(); }
|
||||
dis = new DataInputStream(socket.getInputStream());
|
||||
dos = new DataOutputStream(socket.getOutputStream());
|
||||
|
||||
@@ -57,11 +60,11 @@ public class NFConnector {
|
||||
System.out.println("received " + intNumber);
|
||||
*/
|
||||
try {
|
||||
PeerMessage msgOut = new PeerMessage(PeerMessageOps.OPCODE_REQUEST_PEER_FILES);
|
||||
PeerMessage msgOut = new PeerMessage((byte) 1);
|
||||
msgOut.writeMessageToOutputStream(dos);
|
||||
System.out.println("sent " + PeerMessageOps.opcodeToOperation(msgOut.getOpcode()));
|
||||
PeerMessage msgIn = PeerMessage.readMessageFromInputStream(dis);
|
||||
System.out.println("received " + PeerMessageOps.opcodeToOperation(msgIn.getOpcode()));
|
||||
System.out.println("received " + msgIn.getOpcode() + " " + PeerMessageOps.opcodeToOperation(msgIn.getOpcode()));
|
||||
System.out.println("(" + new SimpleDateFormat("HH:mm:ss:SS").format(new Date()));
|
||||
if (msgIn.getOpcode() == PeerMessageOps.OPCODE_PEER_FILE) {
|
||||
System.out.println("file content: ");
|
||||
@@ -76,7 +79,29 @@ public class NFConnector {
|
||||
}
|
||||
|
||||
|
||||
|
||||
public FileInfo[] getFileList() {
|
||||
try {
|
||||
LinkedList<FileInfo> filelist = new LinkedList<>();
|
||||
PeerMessage msgOut = new PeerMessage(PeerMessageOps.OPCODE_REQUEST_PEER_FILES);
|
||||
msgOut.writeMessageToOutputStream(dos);
|
||||
PeerMessage msgIn = PeerMessage.readMessageFromInputStream(dis);
|
||||
if (msgIn.getOpcode() == PeerMessageOps.OPCODE_PEER_FILE) {
|
||||
boolean last = false;
|
||||
while (!last) {
|
||||
long size = msgIn.getFileSize();
|
||||
String hash = msgIn.getFileHash();
|
||||
String name = msgIn.getFilenameVal();
|
||||
FileInfo file = new FileInfo(hash, name, size, null);
|
||||
filelist.add(file);
|
||||
last = msgIn.getLast();
|
||||
if (!last) msgIn = PeerMessage.readMessageFromInputStream(dis); // tengo que ver si puedo hacerlo diferente
|
||||
}
|
||||
} else { return null; }
|
||||
return filelist.toArray(new FileInfo[0]);
|
||||
} catch (IOException e) { e.printStackTrace(); return null; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public InetSocketAddress getServerAddr() {
|
||||
|
||||
@@ -107,12 +107,13 @@ public class PeerMessage {
|
||||
* Usar dis.readFully para leer un array de bytes, dis.readInt para leer un
|
||||
* entero, etc.
|
||||
*/
|
||||
PeerMessage message = new PeerMessage();
|
||||
byte opcode = dis.readByte();
|
||||
PeerMessage message = new PeerMessage(opcode);
|
||||
switch (opcode) {
|
||||
case PeerMessageOps.OPCODE_REQUEST_PEER_FILES:
|
||||
case PeerMessageOps.OPCODE_PEER_FILES_ERROR: break;
|
||||
case PeerMessageOps.OPCODE_PEER_FILE: {
|
||||
|
||||
boolean last = false;
|
||||
byte lastVal = dis.readByte();
|
||||
|
||||
@@ -134,6 +135,7 @@ public class PeerMessage {
|
||||
message.setFileHash(new String(fileHash));
|
||||
message.setFilenameLong(filenameLong);
|
||||
message.setFilenameVal(new String(filenameVal));
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -156,6 +158,7 @@ public class PeerMessage {
|
||||
*/
|
||||
|
||||
dos.writeByte(opcode);
|
||||
System.out.println(opcode);
|
||||
switch (opcode) {
|
||||
case PeerMessageOps.OPCODE_REQUEST_PEER_FILES:
|
||||
case PeerMessageOps.OPCODE_PEER_FILES_ERROR: break;
|
||||
|
||||
39
es/um/redes/nanoFiles/tcp/message/PeerMessageTest.java
Normal file
39
es/um/redes/nanoFiles/tcp/message/PeerMessageTest.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package es.um.redes.nanoFiles.tcp.message;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PeerMessageTest {
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
String nombreArchivo = "peermsg.bin";
|
||||
DataOutputStream fos = new DataOutputStream(new FileOutputStream(nombreArchivo));
|
||||
|
||||
/*
|
||||
* TODO: Probar a crear diferentes tipos de mensajes (con los opcodes válidos
|
||||
* definidos en PeerMessageOps), estableciendo los atributos adecuados a cada
|
||||
* tipo de mensaje. Luego, escribir el mensaje a un fichero con
|
||||
* writeMessageToOutputStream para comprobar que readMessageFromInputStream
|
||||
* construye un mensaje idéntico al original.
|
||||
*/
|
||||
PeerMessage msgOut = new PeerMessage(PeerMessageOps.OPCODE_REQUEST_PEER_FILES);
|
||||
msgOut.writeMessageToOutputStream(fos);
|
||||
|
||||
DataInputStream fis = new DataInputStream(new FileInputStream(nombreArchivo));
|
||||
PeerMessage msgIn = PeerMessage.readMessageFromInputStream((DataInputStream) fis);
|
||||
/*
|
||||
* TODO: Comprobar que coinciden los valores de los atributos relevantes al tipo
|
||||
* de mensaje en ambos mensajes (msgOut y msgIn), empezando por el opcode.
|
||||
*/
|
||||
if (msgOut.getOpcode() != msgIn.getOpcode()) {
|
||||
System.out.println(msgOut.getOpcode() + " " + msgIn.getOpcode());
|
||||
System.err.println("Opcode does not match!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,11 @@ import java.net.InetSocketAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
import es.um.redes.nanoFiles.application.NanoFiles;
|
||||
import es.um.redes.nanoFiles.tcp.message.PeerMessage;
|
||||
import es.um.redes.nanoFiles.tcp.message.PeerMessageOps;
|
||||
import es.um.redes.nanoFiles.util.FileInfo;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -78,12 +83,26 @@ public class NFServer implements Runnable {
|
||||
DataInputStream dis = new DataInputStream(socket.getInputStream());
|
||||
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
|
||||
|
||||
int intNumber = dis.readInt();
|
||||
/* int intNumber = dis.readInt();
|
||||
System.out.println("received " + intNumber);
|
||||
|
||||
int newInt = intNumber + 1;
|
||||
dos.writeInt(newInt);
|
||||
System.out.println("sent " + newInt);
|
||||
System.out.println("sent " + newInt); */
|
||||
|
||||
PeerMessage msgIn = PeerMessage.readMessageFromInputStream(dis);
|
||||
System.out.println("received " + msgIn.getOpcode() + " " + PeerMessageOps.opcodeToOperation(msgIn.getOpcode()));
|
||||
|
||||
if (msgIn.getOpcode() == PeerMessageOps.OPCODE_REQUEST_PEER_FILES) {
|
||||
PeerMessage msgOut = new PeerMessage(PeerMessageOps.OPCODE_PEER_FILE);
|
||||
msgOut.setLast(true);
|
||||
msgOut.setFileSize(62);
|
||||
msgOut.setFileHash("abcdefghijklmnoprqstuvwxyzaaaaaaaaaaaaaa");
|
||||
msgOut.setFilenameLong((byte) 10);
|
||||
msgOut.setFilenameVal("prueba.txt");
|
||||
msgOut.writeMessageToOutputStream(dos);
|
||||
System.out.println("sent " + PeerMessageOps.opcodeToOperation(msgOut.getOpcode()));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// ???????
|
||||
}
|
||||
@@ -183,13 +202,36 @@ public class NFServer implements Runnable {
|
||||
|
||||
InetSocketAddress clientAddr = (InetSocketAddress) socket.getRemoteSocketAddress();
|
||||
try {
|
||||
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
|
||||
DataInputStream dis = new DataInputStream(socket.getInputStream());
|
||||
while(true) {
|
||||
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
|
||||
DataInputStream dis = new DataInputStream(socket.getInputStream());
|
||||
|
||||
PeerMessage msgIn = PeerMessage.readMessageFromInputStream(dis);
|
||||
switch (msgIn.getOpcode()) {
|
||||
case PeerMessageOps.OPCODE_REQUEST_PEER_FILES:
|
||||
|
||||
|
||||
FileInfo[] archivos = NanoFiles.db.getFiles();
|
||||
|
||||
for (int i = 0; i < archivos.length; i++) {
|
||||
PeerMessage msgOut = new PeerMessage(PeerMessageOps.OPCODE_PEER_FILE);
|
||||
FileInfo archivo = archivos[i];
|
||||
|
||||
msgOut.setFileHash(archivo.fileHash);
|
||||
msgOut.setFileSize(archivo.fileSize);
|
||||
msgOut.setFilenameVal(archivo.fileName);
|
||||
msgOut.setFilenameLong((byte)archivo.fileName.length());
|
||||
msgOut.setLast(false);
|
||||
if (i == archivos.length - 1) msgOut.setLast(true);
|
||||
msgOut.writeMessageToOutputStream(dos);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
package es.um.redes.nanoFiles.tcp.server;
|
||||
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class NFServerState {
|
||||
private int numberOfConnections;
|
||||
private ArrayList<Socket> sockets;
|
||||
|
||||
public NFServerState() {
|
||||
numberOfConnections = 0;
|
||||
sockets = new ArrayList<>();
|
||||
}
|
||||
|
||||
public int getNumberOfConnections() {
|
||||
return numberOfConnections;
|
||||
}
|
||||
|
||||
public List<Socket> getSockets() {
|
||||
// tu puta madre va a hacer copias
|
||||
return sockets;
|
||||
}
|
||||
|
||||
public void updateState(Socket socket) {
|
||||
sockets.add(socket);
|
||||
numberOfConnections++;
|
||||
}
|
||||
}
|
||||
package es.um.redes.nanoFiles.tcp.server;
|
||||
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class NFServerState {
|
||||
private int numberOfConnections;
|
||||
private ArrayList<Socket> sockets;
|
||||
|
||||
public NFServerState() {
|
||||
numberOfConnections = 0;
|
||||
sockets = new ArrayList<>();
|
||||
}
|
||||
|
||||
public int getNumberOfConnections() {
|
||||
return numberOfConnections;
|
||||
}
|
||||
|
||||
public List<Socket> getSockets() {
|
||||
// tu puta madre va a hacer copias
|
||||
return sockets;
|
||||
}
|
||||
|
||||
public void updateState(Socket socket) {
|
||||
sockets.add(socket);
|
||||
numberOfConnections++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user