Artifact 625cb9e5c35d921dc35697c57b8038ff020fb7d7536c5efa3aa1b802f6ba98ed:
Wiki page
[
Event Handling] by
hypnotoad
2018-09-19 05:08:09.
0000: 44 20 32 30 31 38 2d 30 39 2d 31 39 54 30 35 3a D 2018-09-19T05:
0010: 30 38 3a 30 39 2e 39 31 31 0a 4c 20 45 76 65 6e 08:09.911.L Even
0020: 74 5c 73 48 61 6e 64 6c 69 6e 67 0a 4e 20 74 65 t\sHandling.N te
0030: 78 74 2f 78 2d 6d 61 72 6b 64 6f 77 6e 0a 55 20 xt/x-markdown.U
0040: 68 79 70 6e 6f 74 6f 61 64 0a 57 20 34 32 31 36 hypnotoad.W 4216
0050: 0a 49 6e 20 62 65 74 77 65 65 6e 20 77 6f 72 6b .In between work
0060: 20 61 6e 64 20 65 64 69 74 69 6e 67 20 63 6f 6e and editing con
0070: 66 65 72 65 6e 63 65 20 70 61 70 65 72 73 2c 20 ference papers,
0080: 49 20 68 61 64 20 61 20 62 72 61 69 6e 73 74 6f I had a brainsto
0090: 72 6d 2e 20 41 6e 64 20 74 68 61 74 20 62 72 61 rm. And that bra
00a0: 69 6e 73 74 6f 72 6d 20 69 73 20 6e 6f 77 20 43 instorm is now C
00b0: 6c 61 79 27 73 20 6e 65 77 20 65 76 65 6e 74 20 lay's new event
00c0: 65 6e 67 69 6e 65 2e 20 57 68 61 74 20 49 27 76 engine. What I'v
00d0: 65 20 63 6f 6d 65 20 75 70 20 77 69 74 68 20 69 e come up with i
00e0: 73 20 74 68 61 74 3a 0d 0a 0d 0a 31 2e 20 4f 62 s that:....1. Ob
00f0: 6a 65 63 74 73 20 69 6e 20 43 6c 61 79 20 77 69 jects in Clay wi
0100: 6c 6c 20 61 6c 6c 20 68 61 76 65 20 61 20 63 6f ll all have a co
0110: 6d 6d 6f 6e 20 61 6e 63 65 73 74 6f 72 20 77 68 mmon ancestor wh
0120: 6f 20 75 6e 64 65 72 73 74 61 6e 64 73 20 61 6c o understands al
0130: 6c 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f l of the framewo
0140: 72 6b 20 69 6e 74 65 72 61 63 74 69 6f 6e 73 2e rk interactions.
0150: 20 0d 0a 32 2e 20 4f 62 6a 65 63 74 73 20 64 75 ..2. Objects du
0160: 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 77 69 ring creation wi
0170: 6c 6c 20 62 6f 6c 74 20 6f 6e 20 61 64 64 69 74 ll bolt on addit
0180: 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20 ional behaviors
0190: 76 69 61 20 74 68 65 20 6d 69 78 69 6e 20 6d 65 via the mixin me
01a0: 63 68 61 6e 69 73 6d 20 69 6e 20 54 63 6c 4f 4f chanism in TclOO
01b0: 2e 20 0d 0a 33 2e 20 49 6e 73 74 65 61 64 20 6f . ..3. Instead o
01c0: 66 20 69 6e 76 6f 6b 69 6e 67 20 65 61 63 68 20 f invoking each
01d0: 6f 74 68 65 72 27 73 20 6d 65 74 68 6f 64 73 20 other's methods
01e0: 64 69 72 65 63 74 6c 79 2c 20 6f 62 6a 65 63 74 directly, object
01f0: 73 20 77 69 6c 6c 20 74 68 72 6f 77 20 6d 65 73 s will throw mes
0200: 73 61 67 65 73 20 61 74 20 65 61 63 68 20 6f 74 sages at each ot
0210: 68 65 72 20 74 68 72 6f 75 67 68 20 61 6e 20 73 her through an s
0220: 71 6c 69 74 65 20 64 61 74 61 62 61 73 65 0d 0a qlite database..
0230: 0d 0a 54 68 65 20 69 73 73 75 65 20 49 27 6d 20 ..The issue I'm
0240: 6c 6f 6f 6b 69 6e 67 20 61 74 20 64 6f 77 6e 20 looking at down
0250: 74 68 65 20 72 6f 61 64 20 69 73 20 77 65 20 61 the road is we a
0260: 72 65 20 70 72 6f 62 61 62 6c 79 20 67 6f 69 6e re probably goin
0270: 67 20 74 6f 20 77 61 6e 74 20 6c 61 72 67 65 72 g to want larger
0280: 20 43 6c 61 79 20 73 69 6d 75 6c 61 74 69 6f 6e Clay simulation
0290: 73 20 74 6f 20 65 69 74 68 65 72 20 62 65 20 62 s to either be b
02a0: 72 6f 6b 65 6e 20 61 63 72 6f 73 73 20 6d 75 6c roken across mul
02b0: 74 69 70 6c 65 20 74 68 72 65 61 64 73 20 6f 72 tiple threads or
02c0: 20 65 76 65 6e 20 6d 75 6c 74 69 70 6c 65 20 73 even multiple s
02d0: 65 72 76 65 72 73 2e 20 57 65 20 61 72 65 20 61 ervers. We are a
02e0: 6c 73 6f 20 67 6f 69 6e 67 20 74 6f 20 77 61 6e lso going to wan
02f0: 74 20 43 6c 61 79 20 73 69 6d 75 6c 61 74 69 6f t Clay simulatio
0300: 6e 73 20 74 6f 20 72 75 6e 20 61 70 61 72 74 20 ns to run apart
0310: 66 72 6f 6d 20 61 20 47 55 49 27 73 20 6d 61 69 from a GUI's mai
0320: 6e 20 74 68 72 65 61 64 2e 20 41 20 73 69 6d 75 n thread. A simu
0330: 6c 61 74 69 6f 6e 20 67 6f 69 6e 67 20 68 6f 74 lation going hot
0340: 20 61 6e 64 20 68 65 61 76 79 20 63 6f 75 6c 64 and heavy could
0350: 20 65 66 66 65 63 74 69 76 65 6c 79 20 62 6c 6f effectively blo
0360: 63 6b 20 61 20 77 65 62 73 65 72 76 65 72 20 66 ck a webserver f
0370: 72 6f 6d 20 72 65 73 70 6f 6e 64 69 6e 67 2e 20 rom responding.
0380: 41 6e 64 20 75 73 65 72 73 20 6c 69 6b 65 20 74 And users like t
0390: 6f 20 6b 6e 6f 77 20 74 68 61 74 20 74 68 65 20 o know that the
03a0: 70 72 6f 67 72 61 6d 20 69 73 20 6a 75 73 74 20 program is just
03b0: 62 75 73 79 2c 20 6e 6f 74 20 6a 75 73 74 20 6c busy, not just l
03c0: 6f 63 6b 65 64 20 75 70 2e 0d 0a 0d 0a 4e 6f 77 ocked up.....Now
03d0: 20 69 6e 20 61 20 63 6f 6e 76 65 6e 74 69 6f 6e in a convention
03e0: 61 6c 20 4f 4f 20 70 72 6f 67 72 61 6d 2c 20 79 al OO program, y
03f0: 6f 75 72 20 6f 62 6a 65 63 74 73 20 61 72 65 20 our objects are
0400: 61 6c 6c 20 69 6e 20 6f 6e 65 20 62 69 67 20 68 all in one big h
0410: 61 70 70 79 20 66 61 6d 69 6c 79 2e 20 54 68 65 appy family. The
0420: 79 20 63 61 6e 20 69 6e 76 6f 6b 65 20 65 61 63 y can invoke eac
0430: 68 20 6f 74 68 65 72 27 73 20 70 75 62 6c 69 63 h other's public
0440: 20 6d 65 74 68 6f 64 73 2e 20 41 6e 64 20 65 76 methods. And ev
0450: 65 6e 20 64 6f 20 63 6f 6f 6c 20 74 68 69 6e 6b en do cool think
0460: 73 20 6c 69 6b 65 20 74 68 72 65 61 64 20 61 20 s like thread a
0470: 63 6f 72 6f 75 74 69 6e 65 20 74 68 72 6f 75 67 coroutine throug
0480: 68 20 74 68 65 20 6d 65 74 68 6f 64 20 63 61 6c h the method cal
0490: 6c 73 2e 0d 0a 0d 0a 4c 65 74 27 73 20 74 61 6b ls.....Let's tak
04a0: 65 20 61 20 73 69 6d 70 6c 65 20 69 6e 74 65 72 e a simple inter
04b0: 61 63 74 69 6f 6e 20 66 72 6f 6d 20 6d 79 20 64 action from my d
04c0: 61 79 73 20 6f 66 20 63 6f 64 69 6e 67 20 48 4c ays of coding HL
04d0: 41 2c 20 74 68 72 6f 77 69 6e 67 20 61 20 62 65 A, throwing a be
04e0: 61 63 68 20 62 61 6c 6c 3a 0d 0a 0d 0a 20 20 20 ach ball:....
04f0: 20 3a 3a 73 63 65 6e 65 3a 3a 6f 62 6a 65 63 74 ::scene::object
0500: 20 63 72 65 61 74 65 20 41 0d 0a 20 20 20 20 3a create A.. :
0510: 3a 73 63 65 6e 65 3a 3a 6f 62 6a 65 63 74 20 63 :scene::object c
0520: 72 65 61 74 65 20 42 0d 0a 20 20 20 41 20 74 68 reate B.. A th
0530: 72 6f 77 5f 62 61 6c 6c 20 42 0d 0a 0d 0a 54 68 row_ball B....Th
0540: 65 20 67 6c 6f 62 61 6c 20 70 72 6f 67 72 61 6d e global program
0550: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 69 6e 76 is actually inv
0560: 6f 6b 69 6e 67 20 41 27 73 20 6d 65 74 68 6f 64 oking A's method
0570: 73 20 64 69 72 65 63 74 6c 79 2e 20 41 6e 64 20 s directly. And
0580: 77 65 20 63 61 6e 20 61 73 73 75 6d 65 20 74 68 we can assume th
0590: 61 74 20 62 65 68 69 6e 64 20 74 68 65 20 73 63 at behind the sc
05a0: 65 6e 65 73 20 74 68 61 74 20 2a 74 68 72 6f 77 enes that *throw
05b0: 5f 62 61 6c 6c 2a 20 69 73 20 70 72 6f 62 61 62 _ball* is probab
05c0: 6c 79 20 64 6f 69 6e 67 20 74 68 69 6e 67 73 20 ly doing things
05d0: 77 69 74 68 20 42 27 73 20 6d 65 74 68 6f 64 73 with B's methods
05e0: 3a 0d 0a 0d 0a 20 20 20 20 6d 65 74 68 6f 64 20 :.... method
05f0: 74 68 72 6f 77 5f 62 61 6c 6c 20 74 61 72 67 65 throw_ball targe
0600: 74 20 7b 0d 0a 20 20 20 20 20 20 20 24 74 61 72 t {.. $tar
0610: 67 65 74 20 77 61 73 5f 68 69 74 20 5b 73 65 6c get was_hit [sel
0620: 66 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 6d f].. }.. m
0630: 65 74 68 6f 64 20 68 61 73 5f 68 69 74 20 77 68 ethod has_hit wh
0640: 6f 20 7b 0d 0a 20 20 20 20 20 20 20 70 75 74 73 o {.. puts
0650: 20 22 4f 75 63 68 22 0d 0a 20 20 20 20 7d 0d 0a "Ouch".. }..
0660: 0d 0a 57 68 65 6e 20 61 6c 6c 20 6f 66 20 79 6f ..When all of yo
0670: 75 72 20 6f 62 6a 65 63 74 73 20 68 61 76 65 20 ur objects have
0680: 61 6e 20 69 6e 73 74 61 6e 63 65 20 69 6e 20 74 an instance in t
0690: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 he interpreter,
06a0: 74 68 69 73 20 69 73 6e 27 74 20 61 6e 20 69 73 this isn't an is
06b0: 73 75 65 2e 20 48 6f 77 65 76 65 72 2c 20 77 68 sue. However, wh
06c0: 61 74 20 69 66 20 41 20 61 6e 64 20 42 20 61 72 at if A and B ar
06d0: 65 20 69 6e 20 64 69 66 66 65 72 65 6e 74 20 74 e in different t
06e0: 68 72 65 61 64 73 3f 20 57 68 61 74 20 69 66 20 hreads? What if
06f0: 74 68 61 74 20 61 72 65 20 69 6e 20 64 69 66 66 that are in diff
0700: 65 72 65 6e 74 20 70 72 6f 63 65 73 73 65 73 3f erent processes?
0710: 20 57 68 61 74 20 69 66 20 6f 62 6a 65 63 74 20 What if object
0720: 41 20 61 6e 64 20 42 20 61 72 65 20 69 6e 20 73 A and B are in s
0730: 69 6d 75 6c 61 74 69 6f 6e 73 20 6f 6e 20 64 69 imulations on di
0740: 66 66 65 72 65 6e 74 20 63 6f 6d 70 75 74 65 72 fferent computer
0750: 73 3f 0d 0a 0d 0a 57 65 6c 6c 20 74 68 65 6e 20 s?....Well then
0760: 61 6c 6c 20 6f 66 20 79 6f 75 72 20 63 61 6c 6c all of your call
0770: 73 2c 20 66 72 6f 6d 20 74 68 65 20 73 69 6d 70 s, from the simp
0780: 6c 65 73 74 20 74 6f 20 74 68 65 20 6d 6f 73 74 lest to the most
0790: 20 63 6f 6d 70 6c 65 78 20 69 6e 76 6f 6c 76 65 complex involve
07a0: 20 61 20 6c 6f 74 20 6f 66 20 77 72 61 70 70 69 a lot of wrappi
07b0: 6e 67 20 63 6f 64 65 20 74 6f 20 64 69 72 65 63 ng code to direc
07c0: 74 20 6d 65 73 73 61 67 65 73 20 74 6f 20 74 68 t messages to th
07d0: 65 20 6f 62 6a 65 63 74 20 6f 6e 20 74 68 65 20 e object on the
07e0: 6f 74 68 65 72 20 65 6e 64 2c 20 61 6e 64 20 61 other end, and a
07f0: 77 61 69 74 20 61 20 72 65 70 6c 79 2e 0d 0a 0d wait a reply....
0800: 0a 20 20 20 20 20 6d 65 74 68 6f 64 20 74 65 6c . method tel
0810: 6c 20 7b 6f 62 6a 65 63 74 20 77 68 61 74 20 61 l {object what a
0820: 72 67 73 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 rgs} {..
0830: 73 65 74 20 6c 6f 63 61 74 69 6f 6e 20 5b 3a 3a set location [::
0840: 77 68 65 72 65 69 73 3a 3a 6f 62 6a 65 63 74 20 whereis::object
0850: 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20 20 20 $object]..
0860: 20 20 69 66 20 7b 24 6c 6f 63 61 74 69 6f 6e 20 if {$location
0870: 65 71 20 5b 6d 79 20 6c 6f 63 61 74 69 6f 6e 5d eq [my location]
0880: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {..
0890: 24 6f 62 6a 65 63 74 20 24 77 68 61 74 20 7b 2a $object $what {*
08a0: 7d 24 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 }$args..
08b0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {..
08c0: 20 20 20 20 20 20 74 61 69 6c 63 61 6c 6c 20 3a tailcall :
08d0: 3a 72 70 63 3a 3a 73 65 6e 64 20 24 7b 6f 62 6a :rpc::send ${obj
08e0: 65 63 74 7d 40 24 7b 6c 6f 63 61 74 69 6f 6e 7d ect}@${location}
08f0: 20 24 77 68 61 74 20 24 61 72 67 73 0d 0a 20 20 $what $args..
0900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 7d 20 }.. }
0910: 0d 0a 20 20 20 20 20 6d 65 74 68 6f 64 20 74 68 .. method th
0920: 72 6f 77 5f 62 61 6c 6c 20 74 61 72 67 65 74 20 row_ball target
0930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 6d 79 20 74 {.. my t
0940: 65 6c 6c 20 24 74 61 72 67 65 74 20 77 61 73 5f ell $target was_
0950: 68 69 74 20 5b 73 65 6c 66 5d 0d 0a 20 20 20 20 hit [self]..
0960: 20 20 7d 0d 0a 20 20 20 20 20 20 6d 65 74 68 6f }.. metho
0970: 64 20 6f 75 63 68 69 65 20 7b 77 68 6f 7d 20 7b d ouchie {who} {
0980: 0d 0a 20 20 20 20 20 20 20 20 20 70 75 74 73 20 .. puts
0990: 22 24 77 68 6f 20 73 61 79 73 20 6f 75 63 68 69 "$who says ouchi
09a0: 65 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 e".. }..
09b0: 20 20 20 6d 65 74 68 6f 64 20 68 61 73 5f 68 69 method has_hi
09c0: 74 20 77 68 6f 20 7b 0d 0a 20 20 20 20 20 20 20 t who {..
09d0: 20 20 6d 79 20 74 65 6c 6c 20 24 77 68 6f 20 6f my tell $who o
09e0: 75 63 68 69 65 20 5b 73 65 6c 66 5d 0d 0a 20 20 uchie [self]..
09f0: 20 20 20 20 7d 0d 0a 0d 0a 57 68 69 63 68 20 77 }....Which w
0a00: 6f 72 6b 73 2c 20 75 70 20 74 6f 20 61 20 70 6f orks, up to a po
0a10: 69 6e 74 2e 20 41 6e 64 20 74 68 61 74 20 70 6f int. And that po
0a20: 69 6e 74 20 69 73 20 77 68 65 6e 20 79 6f 75 20 int is when you
0a30: 68 61 76 65 20 61 20 66 65 77 20 68 75 6e 64 72 have a few hundr
0a40: 65 64 20 6f 62 6a 65 63 74 20 74 68 61 74 20 77 ed object that w
0a50: 65 72 65 20 77 72 69 74 74 65 6e 20 74 6f 20 64 ere written to d
0a60: 65 6d 61 6e 64 20 69 6e 73 74 61 6e 74 20 67 72 emand instant gr
0a70: 61 74 69 66 69 63 61 74 69 6f 6e 20 74 6f 20 74 atification to t
0a80: 68 65 69 72 20 61 6e 73 77 65 72 73 20 64 6f 69 heir answers doi
0a90: 6e 67 20 61 6c 6c 20 73 6f 72 74 73 20 6f 66 20 ng all sorts of
0aa0: 62 6c 6f 63 6b 69 6e 67 20 77 68 69 6c 65 20 74 blocking while t
0ab0: 68 65 20 6e 65 74 77 6f 72 6b 20 74 72 69 65 73 he network tries
0ac0: 20 74 6f 20 6b 65 65 70 20 75 70 2e 0d 0a 0d 0a to keep up.....
0ad0: 54 68 65 20 6d 6f 64 65 6c 20 49 20 68 61 76 65 The model I have
0ae0: 20 63 6f 6d 65 20 75 70 20 77 69 74 68 20 69 73 come up with is
0af0: 20 6d 6f 72 65 20 6c 69 6b 65 20 61 6e 20 6f 6c more like an ol
0b00: 64 20 66 61 73 68 69 6f 6e 65 64 20 63 6f 72 72 d fashioned corr
0b10: 65 73 70 6f 6e 64 65 6e 63 65 20 67 61 6d 65 20 espondence game
0b20: 6f 66 20 63 68 65 73 73 2e 20 54 68 65 20 70 6c of chess. The pl
0b30: 61 79 65 72 73 20 6d 61 69 6c 20 74 68 65 69 72 ayers mail their
0b40: 20 6d 6f 76 65 73 20 74 6f 20 6f 6e 65 20 61 6e moves to one an
0b50: 6f 74 68 65 72 2c 20 61 6e 64 20 64 6f 6e 27 74 other, and don't
0b60: 20 6d 61 6b 65 20 61 6e 6f 74 68 65 72 20 6d 6f make another mo
0b70: 76 65 20 75 6e 74 69 6c 20 74 68 65 79 20 67 65 ve until they ge
0b80: 74 20 74 68 65 20 6e 65 78 74 20 6d 6f 76 65 20 t the next move
0b90: 66 72 6f 6d 20 74 68 65 69 72 20 6f 70 70 6f 6e from their oppon
0ba0: 65 6e 74 2e 0d 0a 0d 0a 20 20 20 20 6d 65 74 68 ent..... meth
0bb0: 6f 64 20 74 65 6c 6c 20 7b 68 65 61 64 65 72 73 od tell {headers
0bc0: 20 63 6f 6e 74 65 6e 74 7d 20 7b 0d 0a 20 20 20 content} {..
0bd0: 20 20 20 20 20 23 20 43 6f 64 65 20 74 6f 20 67 # Code to g
0be0: 65 6e 65 72 61 74 65 20 61 6e 64 20 73 71 6c 20 enerate and sql
0bf0: 72 65 63 6f 72 64 0d 0a 20 20 20 20 20 20 20 72 record.. r
0c00: 65 74 75 72 6e 20 24 6d 73 67 5f 75 75 69 64 0d eturn $msg_uuid.
0c10: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 6d . }.... m
0c20: 65 74 68 6f 64 20 74 68 72 6f 77 5f 62 61 6c 6c ethod throw_ball
0c30: 20 7b 77 68 6f 7d 20 7b 0d 0a 20 20 20 20 20 20 {who} {..
0c40: 20 20 73 65 74 20 6d 73 67 5f 75 75 69 64 20 5b set msg_uuid [
0c50: 6d 79 20 74 65 6c 6c 20 5b 6c 69 73 74 20 6d 73 my tell [list ms
0c60: 67 5f 72 63 70 74 20 77 68 6f 20 6d 73 67 5f 73 g_rcpt who msg_s
0c70: 75 62 6a 65 63 74 20 68 61 73 5f 68 69 74 5d 20 ubject has_hit]
0c80: 7b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 50 {}].. # P
0c90: 6f 6c 6c 20 75 6e 74 69 6c 20 77 65 20 67 65 74 oll until we get
0ca0: 20 61 20 72 65 70 6c 79 0d 0a 20 20 20 20 20 20 a reply..
0cb0: 20 20 77 68 69 6c 65 20 31 20 7b 0d 0a 20 20 20 while 1 {..
0cc0: 20 20 20 20 20 20 20 20 20 6d 79 20 3c 64 62 3e my <db>
0cd0: 20 65 76 61 6c 20 7b 73 65 6c 65 63 74 20 2a 20 eval {select *
0ce0: 66 72 6f 6d 20 6d 65 73 73 61 67 65 73 20 77 68 from messages wh
0cf0: 65 72 65 20 6d 73 67 5f 72 65 70 6c 79 3d 3a 6d ere msg_reply=:m
0d00: 73 67 5f 75 75 69 64 7d 20 7b 0d 0a 20 20 20 20 sg_uuid} {..
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
0d20: 72 6e 20 24 6d 73 67 5f 63 6f 6e 74 65 6e 74 0d rn $msg_content.
0d30: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }..
0d40: 20 20 20 20 20 20 20 20 79 69 65 6c 64 0d 0a 20 yield..
0d50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 7d }.. }
0d60: 0d 0a 0d 0a 0d 0a 20 20 20 20 20 6d 65 74 68 6f ...... metho
0d70: 64 20 73 74 65 70 20 7b 7d 20 7b 0d 0a 20 20 20 d step {} {..
0d80: 20 20 20 20 20 20 73 65 74 20 72 63 70 74 20 5b set rcpt [
0d90: 6d 79 20 75 75 69 64 5d 0d 0a 20 20 20 20 20 20 my uuid]..
0da0: 20 20 20 6d 79 20 3c 64 62 3e 20 65 76 61 6c 20 my <db> eval
0db0: 7b 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 6d {select * from m
0dc0: 65 73 73 61 67 65 20 77 68 65 72 65 20 6d 73 67 essage where msg
0dd0: 5f 72 63 70 74 3d 3a 75 75 69 64 7d 20 72 65 63 _rcpt=:uuid} rec
0de0: 6f 72 64 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ord {..
0df0: 20 20 20 6d 79 20 72 65 61 63 74 20 24 6d 73 67 my react $msg
0e00: 5f 73 75 62 6a 65 63 74 20 5b 61 72 72 61 79 20 _subject [array
0e10: 67 65 74 20 72 65 63 6f 72 64 5d 0d 0a 20 20 20 get record]..
0e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 7d 0d }.. }.
0e30: 0a 20 20 20 20 20 6d 65 74 68 6f 64 20 72 65 61 . method rea
0e40: 63 74 20 7b 73 75 62 6a 65 63 74 20 6d 73 67 69 ct {subject msgi
0e50: 6e 66 6f 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 nfo} {..
0e60: 20 20 64 69 63 74 20 77 69 74 68 20 6d 73 67 69 dict with msgi
0e70: 6e 66 6f 20 7b 7d 0d 0a 20 20 20 20 20 20 20 20 nfo {}..
0e80: 20 20 69 66 20 7b 24 73 75 62 6a 65 63 74 20 65 if {$subject e
0e90: 71 20 22 68 61 73 5f 68 69 74 22 7d 20 7b 0d 0a q "has_hit"} {..
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79 20 my
0eb0: 74 65 6c 6c 20 24 6d 73 67 5f 73 65 6e 64 65 72 tell $msg_sender
0ec0: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \..
0ed0: 20 20 20 20 20 20 20 20 20 20 6d 73 67 5f 72 63 msg_rc
0ee0: 70 74 20 24 6d 73 67 5f 73 65 6e 64 65 72 20 5c pt $msg_sender \
0ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
0f00: 20 20 6d 73 67 5f 73 75 62 6a 65 63 74 20 6f 75 msg_subject ou
0f10: 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ch \..
0f20: 20 20 20 20 20 20 6d 73 67 5f 72 65 70 6c 79 20 msg_reply
0f30: 24 6d 73 67 5f 75 75 69 64 20 5c 0d 0a 20 20 20 $msg_uuid \..
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 73 67 msg
0f50: 5f 63 6f 6e 74 65 6e 74 20 7b 4f 75 63 68 7d 5d _content {Ouch}]
0f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }..
0f70: 20 20 20 20 7d 0d 0a 0d 0a 41 6c 6c 20 6f 66 20 }....All of
0f80: 74 68 65 20 70 72 6f 63 65 73 73 65 73 20 61 6e the processes an
0f90: 64 20 74 68 72 65 61 64 73 20 72 75 6e 6e 69 6e d threads runnin
0fa0: 67 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 6d 61 g on the same ma
0fb0: 63 68 69 6e 65 20 63 61 6e 20 73 68 61 72 65 20 chine can share
0fc0: 61 20 73 69 6e 67 6c 65 20 73 71 6c 69 74 65 20 a single sqlite
0fd0: 64 61 74 61 62 61 73 65 2e 20 46 6f 72 20 63 6c database. For cl
0fe0: 75 73 74 65 72 20 70 72 6f 63 65 73 73 65 73 2c uster processes,
0ff0: 20 49 20 63 6f 75 6c 64 20 73 65 65 20 61 20 6d I could see a m
1000: 65 63 68 61 6e 69 73 6d 20 62 79 20 77 68 69 63 echanism by whic
1010: 68 20 61 6e 20 6f 75 74 73 69 64 65 20 70 72 6f h an outside pro
1020: 63 65 73 73 20 63 6f 6e 74 72 6f 6c 73 20 74 68 cess controls th
1030: 65 20 74 69 6d 73 65 74 65 70 2c 20 61 6e 64 20 e timsetep, and
1040: 74 68 65 6e 20 72 65 70 6c 69 63 61 74 65 73 20 then replicates
1050: 6d 65 73 73 61 67 65 73 20 6f 76 65 72 20 55 44 messages over UD
1060: 50 20 6f 72 20 76 69 61 20 68 74 74 70 2e 0d 0a P or via http...
1070: 0d 0a 49 6e 20 6d 79 20 6e 65 78 74 20 69 6e 73 ..In my next ins
1080: 74 61 6c 6c 6d 65 6e 74 20 49 27 6c 6c 20 62 65 tallment I'll be
1090: 20 67 6f 69 6e 67 20 6f 76 65 72 20 74 68 65 20 going over the
10a0: 6d 69 78 69 6e 20 73 74 75 66 66 2e 20 46 6f 72 mixin stuff. For
10b0: 20 6e 6f 77 20 73 6c 65 65 70 20 69 73 20 63 61 now sleep is ca
10c0: 6c 6c 69 6e 67 2e 2e 2e 2e 0a 5a 20 63 35 37 62 lling.....Z c57b
10d0: 39 32 34 34 35 62 66 30 31 36 61 65 34 37 65 65 92445bf016ae47ee
10e0: 37 33 32 33 36 63 63 61 34 36 34 38 0a 73236cca4648.