<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-32523054</atom:id><lastBuildDate>Thu, 31 Jul 2008 22:47:53 +0000</lastBuildDate><title>Paul Bowsher's Blog</title><description/><link>http://www.boffbowsh.co.uk/</link><managingEditor>noreply@blogger.com (Paul)</managingEditor><generator>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-32523054.post-115585254083742423</guid><pubDate>Thu, 17 Aug 2006 22:09:00 +0000</pubDate><atom:updated>2006-08-17T15:26:14.530-07:00</atom:updated><title>Finally...</title><description>&lt;p&gt;So welcome. I've finally gotten around to starting a blog. Allow me to introduce myself. My name is Paul Bowsher, a 21 year old Software Engineer from Andover, UK. I work for &lt;a href="http://www.prizefight.com/"&gt;Prize Fight&lt;/a&gt;, an Online Gaming web site where you can play games like CS:Source, BF2, Quake 4 and more against real people, for real money. I hold the position of Lead Developer, and am responsible for a lot of the systems and game integration you see on the site. We've coded PF in Python for the backend systems, and ASP.NET/C# for the Web Frontend and our Operations screens. You can check out more of what the dev team get up to over on our &lt;a href="http://www.pfbot.com"&gt;own blog&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In my spare time, I work for &lt;a href="http://www.multiplay.co.uk/"&gt;Multiplay UK&lt;/a&gt; who run the UK's Largest series of LAN parties, the i-series at Newbury Racecourse. My main role is as a tournament admin for Battlefield Series, and at our next event, &lt;a href="http://www.multiplay.co.uk/i28"&gt;i28&lt;/a&gt;, I'm hoping to have some killer systems to make the tournament run a lot more smoothly. &lt;/p&gt; &lt;p&gt;The tournaments at the i-series are running using some in-house software called ClanForge. ClanForge schedules the tournaments and allocates servers, which it also controls the running of. The problem with CF at large events like i28, is that it doesn't do any game-specific tasks like capturing scores, starting matches, or organising teams. Up until i27, this all had to be done manually. At i27, I wrote a &lt;a href="http://bf2.fun-o-matic.org/index.php/ModManager"&gt;ModManager&lt;/a&gt; script for BF2 that automated a lot of the work for us. Admins would make sure everyone was on the correct team, then I'd have to make an rcon call for them to lock the teams and start the match. After the first half, the teams are swapped, the round started again, and then at the end the scores are sent as an XML-RPC call (yes, that's right, XML-RPC from a Game Server, neat eh?) to a python script backed by a MySQL database. The scores were then read off a noddy little web page built purely to spew out the scores, and they were entered by hand into ClanForge.&lt;/p&gt; &lt;p&gt;That was i27. For i28 I'm working on something better. I'm now using ASP.NET all the way for both the Web Page and the XML-RPC listener. The ModManager script will stay largely the same, with a couple of tweaks here and there, the main bulk of the change is in how manual things are. They're not at all. Steve "Killing" Hartland, the creator of ClanForge, has exposed a few XML-RPC APIs for score entering, schedule queries and server control. My plan is to matches assigned to each admin for when they log into the admin site, where they can see each match that's currently going on. Pre-match, it'll give a display of how many players are on the server so they know when to keep an eye on that server ready for starting. When it's ready, they'll hit a Go button which will lock the teams and start the match. This is then forgotten about until the match is over. Once the site received the scores from the server, they're put on screen for the admin to approve, and they're then posted automatically via XML-RPC into ClanForge.&lt;/p&gt; &lt;p&gt;Today, I've been hitting snags with C# on this front. I'm using &lt;a href="http://www.cookcomputing.com/"&gt;Charles Cook's&lt;/a&gt; &lt;a href="http://www.xml-rpc.net"&gt;XML-RPC.NET&lt;/a&gt; library to receive and make requests, which is very flexible in terms of transparency between your local C# code and the remote service. XML-RPC structs are deserialized into C# structs, and all is well. However, I'm a big fan of .NET DataSets, and thought it'd be killer to have ClanForge's responses deserialzed into a .NET DataSet. This is turning out to be more tricky than I'd thought. XML-RPC.NET deserializes fine into C# structs, and I can use the .NET Framework's Reflection library to inspect the struct, however the strong-typing has me bent over the barrel.&lt;/p&gt; &lt;p&gt;My XML-RPC interface methods in .NET return an array of serverinfo structs, however to generalise the DataSet deserializer enough the call has to be made expecting an object return type. Try actually casting from an object to something iterable, it just doesn't seem to work. I think I'm going to have to learn a bit more about Reflection in the coming few days. Will update more when I figure it out :)&lt;/p&gt;</description><link>http://www.boffbowsh.co.uk/2006/08/finally.html</link><author>noreply@blogger.com (Paul)</author></item></channel></rss>