00001 /******************************************************************************* 00002 00003 @file Payload.d 00004 00005 Copyright (C) 2004 Kris Bell 00006 00007 This software is provided 'as-is', without any express or implied 00008 warranty. In no event will the authors be held liable for damages 00009 of any kind arising from the use of this software. 00010 00011 Permission is hereby granted to anyone to use this software for any 00012 purpose, including commercial applications, and to alter it and/or 00013 redistribute it freely, subject to the following restrictions: 00014 00015 1. The origin of this software must not be misrepresented; you must 00016 not claim that you wrote the original software. If you use this 00017 software in a product, an acknowledgment within documentation of 00018 said product would be appreciated but is not required. 00019 00020 2. Altered source versions must be plainly marked as such, and must 00021 not be misrepresented as being the original software. 00022 00023 3. This notice may not be removed or altered from any distribution 00024 of the source. 00025 00026 00027 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00028 00029 00030 @version Initial version, April 2004 00031 @author Kris 00032 00033 00034 *******************************************************************************/ 00035 00036 module mango.cache.Payload; 00037 00038 public import mango.cache.model.IPayload; 00039 00040 /****************************************************************************** 00041 00042 Base-class for entries placed into both the cache and cluster 00043 framework 00044 00045 ******************************************************************************/ 00046 00047 class Payload : IPayload 00048 { 00049 private ulong time; 00050 00051 /********************************************************************** 00052 00053 Destroy this payload. Often used to return instances to a 00054 freelist, or otherwise release resources. 00055 00056 **********************************************************************/ 00057 00058 void destroy () 00059 { 00060 } 00061 00062 /*********************************************************************** 00063 00064 Return the timestamp associated with this payload 00065 00066 ***********************************************************************/ 00067 00068 long getTime () 00069 { 00070 return time; 00071 } 00072 00073 /*********************************************************************** 00074 00075 Set the timestamp of this payload 00076 00077 ***********************************************************************/ 00078 00079 void setTime (long time) 00080 { 00081 this.time = time; 00082 } 00083 00084 /********************************************************************** 00085 00086 Recover the timestamp from the provided reader 00087 00088 **********************************************************************/ 00089 00090 void read (IReader reader) 00091 { 00092 reader.get (time); 00093 } 00094 00095 /********************************************************************** 00096 00097 Emit our timestamp to the provided writer 00098 00099 **********************************************************************/ 00100 00101 void write (IWriter writer) 00102 { 00103 writer.put (time); 00104 } 00105 00106 /*********************************************************************** 00107 00108 Create a new instance of a payload, and populate it via 00109 read() using the specified reader 00110 00111 ***********************************************************************/ 00112 00113 Object create (IReader reader) 00114 { 00115 Payload r = cast(Payload) create (); 00116 r.read (reader); 00117 return r; 00118 } 00119 00120 /********************************************************************** 00121 00122 Overridable create method that simply instantiates a 00123 new instance. May be used to allocate subclassses from 00124 a freelist 00125 00126 **********************************************************************/ 00127 00128 Object create () 00129 { 00130 return new Payload; 00131 } 00132 00133 /********************************************************************** 00134 00135 Return the guid for this payload. This should be unique 00136 per payload class, if said class is used in conjunction 00137 with the clustering facilities. Inspected by the Pickle 00138 utilitiy classes. 00139 00140 **********************************************************************/ 00141 00142 char[] getGuid () 00143 { 00144 return this.classinfo.name; 00145 } 00146 } 00147 00148