<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Ping Ring del 2: C#</title>
	<atom:link href="http://blog.kjempekjekt.com/2010/09/06/ping-ring-del-2-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kjempekjekt.com/2010/09/06/ping-ring-del-2-c/</link>
	<description>om livet som .net utvikler</description>
	<lastBuildDate>Wed, 16 May 2012 21:05:45 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Ping Ring del 8: Python</title>
		<link>http://blog.kjempekjekt.com/2010/09/06/ping-ring-del-2-c/#comment-106326</link>
		<dc:creator>Ping Ring del 8: Python</dc:creator>
		<pubDate>Tue, 21 Sep 2010 12:57:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/09/06/ping-ring-del-2-c/#comment-106326</guid>
		<description>[...] Etter litt googling og 20 minutter utvikling kom jeg frem til en fungerende Ping Ring. Det virket som om den vanlige måten å løse samtighet på i Python er å arve fra Thread-klassen, så jeg valgte å gjøre det. Implementasjonen skiller seg derfor noe fra de andre objektorienterte løsningene (C#/Ruby/Boo). 1 import sys2 import time3 import datetime4 import socket5 from threading import Thread6 7 last_ping_time = datetime.datetime.now() # Global state 8 9 class&#160;TcpThread(Thread):10 &#160; def&#160;__init__ (self, self_port, other_port):11 &#160;&#160;&#160; Thread.__init__(self)12 &#160;&#160;&#160; self.port = self_port13 &#160;&#160;&#160; self.other = other_port14 &#160; def&#160;get_socket(self):15 &#160;&#160;&#160; return socket.socket(socket.AF_INET, socket.SOCK_STREAM)16 17 class&#160;Listener(TcpThread):18 &#160; def&#160;run(self):19 &#160;&#160;&#160; while 1:20 &#160;&#160;&#160;&#160;&#160; s = self.get_socket()21 &#160;&#160;&#160;&#160;&#160; s.bind((&#8216;127.0.0.1&#8216;, self.port))22 &#160;&#160;&#160;&#160;&#160; s.listen(1)23 &#160;&#160;&#160;&#160;&#160; conn, addr = s.accept()24 &#160;&#160;&#160;&#160;&#160; ping = conn.recv(1024)25 &#160;&#160;&#160;&#160;&#160; self.process(ping)26 &#160;&#160;&#160;&#160;&#160; conn.close()27 &#160; def&#160;process(self, message):28 &#160;&#160;&#160; global last_ping_time29 &#160;&#160;&#160; last_ping_time = datetime.datetime.now()30 &#160;&#160;&#160; print&#160;&#8220;Received&#8220;, message31 &#160;&#160;&#160; Pinger(self.port, self.other).start()32 33 class&#160;Pinger(TcpThread):34 &#160; def&#160;run(self):35 &#160;&#160;&#160; time.sleep(1)36 &#160;&#160;&#160; s = self.get_socket()37 &#160;&#160;&#160; try:38 &#160;&#160;&#160;&#160;&#160; s.connect((&#8216;127.0.0.1&#8216;, self.other))39 &#160;&#160;&#160;&#160;&#160; s.send(&#8216;PING from %(port)s&#8216; % {&#8216;port&#8216;: self.port})40 &#160;&#160;&#160;&#160;&#160; s.close()41 &#160;&#160;&#160; except Exception:42 &#160;&#160;&#160;&#160;&#160; print&#160;&#8220;*** Failed sending ping!&#8220;43 44 class&#160;Alerter(TcpThread):45 &#160; def&#160;__init__ (self, self_port, other_port, max_delay):46 &#160;&#160;&#160; TcpThread.__init__(self, self_port, other_port)47 &#160;&#160;&#160; self.max_delay = datetime.timedelta(seconds=max_delay)48 &#160; def&#160;run(self):49 &#160;&#160;&#160; global last_ping_time50 &#160;&#160;&#160; while 1:51 &#160;&#160;&#160;&#160;&#160; time.sleep(5)52 &#160;&#160;&#160;&#160;&#160; ping_delay = datetime.datetime.now() - last_ping_time53 &#160;&#160;&#160;&#160;&#160; if ping_delay &gt; self.max_delay:54 &#160;&#160;&#160;&#160;&#160;&#160;&#160; print&#160;&#8216;*** ALERT, RING BROKEN!&#8216; + 55 &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216; No ping in %(delay)s.&#8216; % {&#8216;delay&#8216;: ping_delay}56 &#160;&#160;&#160;&#160;&#160;&#160;&#160; Pinger(self.port, self.other).start()57 58 this_port = int(sys.argv[1])59 other_port = int(sys.argv[2])60 max_delay = int(sys.argv[3])61 initial_ping = sys.argv[4] == &#8220;true&#8220;62 63 print&#160;&#8220;** Python Ring Server (&#8220;, this_port, &#8220;)&#8220;64 65 if initial_ping: Pinger(this_port, other_port).start()66 Listener(this_port, other_port).start()67 Alerter(this_port, other_port, max_delay).start() [...]</description>
		<content:encoded><![CDATA[<p>[...] Etter litt googling og 20 minutter utvikling kom jeg frem til en fungerende Ping Ring. Det virket som om den vanlige måten å løse samtighet på i Python er å arve fra Thread-klassen, så jeg valgte å gjøre det. Implementasjonen skiller seg derfor noe fra de andre objektorienterte løsningene (C#/Ruby/Boo). 1 import sys2 import time3 import datetime4 import socket5 from threading import Thread6 7 last_ping_time = datetime.datetime.now() # Global state 8 9 class&nbsp;TcpThread(Thread):10 &nbsp; def&nbsp;__init__ (self, self_port, other_port):11 &nbsp;&nbsp;&nbsp; Thread.__init__(self)12 &nbsp;&nbsp;&nbsp; self.port = self_port13 &nbsp;&nbsp;&nbsp; self.other = other_port14 &nbsp; def&nbsp;get_socket(self):15 &nbsp;&nbsp;&nbsp; return socket.socket(socket.AF_INET, socket.SOCK_STREAM)16 17 class&nbsp;Listener(TcpThread):18 &nbsp; def&nbsp;run(self):19 &nbsp;&nbsp;&nbsp; while 1:20 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = self.get_socket()21 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.bind((&#8216;127.0.0.1&#8216;, self.port))22 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.listen(1)23 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn, addr = s.accept()24 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ping = conn.recv(1024)25 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.process(ping)26 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.close()27 &nbsp; def&nbsp;process(self, message):28 &nbsp;&nbsp;&nbsp; global last_ping_time29 &nbsp;&nbsp;&nbsp; last_ping_time = datetime.datetime.now()30 &nbsp;&nbsp;&nbsp; print&nbsp;&#8220;Received&#8220;, message31 &nbsp;&nbsp;&nbsp; Pinger(self.port, self.other).start()32 33 class&nbsp;Pinger(TcpThread):34 &nbsp; def&nbsp;run(self):35 &nbsp;&nbsp;&nbsp; time.sleep(1)36 &nbsp;&nbsp;&nbsp; s = self.get_socket()37 &nbsp;&nbsp;&nbsp; try:38 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.connect((&#8216;127.0.0.1&#8216;, self.other))39 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.send(&#8216;PING from %(port)s&#8216; % {&#8216;port&#8216;: self.port})40 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.close()41 &nbsp;&nbsp;&nbsp; except Exception:42 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print&nbsp;&#8220;*** Failed sending ping!&#8220;43 44 class&nbsp;Alerter(TcpThread):45 &nbsp; def&nbsp;__init__ (self, self_port, other_port, max_delay):46 &nbsp;&nbsp;&nbsp; TcpThread.__init__(self, self_port, other_port)47 &nbsp;&nbsp;&nbsp; self.max_delay = datetime.timedelta(seconds=max_delay)48 &nbsp; def&nbsp;run(self):49 &nbsp;&nbsp;&nbsp; global last_ping_time50 &nbsp;&nbsp;&nbsp; while 1:51 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time.sleep(5)52 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ping_delay = datetime.datetime.now() &#8211; last_ping_time53 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ping_delay &gt; self.max_delay:54 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print&nbsp;&#8216;*** ALERT, RING BROKEN!&#8216; + 55 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216; No ping in %(delay)s.&#8216; % {&#8216;delay&#8216;: ping_delay}56 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pinger(self.port, self.other).start()57 58 this_port = int(sys.argv[1])59 other_port = int(sys.argv[2])60 max_delay = int(sys.argv[3])61 initial_ping = sys.argv[4] == &#8220;true&#8220;62 63 print&nbsp;&#8220;** Python Ring Server (&#8220;, this_port, &#8220;)&#8220;64 65 if initial_ping: Pinger(this_port, other_port).start()66 Listener(this_port, other_port).start()67 Alerter(this_port, other_port, max_delay).start() [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vidar Lund</title>
		<link>http://blog.kjempekjekt.com/2010/09/06/ping-ring-del-2-c/#comment-105050</link>
		<dc:creator>Vidar Lund</dc:creator>
		<pubDate>Mon, 06 Sep 2010 19:34:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.kjempekjekt.com/2010/09/06/ping-ring-del-2-c/#comment-105050</guid>
		<description>Eg må sei eg synes YAGNI har mye for seg... ;)
http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it
Og eg er veldig enig i det du seier med at dette formatet egner seg mye bedre til ein slik artikkel.

I mitt hode var dette kode som egna seg bedre til integrasjonstesting enn unittesting, og det å kjøre programmet på ein maskin mot forskjellige portar kan fint sjåast på som ein integrasjonstest.</description>
		<content:encoded><![CDATA[<p>Eg må sei eg synes YAGNI har mye for seg&#8230; ;)<br />
<a href="http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it" rel="nofollow">http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it</a><br />
Og eg er veldig enig i det du seier med at dette formatet egner seg mye bedre til ein slik artikkel.</p>
<p>I mitt hode var dette kode som egna seg bedre til integrasjonstesting enn unittesting, og det å kjøre programmet på ein maskin mot forskjellige portar kan fint sjåast på som ein integrasjonstest.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

