Ejemplo n.º 1
0
        /// <summary>
        /// Process all file commands on behalf of the server
        /// </summary>
        /// <param name="server">MessageServer object</param>
        /// <param name="message">Message received</param>
        /// <param name="client">MessageClient object</param>
        internal void ProcessServerFiles(MessageServer server, Message message, ConnectedClient client)
        {
            switch (message.Title)
            {
            case "REQUEST_FILE":
                string   newFileName = server.RaiseFileReceive(message.Contents, client.ClientID);
                FileInfo fi          = new FileInfo(newFileName);
                server.sendMessage(message.ClientID, client.Client, new Message("SENDING_FILE",
                                                                                String.Format("{0}${1}", message.Contents, fi.Length), MessageType.File));

                SendFile(client, newFileName, client.BufferSize);
                message.Title = "FILE_SENT";

                break;

            case "SEND_FILE":
                if (server.AcceptFiles)
                {
                    string[] fileDetails = message.Contents.Split('$');
                    ulong    fileSize    = Convert.ToUInt64(fileDetails[1]);

                    if (server.MaximumFileSize > 0 && fileSize > server.MaximumFileSize)
                    {
                        server.sendMessage(client.ClientID, client.Client, new Message("FILE_TOO_BIG",
                                                                                       message.Contents, MessageType.Error));
                    }
                    else
                    {
                        string fileName = server.RaiseFileReceive(System.IO.Path.GetFileName(
                                                                      fileDetails[0]), client.ClientID);

                        //tell the client we are ready to receive
                        server.sendMessage(client.ClientID, client.Client, new Message("SEND_FILE",
                                                                                       message.Contents, MessageType.File));

                        //receive the file
                        ReceiveFile(client, fileName, fileSize, client.BufferSize);
                        message.Title = "FILE_RECEIVED";
                    }
                }
                else
                {
                    server.sendMessage(client.ClientID, client.Client, new Message(
                                           "FILES_NOT_ALLOWED", "", MessageType.Error));
                }

                break;

            default:
                break;
            }
        }