コード例 #1
0
        private void ReciveFile(long fileSize, string fileName, Socket socket)
        {
            var segments = (fileSize / FileSenderHandler.FileSegmentSize);

            segments = segments * FileSenderHandler.FileSegmentSize == fileSize ? segments : segments + 1;

            long offset          = 0;
            long currentSegments = 1;

            IFileSenderHandler senderHandler = new FileSenderHandler();

            while (fileSize > offset)
            {
                ByteDataTransform  transfer = new ByteDataTransform();
                DataTransferResult result   = DataTransference.RecieveData(socket);
                if (result.Header.GetCommand() == 31)
                {
                    byte[] fileDataRecived = (byte[])result.objectResult;
                    int    size            = 0;
                    if (currentSegments == segments)
                    {
                        size = (int)(fileSize - offset);
                    }
                    else
                    {
                        size = (int)FileSenderHandler.FileSegmentSize;
                    }

                    senderHandler.Write(fileName, fileDataRecived);
                    offset += size;
                    currentSegments++;
                }
            }
        }
コード例 #2
0
        private List <string> ListFiles(string message, Socket socket)
        {
            DataTransformSuper dataTransferReciver = new StringDataTransform();
            DataTransferResult result = new DataTransferResult();

            result = DataTransference.RecieveData(socket);

            result.objectResult = dataTransferReciver.DecodeMessage((byte[])result.objectResult);

            List <string> resultData = result.objectResult as List <string>;

            return(resultData);
        }
コード例 #3
0
        public static DataTransferResult RecieveData(Socket socket)
        {
            DataTransferResult result = new DataTransferResult();
            int dataLength;

            int  headerLength = HeaderConstants.GetLength();
            var  headerBytes  = new byte[headerLength];
            int  received     = 0;
            bool exit         = false;

            while (received < headerLength && !exit)
            {
                try
                {
                    received += socket.Receive(headerBytes, received, headerLength - received, SocketFlags.None);
                    if (received == 0)
                    {
                        exit = true;
                    }
                }catch (System.Net.Sockets.SocketException)
                {
                    exit = true;
                    Console.WriteLine("La conexion se cerro de forma abrupta");
                }
            }
            if (!exit)
            {
                Header header = new Header(headerBytes);
                result.Header = header;
                dataLength    = header.GetDataLength();

                var data = new byte[dataLength];
                received = 0;
                while (received < dataLength)
                {
                    received += socket.Receive(data, received, dataLength - received, SocketFlags.None);
                }

                result.objectResult = data;
                return(result);
            }
            else
            {
                return(null);
            }
        }
コード例 #4
0
        public void NeedToSend(DataTransformSuper dataTransferSender, DataTransformSuper dataTransferReciver, int command, string data, Socket socket)
        {
            Header header = new Header(HeaderConstants.Request, command, data.Length);


            byte [] codedRequest = dataTransferSender.GenMenssage(data, header);
            DataTransference.SendData(codedRequest, socket);

            DataTransferResult result = DataTransference.RecieveData(socket);

            if (result.Header.GetCommand() == CommandConstants.ErrorListing)
            {
                Console.WriteLine("No hay elementos para listar");
            }
            else
            {
                result.objectResult = dataTransferReciver.DecodeMessage((byte[])result.objectResult);

                List <string> resultData = new List <string>();
                resultData = result.objectResult as List <string>;

                Display(resultData);
            }
        }
