/// <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; } }