aboutsummaryrefslogtreecommitdiff
path: root/src/environment.h
Commit message (Expand)AuthorAge
...
* ABM and liquid overload skipPerttu Ahola2012-07-27
* Experimental-ish rollback functionalityPerttu Ahola2012-07-27
* Optimize headersPerttu Ahola2012-06-17
* Properly and efficiently use split utility headersPerttu Ahola2012-06-17
* Switch the license to be LGPLv2/later, with small parts still remaining as GP...Perttu Ahola2012-06-05
* Dynamic sky, fog and cloud colors; sun and moonPerttu Ahola2012-03-18
* Move ClientMap to clientmap.{h,cpp}Perttu Ahola2012-03-16
* MapBlockMesh, mesh animation system, urgent mesh updates, athmospheric light,...Kahrl2012-03-15
* Immediate smoke puff when a normal entity is punched to deathPerttu Ahola2012-03-10
* The huge item definition and item namespace unification patch (itemdef), see ...Kahrl2012-01-12
* Initialize ABM timer to random value to spread processingPerttu Ahola2012-01-02
* Fix ABM trigger chance being often way too highPerttu Ahola2012-01-02
* Add EnvRef:get_objects_inside_radius(pos, radius)Perttu Ahola2011-12-28
* Add ABM required neighbor checkPerttu Ahola2011-12-03
* Fix player double damagePerttu Ahola2011-12-02
* Move ServerRemotePlayer to a separate filePerttu Ahola2011-12-02
* Player-is-SAO WIPPerttu Ahola2011-12-01
* Handle ActiveBlockModifier intervals properly, down to 1sPerttu Ahola2011-11-29
* Replace old active block random node modifying things with actual ActiveBlock...Perttu Ahola2011-11-29
* Make blocks to be loaded from disk when the active block area reaches themPerttu Ahola2011-11-29
* Relatively snappy object-ground collision detectionPerttu Ahola2011-11-29
* GameDef compilesPerttu Ahola2011-11-29
* Create framework for getting rid of global definitions of node/tool/item/what...Perttu Ahola2011-11-29
* Scripting WIPPerttu Ahola2011-11-29
* Scripting WIPPerttu Ahola2011-11-29
* Add /clearobjectsPerttu Ahola2011-10-18
* mobv2Perttu Ahola2011-10-15
* Removed unused camera_position and camera_direction fields from Client. Moved...Kahrl2011-09-07
* lava!Perttu Ahola2011-08-15
* made screen go slightly blue when underwaterPerttu Ahola2011-07-01
* reorganized a lot of stuff and modified mapgen and objects slightly while doi...Perttu Ahola2011-06-26
* New map generator added (and SQLite, messed up the commits at that time...) (...Perttu Ahola2011-06-25
* tried to reduce unnecessary map saving disk i/o a bitPerttu Ahola2011-06-05
* Reduced server CPU usage on NodeMetadata step()s. Also furnace now cooks whil...Perttu Ahola2011-05-31
* player passwords and privileges in world/auth.txtPerttu Ahola2011-05-29
* a work-in-progress map modified callback interface (committing because i want...Perttu Ahola2011-05-24
* Some work-in-progress stuff and many comment updatesPerttu Ahola2011-05-22
* Preliminary "active block" stuff + set up test code to grow grass.Perttu Ahola2011-05-22
* Fixed a small memory leak in ServerEnvironment and cleaned the code a bitPerttu Ahola2011-05-21
* random comment updatesPerttu Ahola2011-04-30
* Some work-in-progress in hp and mobs and a frightening amount of random fixes.Perttu Ahola2011-04-21
* changed server to do object management at longer intervals (0.5s)Perttu Ahola2011-04-10
* implemented rats in new system to verify that it worksPerttu Ahola2011-04-10
* Some progress on transitioning from MapBlockObject to ActiveObject.Perttu Ahola2011-04-08
* updated scripting api a bitPerttu Ahola2011-02-23
* mainly work on object scripting apiPerttu Ahola2011-02-23
* preliminary lua scripting framework for objectsPerttu Ahola2011-02-21
* Temporary commit; lots of test code and stuffPerttu Ahola2011-02-21
* Now texture handling is fast. Also now players are saved on disk.Perttu Ahola2011-01-28
* fixed erroneus handling of many players with no peer existing at same timePerttu Ahola2011-01-18
ion::runTests(IGameDef *gamedef) { TEST(testHelpers); TEST(testConnectSendReceive); } //////////////////////////////////////////////////////////////////////////////// struct Handler : public con::PeerHandler { Handler(const char *a_name) { count = 0; last_id = 0; name = a_name; } void peerAdded(con::Peer *peer) { infostream << "Handler(" << name << ")::peerAdded(): " "id=" << peer->id << std::endl; last_id = peer->id; count++; } void deletingPeer(con::Peer *peer, bool timeout) { infostream << "Handler(" << name << ")::deletingPeer(): " "id=" << peer->id << ", timeout=" << timeout << std::endl; last_id = peer->id; count--; } s32 count; u16 last_id; const char *name; }; void TestConnection::testHelpers() { // Some constants for testing u32 proto_id = 0x12345678; u16 peer_id = 123; u8 channel = 2; SharedBuffer<u8> data1(1); data1[0] = 100; Address a(127,0,0,1, 10); const u16 seqnum = 34352; con::BufferedPacket p1 = con::makePacket(a, data1, proto_id, peer_id, channel); /* We should now have a packet with this data: Header: [0] u32 protocol_id [4] u16 sender_peer_id [6] u8 channel Data: [7] u8 data1[0] */ UASSERT(readU32(&p1.data[0]) == proto_id); UASSERT(readU16(&p1.data[4]) == peer_id); UASSERT(readU8(&p1.data[6]) == channel); UASSERT(readU8(&p1.data[7]) == data1[0]); //infostream<<"initial data1[0]="<<((u32)data1[0]&0xff)<<std::endl; SharedBuffer<u8> p2 = con::makeReliablePacket(data1, seqnum); /*infostream<<"p2.getSize()="<<p2.getSize()<<", data1.getSize()=" <<data1.getSize()<<std::endl; infostream<<"readU8(&p2[3])="<<readU8(&p2[3]) <<" p2[3]="<<((u32)p2[3]&0xff)<<std::endl; infostream<<"data1[0]="<<((u32)data1[0]&0xff)<<std::endl;*/ UASSERT(p2.getSize() == 3 + data1.getSize()); UASSERT(readU8(&p2[0]) == TYPE_RELIABLE); UASSERT(readU16(&p2[1]) == seqnum); UASSERT(readU8(&p2[3]) == data1[0]); } void TestConnection::testConnectSendReceive() { DSTACK("TestConnection::Run"); /* Test some real connections NOTE: This mostly tests the legacy interface. */ u32 proto_id = 0xad26846a; Handler hand_server("server"); Handler hand_client("client"); Address address(0, 0, 0, 0, 30001); Address bind_addr(0, 0, 0, 0, 30001); /* * Try to use the bind_address for servers with no localhost address * For example: FreeBSD jails */ std::string bind_str = g_settings->get("bind_address"); try { bind_addr.Resolve(bind_str.c_str()); if (!bind_addr.isIPv6()) { address = bind_addr; } } catch (ResolveError &e) { } infostream << "** Creating server Connection" << std::endl; con::Connection server(proto_id, 512, 5.0, false, &hand_server); server.Serve(address); infostream << "** Creating client Connection" << std::endl; con::Connection client(proto_id, 512, 5.0, false, &hand_client); UASSERT(hand_server.count == 0); UASSERT(hand_client.count == 0); sleep_ms(50); Address server_address(127, 0, 0, 1, 30001); if (address != Address(0, 0, 0, 0, 30001)) { server_address = bind_addr; } infostream << "** running client.Connect()" << std::endl; client.Connect(server_address); sleep_ms(50); // Client should not have added client yet UASSERT(hand_client.count == 0); try { NetworkPacket pkt; infostream << "** running client.Receive()" << std::endl; client.Receive(&pkt); infostream << "** Client received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { } // Client should have added server now UASSERT(hand_client.count == 1); UASSERT(hand_client.last_id == 1); // Server should not have added client yet UASSERT(hand_server.count == 0); sleep_ms(100); try { NetworkPacket pkt; infostream << "** running server.Receive()" << std::endl; server.Receive(&pkt); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { // No actual data received, but the client has // probably been connected } // Client should be the same UASSERT(hand_client.count == 1); UASSERT(hand_client.last_id == 1); // Server should have the client UASSERT(hand_server.count == 1); UASSERT(hand_server.last_id == 2); //sleep_ms(50); while (client.Connected() == false) { try { NetworkPacket pkt; infostream << "** running client.Receive()" << std::endl; client.Receive(&pkt); infostream << "** Client received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { } sleep_ms(50); } sleep_ms(50); try { NetworkPacket pkt; infostream << "** running server.Receive()" << std::endl; server.Receive(&pkt); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << std::endl; } catch (con::NoIncomingDataException &e) { } /* Simple send-receive test */ { NetworkPacket pkt; pkt.putRawPacket((u8*) "Hello World !", 14, 0); Buffer<u8> sentdata = pkt.oldForgePacket(); infostream<<"** running client.Send()"<<std::endl; client.Send(PEER_ID_SERVER, 0, &pkt, true); sleep_ms(50); NetworkPacket recvpacket; infostream << "** running server.Receive()" << std::endl; server.Receive(&recvpacket); infostream << "** Server received: peer_id=" << pkt.getPeerId() << ", size=" << pkt.getSize() << ", data=" << (const char*)pkt.getU8Ptr(0) << std::endl; Buffer<u8> recvdata = pkt.oldForgePacket(); UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0); } u16 peer_id_client = 2; /* Send a large packet */ { const int datasize = 30000; NetworkPacket pkt(0, datasize); for (u16 i=0; i<datasize; i++) { pkt << (u8) i/4; } infostream << "Sending data (size=" << datasize << "):"; for (int i = 0; i < datasize && i < 20; i++) { if (i % 2 == 0) infostream << " "; char buf[10]; snprintf(buf, 10, "%.2X", ((int)((const char *)pkt.getU8Ptr(0))[i]) & 0xff); infostream<<buf; } if (datasize > 20) infostream << "..."; infostream << std::endl; Buffer<u8> sentdata = pkt.oldForgePacket(); server.Send(peer_id_client, 0, &pkt, true); //sleep_ms(3000); Buffer<u8> recvdata; infostream << "** running client.Receive()" << std::endl; u16 peer_id = 132; u16 size = 0; bool received = false; u32 timems0 = porting::getTimeMs(); for (;;) { if (porting::getTimeMs() - timems0 > 5000 || received) break; try { NetworkPacket pkt; client.Receive(&pkt); size = pkt.getSize(); peer_id = pkt.getPeerId(); recvdata = pkt.oldForgePacket(); received = true; } catch (con::NoIncomingDataException &e) { } sleep_ms(10); } UASSERT(received); infostream << "** Client received: peer_id=" << peer_id << ", size=" << size << std::endl; infostream << "Received data (size=" << size << "): "; for (int i = 0; i < size && i < 20; i++) { if (i % 2 == 0) infostream << " "; char buf[10]; snprintf(buf, 10, "%.2X", ((int)(recvdata[i])) & 0xff); infostream << buf; } if (size > 20) infostream << "..."; infostream << std::endl; UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0); UASSERT(peer_id == PEER_ID_SERVER); } // Check peer handlers UASSERT(hand_client.count == 1); UASSERT(hand_client.last_id == 1); UASSERT(hand_server.count == 1); UASSERT(hand_server.last_id == 2); }