diff options
author | Kahrl <kahrl@gmx.net> | 2011-11-07 04:20:33 +0100 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-11-07 11:21:42 +0200 |
commit | 1c98ec94da18c97272e1b0a2c1e43baf0683a187 (patch) | |
tree | 9351db1279247e48303fb021323e4e3428f9a42b | |
parent | 28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1 (diff) | |
download | minetest-1c98ec94da18c97272e1b0a2c1e43baf0683a187.tar.gz minetest-1c98ec94da18c97272e1b0a2c1e43baf0683a187.tar.bz2 minetest-1c98ec94da18c97272e1b0a2c1e43baf0683a187.zip |
Make Connection::Receive return the data via a SharedBuffer reference, so the caller doesn't have to choose the right buffer size in advance.
Conflicts:
src/test.cpp
-rw-r--r-- | src/client.cpp | 5 | ||||
-rw-r--r-- | src/connection.cpp | 4 | ||||
-rw-r--r-- | src/connection.h | 2 | ||||
-rw-r--r-- | src/server.cpp | 5 | ||||
-rw-r--r-- | src/test.cpp | 52 |
5 files changed, 33 insertions, 35 deletions
diff --git a/src/client.cpp b/src/client.cpp index a777293a3..69c91bc30 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -665,14 +665,13 @@ void Client::ReceiveAll() void Client::Receive() { DSTACK(__FUNCTION_NAME); - u32 data_maxsize = 200000; - Buffer<u8> data(data_maxsize); + SharedBuffer<u8> data; u16 sender_peer_id; u32 datasize; { //TimeTaker t1("con mutex and receive", m_device); //JMutexAutoLock lock(m_con_mutex); //bulk comment-out - datasize = m_con.Receive(sender_peer_id, *data, data_maxsize); + datasize = m_con.Receive(sender_peer_id, data); } //TimeTaker t1("ProcessData", m_device); ProcessData(*data, datasize, sender_peer_id); diff --git a/src/connection.cpp b/src/connection.cpp index 31c0f77a3..b9c5d2ac8 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -1577,7 +1577,7 @@ void Connection::Disconnect() putCommand(c); } -u32 Connection::Receive(u16 &peer_id, u8 *data, u32 datasize) +u32 Connection::Receive(u16 &peer_id, SharedBuffer<u8> &data) { for(;;){ ConnectionEvent e = waitEvent(m_bc_receive_timeout); @@ -1589,7 +1589,7 @@ u32 Connection::Receive(u16 &peer_id, u8 *data, u32 datasize) throw NoIncomingDataException("No incoming data"); case CONNEVENT_DATA_RECEIVED: peer_id = e.peer_id; - memcpy(data, *e.data, e.data.getSize()); + data = SharedBuffer<u8>(e.data); return e.data.getSize(); case CONNEVENT_PEER_ADDED: { Peer tmp(e.peer_id, e.address); diff --git a/src/connection.h b/src/connection.h index dc61394fa..6d26e2e35 100644 --- a/src/connection.h +++ b/src/connection.h @@ -551,7 +551,7 @@ public: void Connect(Address address); bool Connected(); void Disconnect(); - u32 Receive(u16 &peer_id, u8 *data, u32 datasize); + u32 Receive(u16 &peer_id, SharedBuffer<u8> &data); void SendToAll(u8 channelnum, SharedBuffer<u8> data, bool reliable); void Send(u16 peer_id, u8 channelnum, SharedBuffer<u8> data, bool reliable); void RunTimeouts(float dtime); // dummy diff --git a/src/server.cpp b/src/server.cpp index 37ba65a95..52e9dc879 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1777,14 +1777,13 @@ void Server::AsyncRunStep() void Server::Receive() { DSTACK(__FUNCTION_NAME); - u32 data_maxsize = 10000; - Buffer<u8> data(data_maxsize); + SharedBuffer<u8> data; u16 peer_id; u32 datasize; try{ { JMutexAutoLock conlock(m_con_mutex); - datasize = m_con.Receive(peer_id, *data, data_maxsize); + datasize = m_con.Receive(peer_id, data); } // This has to be called so that the client list gets synced diff --git a/src/test.cpp b/src/test.cpp index db8db4ecc..37412d179 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -852,9 +852,9 @@ struct TestConnection try { u16 peer_id; - u8 data[100]; + SharedBuffer<u8> data; infostream<<"** running client.Receive()"<<std::endl; - u32 size = client.Receive(peer_id, data, 100); + u32 size = client.Receive(peer_id, data); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<std::endl; @@ -874,9 +874,9 @@ struct TestConnection try { u16 peer_id; - u8 data[100]; + SharedBuffer<u8> data; infostream<<"** running server.Receive()"<<std::endl; - u32 size = server.Receive(peer_id, data, 100); + u32 size = server.Receive(peer_id, data); infostream<<"** Server received: peer_id="<<peer_id <<", size="<<size <<std::endl; @@ -901,9 +901,9 @@ struct TestConnection try { u16 peer_id; - u8 data[100]; + SharedBuffer<u8> data; infostream<<"** running client.Receive()"<<std::endl; - u32 size = client.Receive(peer_id, data, 100); + u32 size = client.Receive(peer_id, data); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size <<std::endl; @@ -919,9 +919,9 @@ struct TestConnection try { u16 peer_id; - u8 data[100]; + SharedBuffer<u8> data; infostream<<"** running server.Receive()"<<std::endl; - u32 size = server.Receive(peer_id, data, 100); + u32 size = server.Receive(peer_id, data); infostream<<"** Server received: peer_id="<<peer_id <<", size="<<size <<std::endl; @@ -944,14 +944,14 @@ struct TestConnection sleep_ms(50); u16 peer_id; - u8 recvdata[100]; + SharedBuffer<u8> recvdata; infostream<<"** running server.Receive()"<<std::endl; - u32 size = server.Receive(peer_id, recvdata, 100); + u32 size = server.Receive(peer_id, recvdata); infostream<<"** Server received: peer_id="<<peer_id <<", size="<<size <<", data="<<*data <<std::endl; - assert(memcmp(*data, recvdata, data.getSize()) == 0); + assert(memcmp(*data, *recvdata, data.getSize()) == 0); } #endif u16 peer_id_client = 2; @@ -987,29 +987,29 @@ struct TestConnection infostream<<"*** Receiving the packets"<<std::endl; u16 peer_id; - u8 recvdata[20]; + SharedBuffer<u8> recvdata; u32 size; infostream<<"** running client.Receive()"<<std::endl; peer_id = 132; - size = client.Receive(peer_id, recvdata, 20); + size = client.Receive(peer_id, recvdata); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size - <<", data="<<recvdata + <<", data="<<*recvdata <<std::endl; assert(size == data1.getSize()); - assert(memcmp(*data1, recvdata, data1.getSize()) == 0); + assert(memcmp(*data1, *recvdata, data1.getSize()) == 0); assert(peer_id == PEER_ID_SERVER); infostream<<"** running client.Receive()"<<std::endl; peer_id = 132; - size = client.Receive(peer_id, recvdata, 20); + size = client.Receive(peer_id, recvdata); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size - <<", data="<<recvdata + <<", data="<<*recvdata <<std::endl; assert(size == data2.getSize()); - assert(memcmp(*data2, recvdata, data2.getSize()) == 0); + assert(memcmp(*data2, *recvdata, data2.getSize()) == 0); assert(peer_id == PEER_ID_SERVER); bool got_exception = false; @@ -1017,10 +1017,10 @@ struct TestConnection { infostream<<"** running client.Receive()"<<std::endl; peer_id = 132; - size = client.Receive(peer_id, recvdata, 20); + size = client.Receive(peer_id, recvdata); infostream<<"** Client received: peer_id="<<peer_id <<", size="<<size - <<", data="<<recvdata + <<", data="<<*recvdata <<std::endl; } catch(con::NoIncomingDataException &e) @@ -1056,12 +1056,12 @@ struct TestConnection //int receivetimes = myrand_range(1,20); int receivetimes = 20; for(int i=0; i<receivetimes; i++){ - u8 recvdata[100000]; + SharedBuffer<u8> recvdata; u16 peer_id = 132; u16 size = 0; bool received = false; try{ - size = client.Receive(peer_id, recvdata, 100000); + size = client.Receive(peer_id, recvdata); received = true; }catch(con::NoIncomingDataException &e){ } @@ -1092,7 +1092,7 @@ struct TestConnection sleep_ms(3000); - u8 recvdata[datasize + 1000]; + SharedBuffer<u8> recvdata; infostream<<"** running client.Receive()"<<std::endl; u16 peer_id = 132; u16 size = 0; @@ -1102,7 +1102,7 @@ struct TestConnection if(porting::getTimeMs() - timems0 > 5000) break; try{ - size = client.Receive(peer_id, recvdata, datasize + 1000); + size = client.Receive(peer_id, recvdata); received = true; }catch(con::NoIncomingDataException &e){ } @@ -1116,13 +1116,13 @@ struct TestConnection infostream<<"Received data (size="<<size<<"):"; for(int i=0; i<size && i<20; i++){ if(i%2==0) DEBUGPRINT(" "); - DEBUGPRINT("%.2X", ((int)((const char*)recvdata)[i])&0xff); + DEBUGPRINT("%.2X", ((int)(recvdata[i]))&0xff); } if(size>20) infostream<<"..."; infostream<<std::endl; - assert(memcmp(*data1, recvdata, data1.getSize()) == 0); + assert(memcmp(*data1, *recvdata, data1.getSize()) == 0); assert(peer_id == PEER_ID_SERVER); } |