Page 5 of 8

Re: Networking Question

Posted: 23 Jan 2012, 21:41
by bubu
Nesapratu. Ko tas nozīmē, ka pakas izmērs ir 2 biti?
Pakas izmērs tiek rēķināts automātiski no min/max/prec mainīgajiem.

Re: Networking Question

Posted: 23 Jan 2012, 22:37
by CodeWolf
nu kā tu rakstiji ka lai iegūtu lielāku vērtību man pie 14 bija japieskaita 1bits klat..
pirmstam man limits uz (14) bija =64 tagad uz (15) kautkadi 230..
sanāk ka es bitcnt varu skaitīt klāt cik vērības gribu un tas nepalielinās sūtāmās paketes izmērus.. ?

Code: Select all

bsOut.Write((char*)buffer,BBC);
BBC tak nosaka pakas izmēru..

Re: Networking Question

Posted: 28 Jan 2012, 01:33
by CodeWolf
Atvainojos par dubultpostu.. Radās neliela problēma kuru īsti nezinu kā novērst tāpēc nodomāju ka kāds no jums zinās kā ko tādu atrisināt..
Visu itkā sataisiju...vismaz pa daļām tagad meiģinu visu smuki sastiķēt kopā ar klasēm.. lai nevalda tāds bardaks kā iepriekš..
entie bitu pārveidotāji untt..
Lieta tāda ka RakNet izmanto case funkciju priekš sūtijumiem .. un man paku rakstītājs/lasītājs atrodas citā failā.. lai varētu pēc nepieciešamības izmantot viņus ... //dPacket * Paka0 = new dPacket(); problēma tajā visā ir tāda ,ka Send funkcijām jāatrodas tur pat kur write un
Ziņu id.. priekš rakstīšanas nebija problēmu jo Ziņu ID (jeb GameMessageIDs) ir viegli definēt..

Code: Select all

void dPacket::write( float  value, float min,  float max,  float precision,int GameMessageIDs)
//.....
//......
bsOut.Write((RakNet::MessageID)GameMessageIDs);
bsOut.Write(value);  //(char*)buffer,BBC
peer->Send(&bsOut,HIGH_PRIORITY,RELIABLE_ORDERED,0,packet->systemAddress,false);
Bet nolasīšanai ir jaizmanto case..
kā lai es tagad sadalu
case uz abām pusēm..?
jo main failā izmantoju visu struktūru..

Code: Select all