コード例 #5
0
        public async Task HandleClient(Socket socket)
        {
            DataTransferSuper transfer = new StringDataTransfer();
            Response          response = new StringResponse();
            User   user;
            string fileName = "";

            while (true)
            {
                DataTransferResult result = transfer.RecieveData(socket);

                int    command    = result.Header.GetCommand();
                int    dataLength = result.Header.GetDataLength();
                string direction  = result.Header.GetDirection();
                string word       = "";

                if (command != 31)
                {
                    word = (string)result.objectResult;
                }
                ;
                Log log = new Log()
                {
                    Command = command,
                    Message = word,
                    Date    = DateTime.Now,
                };

                dynamic responseData;
                switch (command)
                {
                case CommandConstants.Login:
                    try
                    {
                        user         = Login(word);
                        response     = new StringResponse();
                        responseData = "true";
                        response.SendResponse(command, responseData, socket, responseData.Length);
                        log.Level    = Log.SUCCESS_LEVEL;
                        log.Username = user.Username;
                        SendLog(log);
                        break;
                    }
                    catch (Exception)
                    {
                        response     = new StringResponse();
                        responseData = "false";
                        response.SendResponse(command, responseData, socket, responseData.Length);
                        log.Level    = Log.WARNING_LEVEL;
                        log.Username = "******";
                        SendLog(log);
                        break;
                    }

                case CommandConstants.SignUp:
                    try
                    {
                        SignUp(word);
                        //response = new StringResponse();
                        //responseData = "true";
                        //response.SendResponse(command, responseData, socket, responseData.Length);
                        break;
                    }
                    catch (UserAlreadyExistException)
                    {
                        break;
                    }

                case CommandConstants.ListUsers:
                    List <string> usersList = GetUsers();
                    response     = new ListStringResponse();
                    responseData = usersList;
                    int responseDataLength = ListStringDataTransfer.ListLength(usersList);
                    response.SendResponse(command, responseData, socket, responseDataLength);
                    break;

                case CommandConstants.ListFiles:
                    User userPhoto = new User();
                    userPhoto.Username = word;
                    List <string> fileList = GetUserPhotos(userPhoto);
                    response           = new ListStringResponse();
                    responseData       = fileList;
                    responseDataLength = ListStringDataTransfer.ListLength(fileList);
                    response.SendResponse(command, responseData, socket, responseDataLength);
                    break;

                case CommandConstants.UploadFile:
                    long fileSize;
                    ReciveFileData(word, out fileName, out fileSize);
                    transfer = new ByteDataTransfer();
                    break;

                case CommandConstants.UploadFileSignal:
                    byte[]             fileBytes     = (byte[])result.objectResult;
                    IFileSenderHandler senderHandler = new FileSenderHandler();
                    senderHandler.Write(fileName, fileBytes);
                    Console.WriteLine(Directory.GetCurrentDirectory());
                    break;

                default:
                    Console.WriteLine("Invalid command");
                    break;
                }
            }
        }
