コード例 #1
0
void Listener::QueueRequest(Connection * connection, RequestBase * request)
{
    if (connection)
    {
        // normal request, internal requests have no connection
	    connection->NotifyQueuedRequest(request);
    }
    mQueuedRequests.push_back(QueueNode(connection,request));
}
コード例 #2
0
	void Listener::QueueRequest(Connection * connection, RequestBase * request)
	{
		connection->NotifyQueuedRequest(request);
		mQueuedRequests.push_back(QueueNode(connection,request));
	}
コード例 #3
0
void AccionFileNode_CopyPair(FileNode fileNodeLeft, FileNode fileNodeRight,
							 ActionFileNode *actionFileNodeQueue) {
	ActionFileNode actionFileNodeNew =
		ActionFileNode_CreateNormal(fileNodeLeft, fileNodeRight);

	if (!fileNodeLeft && !fileNodeRight) {
		AccionFileNode_Destroy(actionFileNodeNew);
		return;
	}
	if (!fileNodeLeft && fileNodeRight) {
		if (fileNodeRight->flags & FileFlag_Directory) {
			AccionFileNode_CompareChilds(actionFileNodeNew, actionFileNodeQueue,
										 AccionFileNode_DeletePair);
		}

		if (fileNodeRight->status != FileStatus_Deleted) {
			actionFileNodeNew->action = ActionFileCmp_DeleteRight;
		} else {
			actionFileNodeNew->action = ActionFileCmp_Nothing;
		}
		QueueNode(*actionFileNodeQueue, actionFileNodeNew);
	}
	if (fileNodeLeft && !fileNodeRight) {
		if (fileNodeLeft->status != FileStatus_Deleted) {
			if (fileNodeLeft->flags & FileFlag_Directory) {
				actionFileNodeNew->action = ActionFileCmp_MakeRightDirectory;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_CopyPair);
				actionFileNodeNew =
					ActionFileNode_CreateNormal(fileNodeLeft, fileNodeRight);
				actionFileNodeNew->action = ActionFileCmp_DateLeftToRight;
			} else {
				actionFileNodeNew->action = ActionFileCmp_LeftToRight;
			}
		} else {
			actionFileNodeNew->action = ActionFileCmp_Nothing;
		}
		QueueNode(*actionFileNodeQueue, actionFileNodeNew);
	}
	if (fileNodeLeft && fileNodeRight) {
		if ((fileNodeLeft->flags & FileFlag_Directory) ||
			(fileNodeRight->flags & FileFlag_Directory)) {
			if (fileNodeLeft->status != FileStatus_Deleted) {
				if (fileNodeRight->status == FileStatus_Deleted) {
					actionFileNodeNew->action =
						ActionFileCmp_MakeRightDirectory;
					QueueNode(*actionFileNodeQueue, actionFileNodeNew);
					actionFileNodeNew = ActionFileNode_CreateNormal(
						fileNodeLeft, fileNodeRight);
				}
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_CopyPair);
				if (abs((int)(fileNodeLeft->fileTime -
							  fileNodeRight->fileTime)) <=
					MaxDeltaTime) { // appox. equal
					actionFileNodeNew->action = ActionFileCmp_Nothing;
				} else {
					actionFileNodeNew->action = ActionFileCmp_DateLeftToRight;
				}
			} else {
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_DeletePair);
				if (fileNodeRight->status != FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteRight;
				}
			}
		} else {
			if (fileNodeLeft->status != FileStatus_Deleted) {
				if (abs((int)(fileNodeLeft->fileTime -
							  fileNodeRight->fileTime)) <= MaxDeltaTime) {
					actionFileNodeNew->action = ActionFileCmp_Nothing;
				} else {
					actionFileNodeNew->action = ActionFileCmp_LeftToRight;
				}
			} else {
				if (fileNodeRight->status != FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteRight;
				}
			}
		}
		QueueNode(*actionFileNodeQueue, actionFileNodeNew);
	}
}
コード例 #4
0
void AccionFileNode_SyncPair(FileNode fileNodeLeft, FileNode fileNodeRight,
							 ActionFileNode *actionFileNodeQueue) {
	if (!fileNodeLeft && !fileNodeRight) {
		return;
	}
	ActionFileNode actionFileNodeNew =
		ActionFileNode_CreateNormal(fileNodeLeft, fileNodeRight);

	if (!fileNodeLeft && fileNodeRight) {
		if (fileNodeRight->flags & FileFlag_Directory) {
			// Directory
			if (fileNodeRight->status == FileStatus_Deleted) {
				actionFileNodeNew->action = ActionFileCmp_Nothing;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);
			} else {
				actionFileNodeNew->action = ActionFileCmp_MakeLeftDirectory;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);

				// Iterate childs
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_SyncPair);

				// Create new action for date copy
				actionFileNodeNew =
					ActionFileNode_CreateNormal(fileNodeLeft, fileNodeRight);
				actionFileNodeNew->action = ActionFileCmp_DateRightToLeft;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);
			}
		} else {
			// File
			if (fileNodeRight->status == FileStatus_Deleted) {
				actionFileNodeNew->action = ActionFileCmp_Nothing;
			} else {
				actionFileNodeNew->action = ActionFileCmp_RightToLeft;
			}
			QueueNode(*actionFileNodeQueue, actionFileNodeNew);
		}
	}
	if (fileNodeLeft && !fileNodeRight) {
		if (fileNodeLeft->flags & FileFlag_Directory) {
			// Directory
			if (fileNodeLeft->status == FileStatus_Deleted) {
				actionFileNodeNew->action = ActionFileCmp_Nothing;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);
			} else {
				actionFileNodeNew->action = ActionFileCmp_MakeRightDirectory;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);

				// Iterate childs
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_SyncPair);

				// Create new action for date copy
				actionFileNodeNew =
					ActionFileNode_CreateNormal(fileNodeLeft, fileNodeRight);
				actionFileNodeNew->action = ActionFileCmp_DateLeftToRight;
				QueueNode(*actionFileNodeQueue, actionFileNodeNew);
			}
		} else {
			// File
			if (fileNodeLeft->status == FileStatus_Deleted) {
				actionFileNodeNew->action = ActionFileCmp_Nothing;
			} else {
				actionFileNodeNew->action = ActionFileCmp_LeftToRight;
			}
			QueueNode(*actionFileNodeQueue, actionFileNodeNew);
		}
	}
	if (fileNodeLeft && fileNodeRight) {
		if ((fileNodeLeft->flags & FileFlag_Directory) &&
			(fileNodeRight->flags & FileFlag_Directory)) {
			// Directory

			// Prepare action for directory pair
			if (abs((int)(fileNodeLeft->fileTime - fileNodeRight->fileTime)) <=
				MaxDeltaTime) { // aprox. equal
				if (fileNodeRight->status == FileStatus_Deleted &&
					fileNodeLeft->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_Nothing;
				} else if (fileNodeRight->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteLeft;
				} else if (fileNodeLeft->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteRight;
				} else {
					actionFileNodeNew->action = ActionFileCmp_Nothing;
				}
			} else if (fileNodeLeft->fileTime < fileNodeRight->fileTime) {
				if (fileNodeRight->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteLeft;
					if (fileNodeLeft->status == FileStatus_Deleted) {
						actionFileNodeNew->action = ActionFileCmp_Nothing;
					}
				} else {
					if (fileNodeLeft->status == FileStatus_Deleted) {
						actionFileNodeNew->action =
							ActionFileCmp_MakeLeftDirectory;
						QueueNode(*actionFileNodeQueue, actionFileNodeNew);
						actionFileNodeNew = ActionFileNode_CreateNormal(
							fileNodeLeft, fileNodeRight);
					}
					actionFileNodeNew->action = ActionFileCmp_DateRightToLeft;
				}
			} else if (fileNodeLeft->fileTime > fileNodeRight->fileTime) {
				if (fileNodeLeft->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteRight;
					if (fileNodeRight->status == FileStatus_Deleted) {
						actionFileNodeNew->action = ActionFileCmp_Nothing;
					}
				} else {
					if (fileNodeRight->status == FileStatus_Deleted) {
						actionFileNodeNew->action =
							ActionFileCmp_MakeRightDirectory;
						QueueNode(*actionFileNodeQueue, actionFileNodeNew);
						actionFileNodeNew = ActionFileNode_CreateNormal(
							fileNodeLeft, fileNodeRight);
					}
					actionFileNodeNew->action = ActionFileCmp_DateLeftToRight;
				}
			}

			// Process child nodes
			if (actionFileNodeNew->action == ActionFileCmp_DeleteRight ||
				actionFileNodeNew->action == ActionFileCmp_DeleteLeft) {
				// Iterate child nodes for deletion
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_DeletePair);
			} else {
				AccionFileNode_CompareChilds(actionFileNodeNew,
											 actionFileNodeQueue,
											 AccionFileNode_SyncPair);
			}

			QueueNode(*actionFileNodeQueue, actionFileNodeNew);
		} else if ((fileNodeLeft->flags & FileFlag_Normal) &&
				   (fileNodeRight->flags & FileFlag_Normal)) {
			// Files

			// Prepare action for file pair
			if (abs((int)(fileNodeLeft->fileTime - fileNodeRight->fileTime)) <=
				MaxDeltaTime) { // aprox. equal
				if (fileNodeRight->status == FileStatus_Deleted &&
					fileNodeLeft->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_Nothing;
				} else if (fileNodeRight->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteLeft;
				} else if (fileNodeLeft->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteRight;
				} else {
					actionFileNodeNew->action = ActionFileCmp_Nothing;
				}
			} else if (fileNodeLeft->fileTime < fileNodeRight->fileTime) {
				// FIXME: Check size to determine y further checks are necessary
				actionFileNodeNew->action = ActionFileCmp_RightToLeft;
				if (fileNodeRight->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteLeft;
					if (fileNodeLeft->status == FileStatus_Deleted) {
						actionFileNodeNew->action = ActionFileCmp_Nothing;
					}
				}
			} else if (fileNodeLeft->fileTime > fileNodeRight->fileTime) {
				// FIXME: Check size to determine y further checks are necessary
				actionFileNodeNew->action = ActionFileCmp_LeftToRight;
				if (fileNodeLeft->status == FileStatus_Deleted) {
					actionFileNodeNew->action = ActionFileCmp_DeleteRight;
					if (fileNodeRight->status == FileStatus_Deleted) {
						actionFileNodeNew->action = ActionFileCmp_Nothing;
					}
				}
			}
			QueueNode(*actionFileNodeQueue, actionFileNodeNew);
		} else {
			// FIXME: !!!!!
			// Directory vs File
		}
	}
}