Quote
Well I could easily be wrong, but I suspect you have not fully consider the complexity of the program.
Believe me, I did consider the complexity of the program. I assume that we are talking about the
client, thereby not taking into account many issues related to full client/server operation, efficiency and scalability of the protocol and the server implementation. These are tricky issues especially when not planning ahead and having no prior experience (now nobody blames you for not planning ahead to cater for 8000+ users, mind you).
Quote
- code for rendering "rich text"
100% something you don't want to implement yourself.
Quote
- code that provides the smarts for Bridge Master
Different product.
Quote
- code for interfacing with things like GIB, FD, and (especially) Internet Explorer. Try doing this in C if you don't believe me that it is complicated (and if you are successful please send me some code samples!).
If the third parties involved are not able to provide you with a reasonable C API I readily admit that it is a pain in the butt to interface with such applications through other means (if you have to use C). I don't know much about using the Internet Explorer component, it's supposed to be easy to use, but I wouldn't be surprised if the opposite was true.
I'm not sure what I myself would do, probably use a lightweight HTML browser component that fits the special needs for my application (a huge amount of IE rendering capabilities are unused by BBO anyway).
Quote
- code for doing some tricky graphics related things (like card animation). Yes, I could use a 3rd party library for this, but I don't.
Well, I don't know
how much low-level work you do in fact, but if it boils down to drawing the pixels mostly yourself I'd say, yes, that is a lot of work (not to say a lot of time rather spent elsewhere *duck*).
Quote
- code for parsing and dealing with over 500 types of server->client messages. Most of these are not too tough to deal with, but collectively it still represents a lot of code. There are over 200 types client->server messages as well.
- network code. I did not write this part of the client (good thing!). If you think it is easy to get this right, you are either a genius or you are very naive.
It's definitely not easy to get point one right, but point two should be pretty straightforward. Then again, maybe it's a pain under Windows or used to be that way when you started working on BBO (under Windows 95 proper or Win NT presumably). I don't know for I have avoided Win32 successfully so far, but opening a TCP stream on both ends and sending/receiving your protocol over it shouldn't be the main challenge (or is it?).
Quote
- there is a whole class of problems that Uday and I call "race conditions" that are hard to avoid and hard to deal with in any client-server application in which more than one person can simultaneously take actions that effect one another. Server-generated events that are the result of timers (as opposed to actions of users) such as tournaments starting further complicate things.
Yeah, very tricky. Mainly the point of designing a good protocol (which is obviously not easy). If it happens that you have to plug a lot of holes when the system grows this is obviously a source for quite a lot of code complexity...
Quote
Or you could just count the number of lines of source code. I am not sure of the exact number, but it is certainly well over 500,000. That seems like a lot to me.
It is, but we are talking about a client for a card game
including several general purpose libraries you apparently happened to have written in the process. I did not take that into account with my first reply.
Let me finish by saying that I'm not suggesting that the BBO client is some trivial piece of undergraduate homework. It's not the Linux kernel either, however...
--Sigi