コード例 #6
0
        public void ConectToServer()
        {
            try
            {
                socket.Bind(clientEndPoint);

                socket.Connect(serverEndPoint);

                Console.WriteLine("Conectado al servidor\n");
                Console.WriteLine("Bienvenido.....\n");
                int                option       = -1;
                bool               exit         = false;
                string             credentials  = "";
                string             username     = "";
                string             userPassword = "";
                Header             header;
                DataTransformSuper dataTransferReciver = new StringDataTransform();
                DataTransformSuper dataTransferSender  = new StringDataTransform();
                while (!exit)
                {
                    DisplayStarMenu();

                    option = GetOption(option);
                    Console.WriteLine("Ingrese usuario:\n");
                    username = Console.ReadLine();
                    Console.WriteLine("Ingrese Contrasenia\n");
                    userPassword = Console.ReadLine();
                    credentials  = username + Common.DataTransfer.SEPARATOR + userPassword;

                    switch (option)
                    {
                    case 1:
                        option = CommandConstants.SignUp;
                        break;

                    case 2:
                        option = CommandConstants.Login;
                        exit   = true;
                        break;

                    default:
                        Console.WriteLine("Opcion Invalida");
                        break;
                    }
                    header = new Header(HeaderConstants.Request, option, credentials.Length);
                    var codedMessage = dataTransferSender.GenMenssage(credentials, header);
                    DataTransference.SendData(codedMessage, socket);
                }
                DataTransferResult result = DataTransference.RecieveData(socket);
                result.objectResult = dataTransferReciver.DecodeMessage((byte[])result.objectResult);

                dynamic resultData = result.objectResult;
                bool    isLogged   = Boolean.Parse(resultData);


                while (isLogged)
                {
                    if (isLogged)
                    {
                        DisplayMenu();
                    }
                    bool needToSend = false;
                    option = -1;
                    int    command      = -1;
                    string data         = "";
                    byte[] codedRequest = new byte[1];
                    option = GetOption(option);
                    switch (option)
                    {
                    case CommandConstants.UploadFile:
                        command = CommandConstants.UploadFile;
                        Console.WriteLine("Ingrese el path del archivo");
                        var path = Console.ReadLine();
                        SendFile(path);
                        break;

                    case CommandConstants.ListUsers:
                        command             = CommandConstants.ListUsers;
                        dataTransferReciver = new ListStringDataTransform();
                        NeedToSend(dataTransferSender, dataTransferReciver, Common.CommandConstants.ListUsers, data, socket);

                        break;

                    case CommandConstants.ListFiles:
                        command = CommandConstants.ListFiles;
                        Console.WriteLine("Ingrese el usuario");
                        data = Console.ReadLine();
                        dataTransferReciver = new ListStringDataTransform();
                        NeedToSend(dataTransferSender, dataTransferReciver, Common.CommandConstants.ListFiles, data, socket);
                        break;

                    case 6:
                        command = CommandConstants.ViewComents;
                        NeedToSend(dataTransferSender, dataTransferReciver, Common.CommandConstants.ListFiles, username, socket);
                        Console.WriteLine("Seleccione foto");
                        string photo = Console.ReadLine();
                        data = username + Common.DataTransfer.SEPARATOR + photo;
                        dataTransferReciver = new ListStringDataTransform();
                        NeedToSend(dataTransferSender, dataTransferReciver, Common.CommandConstants.ViewComents, data, socket);
                        break;

                    case 7:
                        command             = CommandConstants.AddComent;
                        dataTransferReciver = new ListStringDataTransform();
                        NeedToSend(dataTransferSender, dataTransferReciver, Common.CommandConstants.ListUsers, "", socket);
                        Console.WriteLine("Seleccione  usuario");
                        string userComment = Console.ReadLine();
                        NeedToSend(dataTransferSender, dataTransferReciver, Common.CommandConstants.ListFiles, userComment, socket);
                        Console.WriteLine("Seleccione foto");
                        photo = Console.ReadLine();
                        Console.WriteLine("Ingrese comentario");
                        string comment = Console.ReadLine();
                        data = userComment + Common.DataTransfer.SEPARATOR + photo + Common.DataTransfer.SEPARATOR + comment;

                        header       = new Header(HeaderConstants.Request, command, data.Length);
                        codedRequest = dataTransferSender.GenMenssage(data, header);

                        DataTransfer.SendData(codedRequest, socket);
                        break;

                    default:
                        Console.WriteLine("Invalid command");
                        break;
                    }
                    if (needToSend)
                    {
                        header       = new Header(HeaderConstants.Request, command, data.Length);
                        codedRequest = dataTransferSender.GenMenssage(data, header);

                        result = DataTransference.RecieveData(socket);
                        if (result.Header.GetCommand() == CommandConstants.ErrorListing)
                        {
                            Console.WriteLine("No hay elementos para listar");
                        }
                        else
                        {
                            result.objectResult = dataTransferReciver.DecodeMessage((byte[])result.objectResult);


                            resultData = result.objectResult as List <string>;
                            Display(resultData);
                        }
                    }
                }
            }
            catch (Exception)
            {
                Console.WriteLine("Ocurrio algun error con el servidor");
            }
        }