while (1)
	{
		for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
		{
			switch (packet->data[0])
				{
				case ID_REMOTE_DISCONNECTION_NOTIFICATION:
					printf("Another client has disconnected.\n");
					break;
				case ID_REMOTE_CONNECTION_LOST:
					printf("Another client has lost the connection.\n");
					break;
				case ID_REMOTE_NEW_INCOMING_CONNECTION:
					printf("Another client has connected.\n");
					break;
				case ID_CONNECTION_REQUEST_ACCEPTED:
					printf("Our connection request has been accepted.\n");
					break;	
//un tā tālak..				
un iekš dPacket::read

Code: Select all

float dPacket::read(float min, float max, float precision,int GameMessageIDs)
//...........
switch(packet->data[0])
		{
	case GameMessageIDs:
	{
	
    int bitcnt = (Log2((max - min) / precision))+1;
	//....
	int tmp;
	bsIn.Read(tmp);
	bufPos=0;

	printf("----------------------------------------------\n");
	printf("Dati -> Iesutne\nBBC = -- \nTMP = %i \nBitcnt = %i \n",tmp,bitcnt);
    return min + tmp * precision;
	
	}
	break;
	default:
	printf("Message with identifier %i has arrived.\n", packet->data[0]);
	break;
kā jau minēju visam smuki jāatrodas iekš case un kopā ja tas tā nav tad funkcijas nestrādā..
ja vēlāk iekš maina kur man ir nepieciešams .. rakstīt lasīt pakas ievietoju kodu ārpus case tas nestrādā
ja iekš.. + vajadzīgās sadaļas tad viņš rāda erroru... (vismz kko lidzigu tam ) -
1 #IND00
Man nav īsti nojausmas kā lai šo vietu sataisa/apiet..
+Veidoju dubultpostu jo domāju ka labojot veco neviens to neizlasīs.. :)

Re: Networking Question

Posted: 28 Jan 2012, 09:09
by snake5
http://stackoverflow.com/questions/3479 ... 1-ind-mean
Some operations don't make mathematical sense, such as taking the square root of a negative number. (Yes, this operation makes sense in the context of complex numbers, but a double represents a real number and so there is no double to represent the result.) The same is true for logarithms of negative numbers. Both sqrt(-1.0) and log(-1.0) would return a NaN, the generic term for a "number" that is "not a number". Windows displays a NaN as -1.#IND ("IND" for "indeterminate") while Linux displays nan. Other operations that would return a NaN include 0/0, 0*∞, and ∞/∞. See the sample code below for examples.
Mazāk par minūti prasīja atrast - attiecīgi nav problēma, kuras dēļ pieprasīt visa foruma uzmanību.

Tagad zini, ko meklēt - atliek debugot.

Re: Networking Question

Posted: 28 Jan 2012, 15:09
by CodeWolf
nu es jau neprasiju īsti par eroru.. vienkārši ja tad izsaucu funkciju case iekš case
tad man izmetas tas errors + pat nemaz nezinu vai drīkst tā darīt..
Image

Re: Networking Question

Posted: 28 Jan 2012, 21:55
by bubu
Wtf - ko nozīmē "izsaukt case iekš case"? Izsaukt var tikai funkcijas..
Īsti arī nesaprotu kā tavs augstāk rakstītais kods saistās ar jebko, ko tu saki. Bet nu kodu strukturēt drīkst kā grib. Iekš viena switch'a drīkst būt cits switch's, ja tas ir tas, ko tur prasi.
Un ja kautkas nestrādā kā plānots, tad lieto debugeri. Studijai ir ļoti labs debugeris. Izpildi kodu rindiņu pa rindiņai. Pēc katras aizdomīgākas rindiņas pārbaudi mainīgo vērtības - vai tās ir tādas, kā tu sagaidi. Utt..

Re: Networking Question

Posted: 28 Jan 2012, 22:58
by CodeWolf
hmh..
Pareizi saprati.
Es jau ta ari daru.. ,bet ja uztaisu precīzi tādu pašu kodu kā iekš maina tad vienkārši tās funkcijas tiek bloķētas... jeb vienkārši nestrādā

Code: Select all

float dPacket::read(float min, float max, float precision,int GameMessageIDs)
{
		RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
	        RakNet::Packet *packet;
		for(packet=peer->Receive(); packet; peer->DeallocatePacket(packet),packet=peer->Receive())
		{
			switch (packet->data[0])
			{
			case ID_GAME_MESSAGE_1://jeb GameMessageIDs
				{
					RakNet::BitStream bsIn(packet->data,packet->length,false);
					bsIn.IgnoreBytes(sizeof(RakNet::MessageID));
					bsIn.Read(tmp);
					printf("\n Client-  %f \n",tmp);
				}
			break;
			default:
				printf("Message with identifier %i has arrived.\n", packet->data[0]);
				break;
		}
	}
	return tmp;
}
izsaucot komandu tā pat netiek atspoguļota..
printf("\n Client- %f \n",tmp);
ar parasto
bsIn.Read(tmp);
iekš maina viss tiek saņemts un atspoguļots..
case ID_GAME_MESSAGE_1:
{
nm = Paka0->read(-100.0f,+100.0f,0.01f,ID_GAME_MESSAGE_1);
printf("\n%f\n", nm);
bsIn.Read(nm);
printf("\n%f\n", nm);

}
break;
Cik zinu kods ir pareizs.. bet kautkas neļauj paku lasītāj funkcijai nolasīt sūtijumu..

Re: Networking Question

Posted: 29 Jan 2012, 06:51
by bubu
Nu kamon. Jau kuro reizi saku - lieto debugeri. Ieliec breikpointu funkcijas sākumā un spied F10/F11 un skaties kas notiek rindu pa rindai. Un pēc katra nospiediena Watch logā pārbaudi visu savu mainīgo vērtības. Neviens te nezīlēs tējas biezumos...

Re: Networking Question

Posted: 30 Jan 2012, 00:15
by CodeWolf
hmh okej viss strādā..tikai atkal esmu apstajies .. pie šiem 2 punktiem..

1. sakopojot pozicijasvienā int'ā tās iegūst šausmīgi lielu skaitli..
Image
kuru šaubos vai vispār drīkstu sūtīt.. kanekā atļautais limits ir +100.0f ,tās nevajadzētu kautkā saspiest..?

2. itkā izdomāju kā varētu iekļauties -100 un +100... scale' ojot jeb merogojot visu mazāku..bet
tad problēmas rada 0.01 precizitāte.. kura arī atspoguļojas vai rada nepilnibas 1majā punktā..
to gadijumā nevar roundot..(jeb noapaļot ar 0.01 uz augšu..)?

Re: Networking Question

Posted: 30 Jan 2012, 01:27
by bubu
Limits +100 ir x, y un z mainīgajiem. Nevis pos_packet.