Android RakNet has µáö öë äµ μ Ï öï Ö ¢ Ó'
****É
RakNet ~úwin ~~************************************ ¬ µ« Ú úandroid ************************************************ µ20.android ********************************************************************
Ï çé µ μ Ï öï Ï ¢
Ï Ä ää × Ô 'ø Chat Example Client ° íchat Example Server {µööö û £ {£%%^%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' comment '***********************************************************
Authorization + oaM8L3A + signature/W0 +/S9MrHzai5/Signature + PHA + SmF2YbLjyrXP1r/Signature + signature + hozwvcD48cD7Ktc/W1K3A7aO6UmFrbmV0zai5/VBvc Authorization + vfjQ0NPv0vS3osvN0 + authorization + PHByZSBjbGFzcz0 = "brush: java; "> class Voice {// É ù Ò ô Ò» ö ö² Ù × Ó óó ô µ µäà public: Voice (); virtual ~ Voice (); void run (const char * ip); // Ø ü üö' Ð int portInAudioCallback (const void * inputBuffer); int portOutAudioCallback (void * inputBuffer ); void waitForStop (); void stop (); public: bool mute; RakNet: RakPeerInterface * rakPeer; RakNet: RakVoice rakVoice; PaError err; bool isStoped; bool runState ;};
void Voice::run(const char* ip) { //ͨ¹ýIpÁ¬½Ó¶Ô·½»ú×Ó£¬È»ºó´«Êä¡£////////////////////////////////////////////if (err != paNoError) {LOGI("Pa_Initialize fail: %s",Pa_GetErrorText(err));return;}mute = false;PaStream *stream;unsigned int maxConnectionsAllowed = 4;unsigned int maxPlayersPerServer = 4;unsigned short serverPort = 6000;RakNet::SocketDescriptor socketDescriptor(serverPort, 0);if (rakPeer->Startup(maxConnectionsAllowed, &socketDescriptor, 1) != RakNet::RAKNET_STARTED) {LOGI("Startup fail:");return;}rakPeer->SetMaximumIncomingConnections(maxPlayersPerServer);rakPeer->AttachPlugin(&rakVoice);rakVoice.Init(SAMPLE_RATE, FRAMES_PER_BUFFER * sizeof (short));PaDeviceIndex numdev;const PaDeviceInfo *info;int i;numdev = Pa_GetDeviceCount();PaStreamParameters inparam, outparam;memset(&inparam, 0, sizeof (PaStreamParameters));inparam.device = Pa_GetDefaultInputDevice();inparam.channelCount = 1;inparam.sampleFormat = paInt16;memset(&outparam, 0, sizeof (PaStreamParameters));outparam.device = Pa_GetDefaultOutputDevice();outparam.channelCount = 1;outparam.sampleFormat = paInt16;PaError err = Pa_OpenStream(&stream,&inparam,&outparam, SAMPLE_RATE, FRAMES_PER_BUFFER,paClipOff,PAInOutCallback,this);err = Pa_SetStreamFinishedCallback(stream, &StreamFinished );if(err != paNoError){LOGI("Cannot set stream finish callback");return;}if (err != paNoError) {LOGI("Pa_OpenStream fail: %s",Pa_GetErrorText(err));return;}err = Pa_StartStream(stream);if (err != paNoError) {LOGI("Pa_StartStream fail: %s",Pa_GetErrorText(err));return;}if (ip) {LOGI("Connect: %s",ip);rakPeer->Connect(ip, serverPort, 0, 0);}RakNet::Packet *p;unsigned char typeId;isStoped = false;runState = true;while (1) {if(!runState){Pa_AbortStream(stream);Pa_CloseStream(stream);isStoped = true;return;}p=rakPeer->Receive();while (p){LOGI("Receive data from: %s guid",p->systemAddress.ToString(),p->guid.ToString());if (p->data[0]==ID_CONNECTION_REQUEST_ACCEPTED){LOGI("ID_CONNECTION_REQUEST_ACCEPTED from %s\n", p->systemAddress.ToString());rakVoice.RequestVoiceChannel(p->guid);}else if (p->data[0]==ID_CONNECTION_ATTEMPT_FAILED){LOGI("ID_CONNECTION_ATTEMPT_FAILED\n");}else if (p->data[0]==ID_RAKVOICE_OPEN_CHANNEL_REQUEST || p->data[0]==ID_RAKVOICE_OPEN_CHANNEL_REPLY){LOGI("Got new channel from %s\n", p->systemAddress.ToString());}else if (p->data[0]==ID_NAT_TARGET_NOT_CONNECTED){RakNet::RakNetGUID g;RakNet::BitStream b(p->data, p->length, false);b.IgnoreBits(8); // Ignore the ID_...b.Read(g);LOGI("ID_NAT_TARGET_NOT_CONNECTED for %s\n", g.ToString());}else if (p->data[0]==ID_NAT_TARGET_UNRESPONSIVE){RakNet::RakNetGUID g;RakNet::BitStream b(p->data, p->length, false);b.IgnoreBits(8); // Ignore the ID_...b.Read(g);LOGI("ID_NAT_TARGET_UNRESPONSIVE for %s\n", g.ToString());}else if (p->data[0]==ID_NAT_CONNECTION_TO_TARGET_LOST){RakNet::RakNetGUID g;RakNet::BitStream b(p->data, p->length, false);b.IgnoreBits(8); // Ignore the ID_...b.Read(g);LOGI("ID_NAT_CONNECTION_TO_TARGET_LOST for %s\n", g.ToString());}else if (p->data[0]==ID_NAT_ALREADY_IN_PROGRESS){RakNet::RakNetGUID g;RakNet::BitStream b(p->data, p->length, false);b.IgnoreBits(8); // Ignore the ID_...b.Read(g);LOGI("ID_NAT_ALREADY_IN_PROGRESS for %s\n", g.ToString());}else if (p->data[0]==ID_NAT_PUNCHTHROUGH_FAILED){LOGI("ID_NAT_PUNCHTHROUGH_FAILED for %s\n", p->guid.ToString());}else if (p->data[0]==ID_NAT_PUNCHTHROUGH_SUCCEEDED){LOGI("ID_NAT_PUNCHTHROUGH_SUCCEEDED for %s. Connecting...\n", p->guid.ToString());rakPeer->Connect(p->systemAddress.ToString(false),p->systemAddress.GetPort(),0,0);}else if (p->data[0]==ID_ALREADY_CONNECTED){LOGI("ID_ALREADY_CONNECTED\n");}else if (p->data[0]==ID_RAKVOICE_CLOSE_CHANNEL){LOGI("ID_RAKVOICE_CLOSE_CHANNEL\n");}else if (p->data[0]==ID_DISCONNECTION_NOTIFICATION){LOGI("ID_DISCONNECTION_NOTIFICATION\n");}else if (p->data[0]==ID_NEW_INCOMING_CONNECTION){LOGI("ID_NEW_INCOMING_CONNECTION\n");}else if(p->data[0]==ID_CONNECTION_LOST){LOGI("ID_CONNECTION_LOST ¿É¿¿µÄÊý¾Ý°ü²»Äܱ»´«µÝµ½Ö¸¶¨µÄ·Ö×éϵͳ");}else{LOGI("Unknown packet ID %i\n", p->data[0]);}rakPeer->DeallocatePacket(p);p=rakPeer->Receive();}Pa_Sleep( 30 );}}
§ {******=£°
When μ Ï öä ä¼ þ '«Ä äwin Æ ¨  µäî ä' «Ä ädemo ö± Ó Ò Æ Ö ö² android commandid ********************************************************************
class CBTransferInterface : public RakNet::FileListTransferCBInterface //´«ÊäÎļþ½Ó¿Ú{public: bool OnFile(OnFileStruct *onFileStruct);virtual void OnFileProgress(FileProgressStruct *fps);virtual bool OnDownloadComplete(DownloadCompleteStruct *dcs);};// Sender progress notificationclass TestFileListProgress : public RakNet::FileListProgress //½ø¶È֪ͨ{virtual void OnFilePush(const char *fileName, unsigned int fileLengthBytes, unsigned int offset, unsigned int bytesBeingSent, bool done, RakNet::SystemAddress targetSystem, unsigned short setID);virtual void OnFilePushesComplete( RakNet::SystemAddress systemAddress, unsigned short setID );virtual void OnSendAborted( RakNet::SystemAddress systemAddress );};class FileTransferClient //¿Í»§¶Ë{public:int testTransfer(const char* ip,const char* filePath);void stopTransfer();void waitForStop();public:int transferStatus;int isStoped;};
§ {******=£°
For Android, please refer to the following link for more information: äü£ ;*******************************************************************