| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- /*
- * Copyright (c) 2014, Oculus VR, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
- #include "RakNetworkFactory.h"
- #include "GetTime.h"
- #include "RakPeerInterface.h"
- #include "PacketEnumerations.h"
- #include "RakNetStatistics.h"
- #include "DirectoryDeltaTransfer.h"
- #include "FileListTransfer.h"
- #include <cstdio>
- #include <stdlib.h>
- #include <conio.h>
- #include "FileList.h"
- #include "DataCompressor.h"
- #include "FileListTransferCBInterface.h"
- #ifdef _WIN32
- #include <windows.h> // Sleep
- #else
- #include <unistd.h> // usleep
- #endif
- class TestCB : public FileListTransferCBInterface
- {
- public:
- void OnFile(
- unsigned fileIndex,
- char *filename,
- unsigned char *fileData,
- unsigned compressedTransmissionLength,
- unsigned finalDataLength,
- unsigned short setID,
- unsigned setCount,
- unsigned setTotalCompressedTransmissionLength,
- unsigned setTotalFinalLength)
- {
- printf("%i. %i/%i %s %ib->%ib / %ib->%ib\n", setID, fileIndex, setCount, filename, compressedTransmissionLength, finalDataLength, setTotalCompressedTransmissionLength, setTotalFinalLength);
- }
- } transferCallback;
- int main(void)
- {
- char ch;
- RakPeerInterface *rakPeer;
- // directoryDeltaTransfer is the main plugin that does the work for this sample.
- DirectoryDeltaTransfer directoryDeltaTransfer;
- // The fileListTransfer plugin is used by the DirectoryDeltaTransfer plugin and must also be registered (you could use this yourself too if you wanted, of course).
- FileListTransfer fileListTransfer;
- rakPeer = RakNetworkFactory::GetRakPeerInterface();
- rakPeer->AttachPlugin(&directoryDeltaTransfer);
- rakPeer->AttachPlugin(&fileListTransfer);
- directoryDeltaTransfer.SetFileListTransferPlugin(&fileListTransfer);
- printf("This sample demonstrates the plugin to incrementally transfer compressed\n");
- printf("deltas of directories. In essence, it's a simple autopatcher.\n");
- printf("Unlike the full autopatcher, it has no dependencies. It is suitable for\n");
- printf("patching from non-dedicated servers at runtime.\n");
- printf("Difficulty: Intermediate\n\n");
- printf("Enter listen port, or hit enter to choose automatically\n");
- unsigned short localPort;
- char str[256];
- gets(str);
- if (str[0]==0)
- localPort=60000;
- else
- localPort=atoi(str);
- if (rakPeer->Initialize(8,localPort,30,0)==false)
- {
- RakNetworkFactory::DestroyRakPeerInterface(rakPeer);
- printf("RakNet initialize failed. Possibly duplicate port.\n");
- return 1;
- }
- rakPeer->SetMaximumIncomingConnections(8);
- printf("Commands:\n");
- printf("(S)et application directory.\n");
- printf("(A)dd allowed uploads from subdirectory.\n");
- printf("(D)ownload from subdirectory.\n");
- printf("(C)lear allowed uploads.\n");
- printf("C(o)nnect to another system.\n");
- printf("(Q)uit.\n");
- Packet *p;
- while (1)
- {
- // Process packets
- p=rakPeer->Receive();
- while (p)
- {
- if (p->data[0]==ID_NEW_INCOMING_CONNECTION)
- printf("ID_NEW_INCOMING_CONNECTION\n");
- else if (p->data[0]==ID_CONNECTION_REQUEST_ACCEPTED)
- printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
- rakPeer->DeallocatePacket(p);
- p=rakPeer->Receive();
- }
-
- if (kbhit())
- {
- ch=getch();
- if (ch=='s')
- {
- printf("Enter application directory\n");
- gets(str);
- if (str[0]==0)
- strcpy(str, "C:/RakNet");
- directoryDeltaTransfer.SetApplicationDirectory(str);
- printf("This directory will be prefixed to upload and download subdirectories.\n");
- }
- else if (ch=='a')
- {
- printf("Enter uploads subdirectory\n");
- gets(str);
- directoryDeltaTransfer.AddUploadsFromSubdirectory(str);
- printf("%i files for upload.\n", directoryDeltaTransfer.GetNumberOfFilesForUpload());
- }
- else if (ch=='d')
- {
- char subdir[256];
- char outputSubdir[256];
- printf("Enter remote subdirectory to download from.\n");
- printf("This directory may be any uploaded directory, or a subdir therein.\n");
- gets(subdir);
- printf("Enter subdirectory to output to.\n");
- gets(outputSubdir);
-
- unsigned short setId;
- setId=directoryDeltaTransfer.DownloadFromSubdirectory(subdir, outputSubdir, true, rakPeer->GetPlayerIDFromIndex(0), &transferCallback, HIGH_PRIORITY, 0);
- if (setId==(unsigned short)-1)
- printf("Download failed. Host unreachable.\n");
- else
- printf("Downloading set %i\n", setId);
- }
- else if (ch=='c')
- {
- directoryDeltaTransfer.ClearUploads();
- printf("Uploads cleared.\n");
- }
- else if (ch=='o')
- {
- char host[256];
- printf("Enter host IP: ");
- gets(host);
- if (host[0]==0)
- strcpy(host, "127.0.0.1");
- unsigned short remotePort;
- printf("Enter host port: ");
- gets(str);
- if (str[0]==0)
- remotePort=60000;
- else
- remotePort=atoi(str);
- rakPeer->Connect(host, remotePort, 0, 0);
- printf("Connecting.\n");
- }
- else if (ch=='q')
- {
- printf("Bye!\n");
- break;
- }
- }
- }
- RakNetworkFactory::DestroyRakPeerInterface(rakPeer);
- return 0;
- }
|