Hey Bradley, Awesome that there is still progress on this, but after applying the changes you mentioned, and trying to compile, I get:
g++ -o src/NetEngine.o -c -g -DHAVE_CONFIG_H -D_GNU_SOURCE=1 -D_THREAD_SAFE -I/sw/include -Ilibgag/include -I. -I/sw/include/SDL src/NetEngine.cpp src/NetEngine.cpp: In member function 'void NetEngine::clearTopOrders()': src/NetEngine.cpp:95: error: expected initializer before '->' token src/NetEngine.cpp: In member function 'void NetEngine::pushOrder(boost::shared_ptr<Order>, int, bool)': src/NetEngine.cpp:112: error: 'class std::vector<boost::shared_ptr<Order>, std::allocator<boost::shared_ptr<Order> > >' has no member named 'push' scons: *** [src/NetEngine.o] Error 1 scons: building terminated because of errors. Perhaps I applied it wrongly? Diff at http://pastie.org/348145 I noticed at the end of line 9 in the pastie that it was a comma. I tried a semi colon there, but same problem. Regards Kieran On Mon, Dec 29, 2008 at 2:31 PM, Bradley Arsenault <[email protected]>wrote: > I figured out the bug in Beta 4. Unfortunately, just as I was sending the > email and committing the patch, the power went off in my house. The desktop > where my globulation 2 work is on no longer worked. So I'm on the laptop > sending this email. > > I figured out that the bug was due to the step-push up. The networking > system queues up messages in queues as they are arriving across the network. > The front of the queues represent the messages to be executed at each frame > and are sychronized across the network. However the back of queues, since > messages are arriving at different times, aren't sychronized at all, but the > order of the messages is still maintained and sychronized across the > network. What was happening is that the network push-up code was pushing a > message to the end of the queues. Because the ends of the queues are > desychronized across network systems, adding one more message will corrupt > the order of the ends of the queues, which must stay schronized across > across the network. Because the ends of the queues are in the wrong order > and desychronized, eventually after executing several frames the front of > the queue, which also must be sychronized, will become desychronized. > > The flaw in the desync detection function failed to detect this specific > desychronization properly, so the desycnronization detection itself is > desychronized across the network systems. > > The solution is for the network push-up function to push to the front of > the queue rather then back of the queue. Because the front of the queue > stays sychronized normally, adding an order would stay sychronized across > the network, so nothing bocomes out of order and desychronized across the > systems computers. > > The fix is to change a push_back to a push_front. > > Line src/NetEngine.h:90 revision 8a1d2e4e3e63 > > std::vector<std::vector<boost::shared_ptr<Order> > > orders; > > Starting at line src/NetEngine.cpp:90: > > for(int i=0; i<diff; ++i) > { > for(int p=0; p<orders.size(); ++p) > { > > boost::shared_ptr<Order> order = > boost::shared_ptr<Order>(new NullOrder), > > order->sender=p; > orders[p].insert(orders[p].begin(), order); > } > } > > Line 119 in the original file, which was > orders[playerNumber].push(norder) > will become > orders[playerNumber].push_back(norder); > > Line 128 which was > return orders[playerNumber].front() > will become > return *orders[playerNumber].begin() > > Line 100 in the original file which was > orders[p].pop(); > will become > orders[p].erase(orders[p].begin()); > > > > And I am pretty sure that is all of the changes. What I have done here is > first, i had to convert the type of the order queues from std::queue to > std::vector because we needed to be able to push to the front of the queue, > and std::queue did not allow that semantic. The second thing i needed to to > do was change the latency push up function to push to the front of the queue > manually, rather then using the NetEngine::pushOrder function. > > What i wrote here isn't formatted correctly and i'm not sure its not bug > free, like i missed a line that needs change in the conversions. > > The result: bug solved. Try it out! Do not work from the patched debug > place, i'm 99% sure this will fix the bug. > > -- > Extra cheese comes at a cost. Bradley Arsenault. > > _______________________________________________ > glob2-devel mailing list > [email protected] > http://lists.nongnu.org/mailman/listinfo/glob2-devel > >
_______________________________________________ glob2-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/glob2-devel
