X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/d189ec0eee8569e5811335e7fc93a921e14c2b1f..d612d62cd04b713bb1057fd2e666365704aaf3d6:/src/slave.sml diff --git a/src/slave.sml b/src/slave.sml new file mode 100644 index 0000000..b08d41d --- /dev/null +++ b/src/slave.sml @@ -0,0 +1,61 @@ +(* HCoop Domtool (http://hcoop.sourceforge.net/) + * Copyright (c) 2006, Adam Chlipala + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + *) + +(* Code for receiving and executing configuration files *) + +structure Slave :> SLAVE = struct + +datatype file_action = + Add + | Delete + | Modify + +type file_status = {action : file_action, + domain : string, + file : string} + +val fileHandler = ref (fn _ : file_status => ()) +val preHandler = ref (fn () => ()) +val postHandler = ref (fn () => ()) + +fun registerFileHandler handler = + let + val old = !fileHandler + in + fileHandler := (fn x => (handler x; old x)) + end + +fun registerPreHandler handler = + let + val old = !preHandler + in + preHandler := (fn () => (handler (); old ())) + end + +fun registerPostHandler handler = + let + val old = !postHandler + in + postHandler := (fn () => (handler (); old ())) + end + +fun handleChanges fs = (!preHandler (); + app (!fileHandler) fs; + !postHandler ()) + +end