コード例 #7
0
        public void HandleClient(Socket socket)
        {
            DataTransformSuper transfer = new StringDataTransform();
            Response           response = new StringResponse();
            User   user     = new User();
            bool   endConn  = false;
            long   fileSize = 0;
            string fileName = "";

            while (isServerUp && !endConn)
            {
                DataTransferResult result = DataTransference.RecieveData(socket);
                if (result != null)
                {
                    int    command    = result.Header.GetCommand();
                    int    dataLength = result.Header.GetDataLength();
                    string direction  = result.Header.GetDirection();
                    string word       = "";
                    Log    log        = new Log()
                    {
                        Command = command,
                        Date    = DateTime.Now,
                    };
                    if (command != 31)
                    {
                        transfer            = new StringDataTransform();
                        result.objectResult = transfer.DecodeMessage((byte[])result.objectResult);
                        word        = (string)result.objectResult;
                        log.Message = word;
                    }
                    ;
                    dynamic responseData;


                    switch (command)
                    {
                    case CommandConstants.Login:
                        try
                        {
                            user         = Login(word);
                            response     = new StringResponse();
                            responseData = "true";
                            response.SendResponse(command, responseData, socket, responseData.Length);
                            SendSuccessfullLog(user, log);
                            break;
                        }
                        catch (Exception)
                        {
                            response     = new StringResponse();
                            responseData = "false";
                            response.SendResponse(command, responseData, socket, responseData.Length);
                            SendWarningLog(log);
                            break;
                        }

                    case CommandConstants.SignUp:
                        try
                        {
                            SignUp(word);
                            SendSuccessfullLog(user, log);
                            break;
                        }
                        catch (UserAlreadyExistException)
                        {
                            SendWarningLog(log);
                            break;
                        }

                    case CommandConstants.ListUsers:
                        try
                        {
                            List <string> usersList = GetUsers();
                            response     = new ListStringResponse();
                            responseData = usersList;
                            int responseDataLength = ListStringDataTransform.ListLength(usersList);
                            response.SendResponse(command, responseData, socket, responseDataLength);
                            SendSuccessfullLog(user, log);
                            break;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Ocurrio un error al listar los usuarios");
                            SendWarningLog(log);
                            break;
                        }

                    case CommandConstants.ListFiles:
                        try
                        {
                            User userPhoto = new User();
                            userPhoto.Username = word;
                            List <string> fileList = GetUserPhotos(userPhoto);
                            response     = new ListStringResponse();
                            responseData = fileList;
                            int responseDataLength = ListStringDataTransform.ListLength(fileList);
                            if (responseDataLength == 0)
                            {
                                throw new Exception();
                            }
                            response.SendResponse(command, responseData, socket, responseDataLength);
                            SendSuccessfullLog(user, log);
                            break;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Ocurrio un problema al listar los archivos");
                            response     = new StringResponse();
                            responseData = "Error al listar fotos";
                            response.SendResponse(Common.CommandConstants.ErrorListing, responseData, socket, responseData.Length);
                            SendWarningLog(log);
                            break;
                        }

                    case CommandConstants.UploadFile:
                        ReciveFileData(word, out fileName, out fileSize);
                        transfer = new ByteDataTransform();
                        Photo photo1 = new Photo();
                        photo1.Name     = fileName;
                        photo1.Comments = new List <string>();
                        user.AddPhoto(photo1);

                        SendSuccessfullLog(user, log);
                        break;

                    case CommandConstants.UploadFileSignal:
                        byte[]             fileBytes     = (byte[])result.objectResult;
                        IFileSenderHandler senderHandler = new FileSenderHandler();
                        senderHandler.Write(fileName, fileBytes);
                        log.Username = user.Username;
                        log.Message  = "File part";
                        SendLog(log);
                        break;

                    case CommandConstants.AddComent:
                        try
                        {
                            AddComment(word);
                            SendSuccessfullLog(user, log);
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Ocurrio un problema al agregar el comentario");
                            SendWarningLog(log);
                        }
                        break;

                    case CommandConstants.ViewComents:
                        try
                        {
                            List <string> comments;
                            string        userName, photo;
                            GetCredentials(word, out userName, out photo);
                            Photo photoForComments = GetPhoto(userName, photo);
                            comments = photoForComments.Comments;

                            response     = new ListStringResponse();
                            responseData = comments;
                            int responseDataLength = ListStringDataTransform.ListLength(comments);
                            response.SendResponse(command, responseData, socket, responseDataLength);
                            SendSuccessfullLog(user, log);
                            break;
                        }catch (Exception)
                        {
                            Console.WriteLine("Error al mostrar comentarios de la foto");
                            response     = new StringResponse();
                            responseData = "Error al listar fotos";
                            response.SendResponse(Common.CommandConstants.ErrorListing, responseData, socket, responseData.Length);
                            SendWarningLog(log);
                            break;
                        }

                    default:
                        Console.WriteLine("Invalid command");
                        break;
                    }
                }
                else
                {
                    socket.Close();
                    _conectedClients.Remove(socket);
                    endConn = true;
                }
            }
        }