From 546d23f0ec50be30824d5a58ff5281ff6e21adbb Mon Sep 17 00:00:00 2001
From: 554325746@qq.com <554325746@qq.com>
Date: 星期三, 25 十二月 2019 09:15:39 +0800
Subject: [PATCH] a

---
 .idea/vcs.xml           |    6 
 b.bat                   |    4 
 .idea/modules.xml       |    8 
 .idea/androidSync.iml   |    9 
 .idea/workspace.xml     |  521 ++++++++++++++++++++++++++++++++++++++++
 androidSync-sources.jar |    0 
 .idea/encodings.xml     |    4 
 sync.go                 |   84 +----
 main.go                 |   38 ++
 cluster.go              |   56 ---
 androidSync.aar         |    0 
 .idea/misc.xml          |    6 
 12 files changed, 628 insertions(+), 108 deletions(-)

diff --git a/.idea/androidSync.iml b/.idea/androidSync.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/androidSync.iml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..15a15b2
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..28a804d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..1052f30
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/androidSync.iml" filepath="$PROJECT_DIR$/.idea/androidSync.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..dd17689
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,521 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="e3303c4d-ac69-4436-b80e-4e2521d4dcc3" name="Default Changelist" comment="">
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/main.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/cluster.go" beforeDir="false" afterPath="$PROJECT_DIR$/cluster.go" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/sync.go" beforeDir="false" afterPath="$PROJECT_DIR$/sync.go" afterDir="false" />
+    </list>
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="DatabaseView">
+    <option name="SHOW_INTERMEDIATE" value="true" />
+    <option name="GROUP_DATA_SOURCES" value="true" />
+    <option name="GROUP_SCHEMA" value="true" />
+    <option name="GROUP_CONTENTS" value="false" />
+    <option name="SORT_POSITIONED" value="false" />
+    <option name="SHOW_EMPTY_GROUPS" value="false" />
+    <option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
+    <option name="HIDDEN_KINDS">
+      <set />
+    </option>
+    <expand />
+    <select />
+  </component>
+  <component name="DefaultGradleProjectSettings">
+    <option name="isMigrated" value="true" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/cluster.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="60">
+              <caret line="2" selection-start-line="2" selection-end-line="2" />
+              <folding>
+                <element signature="e#35#177#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/main.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="330">
+              <caret line="26" lean-forward="true" selection-start-line="26" selection-end-line="26" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/sync.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="60">
+              <caret line="2" selection-start-line="2" selection-end-line="2" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Go File" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>sdb</find>
+      <find>Agent</find>
+      <find>memberlist</find>
+      <find>members</find>
+      <find>config</find>
+      <find>serverIp</find>
+      <find>lc</find>
+      <find>glo</find>
+      <find>allResults</find>
+      <find>err</find>
+      <find>pwd</find>
+      <find>SerfDbConn</find>
+      <find>yncTables</find>
+      <find>SyncTables</find>
+      <find>joinCluster</find>
+      <find>JoinCluster</find>
+      <find>oinCluster</find>
+      <find>sqliteDBPath</find>
+      <find>defaultSqliteDBPath</find>
+      <find>agent</find>
+      <find>syncInit</find>
+      <find>Error creating Serf</find>
+      <find>aaa</find>
+    </findStrings>
+  </component>
+  <component name="GOROOT" path="D:\program\go" />
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/clusterService.go" />
+        <option value="$PROJECT_DIR$/db/db.go" />
+        <option value="$PROJECT_DIR$/db/cluster.go" />
+        <option value="$PROJECT_DIR$/../basic.com/Android/syncdb.git/agent.go" />
+        <option value="$PROJECT_DIR$/sync.go" />
+        <option value="$PROJECT_DIR$/cluster.go" />
+        <option value="$PROJECT_DIR$/main.go" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="84" />
+    <option name="y" value="64" />
+    <option name="width" value="1855" />
+    <option name="height" value="939" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="androidSync" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="Go SDK 1.12.6" type="20ee2d1f:SyntheticLibraryElementNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="Go SDK 1.12.6" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="Go SDK 1.12.6" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="runtime" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="Go SDK 1.12.6" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="runtime" type="462c0819:PsiDirectoryNode" />
+              <item name="debug" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="GOPATH &lt;androidSync&gt;" type="20ee2d1f:SyntheticLibraryElementNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="GOPATH &lt;androidSync&gt;" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="GOPATH &lt;androidSync&gt;" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="basic.com" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="GOPATH &lt;androidSync&gt;" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="basic.com" type="462c0819:PsiDirectoryNode" />
+              <item name="Android" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="androidSync" type="b2602c69:ProjectViewProjectNode" />
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
+              <item name="GOPATH &lt;androidSync&gt;" type="20ee2d1f:SyntheticLibraryElementNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="basic.com" type="462c0819:PsiDirectoryNode" />
+              <item name="Android" type="462c0819:PsiDirectoryNode" />
+              <item name="syncdb.git" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="PackagesPane" />
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="ASKED_SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
+    <property name="DefaultGoTemplateProperty" value="Go File" />
+    <property name="GO_FMT" value="false" />
+    <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1576566196392" />
+    <property name="go.gopath.indexing.explicitly.defined" value="true" />
+    <property name="go.import.settings.migrated" value="true" />
+    <property name="go.sdk.automatically.set" value="true" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+    <property name="nodejs_package_manager_path" value="npm" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Go Build.go build androidSync">
+    <configuration name="go build androidSync" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
+      <module name="androidSync" />
+      <working_directory value="$PROJECT_DIR$/" />
+      <kind value="DIRECTORY" />
+      <filePath value="$PROJECT_DIR$/main.go" />
+      <package value="androidSync" />
+      <directory value="$PROJECT_DIR$/" />
+      <method v="2" />
+    </configuration>
+    <configuration name="go build main.go" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
+      <module name="androidSync" />
+      <working_directory value="$PROJECT_DIR$/" />
+      <kind value="FILE" />
+      <filePath value="$PROJECT_DIR$/main.go" />
+      <package value="androidSync" />
+      <directory value="$PROJECT_DIR$/" />
+      <method v="2" />
+    </configuration>
+    <list>
+      <item itemvalue="Go Build.go build androidSync" />
+      <item itemvalue="Go Build.go build main.go" />
+    </list>
+    <recent_temporary>
+      <list>
+        <item itemvalue="Go Build.go build androidSync" />
+        <item itemvalue="Go Build.go build main.go" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="e3303c4d-ac69-4436-b80e-4e2521d4dcc3" name="Default Changelist" comment="" />
+      <created>1567504310030</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1567504310030</updated>
+      <workItem from="1567504311422" duration="4723000" />
+      <workItem from="1567562506469" duration="2871000" />
+      <workItem from="1567576462151" duration="40719000" />
+      <workItem from="1567747422321" duration="11637000" />
+      <workItem from="1569727318755" duration="925000" />
+      <workItem from="1570592385068" duration="519000" />
+      <workItem from="1576559914307" duration="5390000" />
+      <workItem from="1576636227327" duration="2169000" />
+    </task>
+    <task id="LOCAL-00001" summary="棣栨鎻愪氦">
+      <created>1567763026206</created>
+      <option name="number" value="00001" />
+      <option name="presentableId" value="LOCAL-00001" />
+      <option name="project" value="LOCAL" />
+      <updated>1567763026206</updated>
+    </task>
+    <option name="localTasksCounter" value="2" />
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="68953000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
+    <layout>
+      <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.22965738" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info id="Image Layers" order="2" />
+      <window_info id="Designer" order="3" />
+      <window_info id="UI Designer" order="4" />
+      <window_info id="Capture Tool" order="5" />
+      <window_info id="Favorites" order="6" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" weight="0.25277162" />
+      <window_info anchor="bottom" id="Run" order="2" weight="0.29046562" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.3991131" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Version Control" order="8" weight="0.3293023" />
+      <window_info anchor="bottom" id="Database Changes" order="9" />
+      <window_info anchor="bottom" id="Terminal" order="10" weight="0.3248337" />
+      <window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
+      <window_info anchor="right" id="SciView" order="0" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="1" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="2" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="3" weight="0.25" />
+      <window_info anchor="right" id="Palette" order="4" />
+      <window_info anchor="right" id="Theme Preview" order="5" />
+      <window_info anchor="right" id="Maven" order="6" />
+      <window_info anchor="right" id="Capture Analysis" order="7" />
+      <window_info anchor="right" id="Palette&#9;" order="8" />
+      <window_info anchor="right" id="Database" order="9" weight="0.32982844" />
+      <window_info anchor="right" id="Api Debugger" order="10" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
+    <option name="CHECK_NEW_TODO" value="false" />
+    <MESSAGE value="棣栨鎻愪氦" />
+    <option name="LAST_COMMIT_MESSAGE" value="棣栨鎻愪氦" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/../basic.com/Android/syncdb.git/agent.go</url>
+          <line>98</line>
+          <option name="timeStamp" value="1" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>11</line>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>12</line>
+          <option name="timeStamp" value="3" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>13</line>
+          <option name="timeStamp" value="4" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>16</line>
+          <option name="timeStamp" value="5" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>17</line>
+          <option name="timeStamp" value="6" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>18</line>
+          <option name="timeStamp" value="7" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>10</line>
+          <option name="timeStamp" value="8" />
+        </line-breakpoint>
+      </breakpoints>
+    </breakpoint-manager>
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/clusterService.go" />
+    <entry file="file://$PROJECT_DIR$/db/cluster.go" />
+    <entry file="file://$PROJECT_DIR$/db/dbTablePersons.go" />
+    <entry file="file://$PROJECT_DIR$/db/db.go" />
+    <entry file="file://$PROJECT_DIR$/db/dbLogger.go" />
+    <entry file="file://$PROJECT_DIR$/../basic.com/Android/syncdb.git/searcher.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1547">
+          <caret line="97" column="5" selection-start-line="97" selection-start-column="5" selection-end-line="97" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../basic.com/Android/syncdb.git/dbself.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="391">
+          <caret line="31" column="5" selection-start-line="31" selection-start-column="5" selection-end-line="31" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../basic.com/valib/logger.git/logger.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="170">
+          <caret line="17" column="4" selection-start-line="17" selection-start-column="4" selection-end-line="17" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_CONFIG_DIR$/consoles/db/a3bd5e95-52ff-4668-b73d-db976a28f634/console.sql" />
+    <entry file="file://$PROJECT_DIR$/../basic.com/Android/syncdb.git/db.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="17">
+          <caret line="94" selection-start-line="94" selection-end-line="94" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../github.com/jinzhu/gorm/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="331">
+          <caret line="659" column="1" selection-start-line="659" selection-start-column="1" selection-end-line="659" selection-end-column="1" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/androidSync/AndroidSync.java" />
+    <entry file="file://$PROJECT_DIR$/README.md">
+      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
+        <state split_layout="SPLIT">
+          <first_editor relative-caret-position="102">
+            <caret line="6" column="41" lean-forward="true" selection-start-line="6" selection-start-column="41" selection-end-line="6" selection-end-column="41" />
+          </first_editor>
+          <second_editor />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/program/go/src/runtime/proc.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="30">
+          <caret line="199" selection-start-line="199" selection-end-line="199" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/program/go/src/runtime/asm_amd64.s">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="168">
+          <caret line="1336" selection-start-line="1336" selection-end-line="1336" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/program/go/src/os/file.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="78">
+          <caret line="140" column="15" selection-start-line="140" selection-start-column="15" selection-end-line="140" selection-end-column="15" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/../basic.com/Android/syncdb.git/agent.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1230">
+          <caret line="98" column="37" selection-start-line="98" selection-start-column="37" selection-end-line="98" selection-end-column="37" />
+          <folding>
+            <element signature="e#818#1135#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://D:/program/go/src/runtime/debug/stack.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="150">
+          <caret line="20" column="5" selection-start-line="20" selection-start-column="5" selection-end-line="20" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/cluster.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="2" selection-start-line="2" selection-end-line="2" />
+          <folding>
+            <element signature="e#35#177#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/sync.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="2" selection-start-line="2" selection-end-line="2" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="330">
+          <caret line="26" lean-forward="true" selection-start-line="26" selection-end-line="26" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>
\ No newline at end of file
diff --git a/androidSync-sources.jar b/androidSync-sources.jar
new file mode 100644
index 0000000..c681981
--- /dev/null
+++ b/androidSync-sources.jar
Binary files differ
diff --git a/androidSync.aar b/androidSync.aar
new file mode 100644
index 0000000..2494186
--- /dev/null
+++ b/androidSync.aar
Binary files differ
diff --git a/b.bat b/b.bat
new file mode 100644
index 0000000..16a956c
--- /dev/null
+++ b/b.bat
@@ -0,0 +1,4 @@
+gomobile bind -target=android androidSync
+cp androidSync.aar E:\workspace\Security_yuyin_indoor\app\libs\
+cp androidSync.aar E:\workspace\Security_yuyin_outdoor_white\app\libs\
+pause
\ No newline at end of file
diff --git a/cluster.go b/cluster.go
index 7a48bb0..ee96790 100644
--- a/cluster.go
+++ b/cluster.go
@@ -1,5 +1,5 @@
 package androidSync
-
+//package main
 import (
 	sdb "basic.com/Android/syncdb.git"
 	"basic.com/valib/logger.git"
@@ -13,7 +13,7 @@
 	syncClusterKeyPrefix = "bjbasic123"
 )
 const (
-	defaultSqliteDBPath = "./testdb.db"
+	defaultSqliteDBPath = "/sdcard/testdb.db"
 
 	dBNameCluster      = "cluster"
 	dBNameClusterNode  = "cluster_node"
@@ -26,9 +26,9 @@
 var members *memberlist.Memberlist
 var sqliteDBPath string = defaultSqliteDBPath
 
-func init(){
-	var logFile = "./logger/androidSync.log"
-	var logSaveDays = 15	// 鏃ュ織鍒濆鍖�
+func InitCluster() bool {
+	var logFile = "/sdcard/androidSync.log"
+	var logSaveDays = 15	
 	logger.Config(logFile, logger.DebugLevel)
 	logger.SetSaveDays(logSaveDays)
 	err := sdb.InitDbConn(sqliteDBPath)
@@ -36,18 +36,13 @@
 		logger.Error("sdb.InitDbConn ERROR: sqliteDBPath:", sqliteDBPath)
 		os.Exit(-1)
 	}
+	return true
 }
 
-/*
-	璁剧疆鏁版嵁搴撹矾寰�
- */
 func setDBPath(path string){
 	sqliteDBPath = path
 }
 
-/*
-	鑾峰彇鏁版嵁搴撹矾寰�
-*/
 func getDBPath() string {
 	return sqliteDBPath
 }
@@ -57,12 +52,6 @@
 	sdb.CloseSearchNode(ml)
 }
 
-/*
-	鍒涘缓鏌ヨ闆嗙兢鐨勪复鏃惰妭鐐癸紝闇�瑕佷紶鍏ラ泦缇ゅ瘑鐮侊紝6瀛楄妭锛屾暟瀛楁垨瀛楁瘝
-	姣忎釜涓�绉掕皟鐢ㄤ竴娆etSearchNodes锛屾嬁鍒版悳绱㈠埌鐨勮妭鐐逛俊鎭暟鎹�
-	鏈�鍚庤皟鐢–loseSearchNode锛屽叧闂复鏃跺垱寤虹殑鎼滅储鑺傜偣
-	pwd = password must six bytes
-*/
 func CreateSearchNodeByPwd(pwd string) bool{
 
 	pwdFull := syncClusterKeyPrefix + pwd
@@ -78,10 +67,7 @@
 	return true
 }
 
-/*
-	鍒涘缓鏌ヨ闆嗙兢鐨勪复鏃惰妭鐐癸紝闇�瑕佷紶鍏ラ泦缇ゅ瘑鐮侊紝16瀛楄妭
-	key = password
-*/
+
 func createSearchNode(key string) bool {
 	var err error
 	members, err = sdb.CreateSearchNode(key)
@@ -93,11 +79,7 @@
 	return true
 }
 
-/*
-	闃诲鏂瑰紡鍒涘缓鎼滅储闆嗙兢鐨勮妭鐐癸紝浼氱洿鎺ヨ繑鍥炴悳绱㈠埌鐨勮妭鐐�
-	map[string]NodeInfo
-	nodes[NodeInfo.NodeID] = NodeInfo
- */
+
 func createSearchNodeWhitClose(key string, delay int) []byte {
 	nodes := sdb.CreateSearchNodeWhitClose(key, time.Duration(delay))
 	strNodes, err := json.Marshal(nodes)
@@ -108,9 +90,7 @@
 	return strNodes
 }
 
-/*
-	鍏抽棴涓存椂鍒涘缓鐨勮妭鐐�
-*/
+
 func CloseSearchNode() bool {
 	err := sdb.CloseSearchNode(members)
 	if err != nil {
@@ -120,22 +100,6 @@
 	return true
 }
 
-/*
-	鑾峰彇鎼滅储鍒扮殑鑺傜偣淇℃伅
-json vector
-[
-{Node1},
-{Node2},
-...
-{Noden}
-]
-type NodeInfo struct {
-	ClusterID   string `json:"clusterID"`
-	NodeID      string `json:"nodeID"`
-	NodeAddress string `json:"nodeAddress"`
-	IsAlive     int    `json:"isAlive"`  //StatusNone:0, StatusAlive:1, StatusLeaving:2, StatusLeft:3, StatusFailed:4
-}
-*/
 func GetSearchNodes() []byte {
 	nodes := sdb.GetSearchNodes()
 	strNodes, err := json.Marshal(nodes)
@@ -144,4 +108,4 @@
 		return nil
 	}
 	return strNodes
-}
+}
\ No newline at end of file
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..ffab338
--- /dev/null
+++ b/main.go
@@ -0,0 +1,38 @@
+//package main
+package androidSync
+import (
+	"fmt"
+	"time"
+)
+
+
+
+func main() {
+	Leave()
+	InitCluster()
+	InitAgent("node2")
+	SyncInit("c4d03d5d-64c3-4941-bb53-152277a3271f","123456","node2","")
+	//JoinByNodeAddrs("192.168.222.103:30190")
+	JoinByNodeAddrs("192.168.5.22:30190")
+	fmt.Println("hello")
+	var count = 0
+	for {
+		//SyncSql("select * from table1 count="+strconv.Itoa(count))
+		count++
+		//nodes := string(GetNodes())
+		//fmt.Println("nodes:",nodes)
+		time.Sleep(5*time.Second)
+		//SyncSql("select * from table1")
+	}
+
+}
+
+//func main1() {
+//	InitCluster()
+//	InitAgent("node2")
+//	SyncInit("cluster1","YmpiYXNpYzEyMzEyMzQ1Ng==","node2","")
+//	JoinByNodeAddrs("ip:30190")
+//	SyncSql("select * from table1")
+//	fmt.Println("hello")
+//
+//}
\ No newline at end of file
diff --git a/sync.go b/sync.go
index 328683b..438a3cb 100755
--- a/sync.go
+++ b/sync.go
@@ -1,4 +1,5 @@
 package androidSync
+//package main
 
 import (
 	sdb "basic.com/Android/syncdb.git"
@@ -8,40 +9,43 @@
 	"strings"
 	"time"
 )
+type ReceiveSqlInterface2 interface {
+	sdb.ReceiveSqlInterface
+}
 
-/*
-	姣忔寮�鏈哄悗閮戒細璋冪敤璇ユ帴鍙o紝璇ユ帴鍙d細鍘绘煡璇㈡暟鎹簱锛岀‘瀹炰箣鍓嶆槸鍚﹀凡缁忓姞鍏ヨ繃闆嗙兢锛岃嫢鏄凡缁忓姞鍏ラ泦缇わ紝鍒欏紑鏈鸿嚜鍔ㄥ姞鍏�
- */
+func RegisterReceiveSqlInterfaceFromJava(c ReceiveSqlInterface2) {
+	sdb.RegisterReceiveSqlInterface(c)
+}
+
 func InitAgent(devID string) bool {
+	var nodeIps []string
 	sqlFindAllCluster := string("select * from " + dBNameCluster)
 	clusters, err := sdb.ExecuteQuerySql([]string{sqlFindAllCluster})
-	if err == nil && clusters != nil && len(clusters) > 0 {
+	if err == nil && clusters != nil && len(clusters) > 0 && clusters[0].Values != nil {
 		c := clusters[0]
+
 		sqlFindNodesByClusterId := string("select * from " + dBNameClusterNode + " where cluster_id='" + c.Values[0][1].(string) + "'")
 		nodes, err := sdb.ExecuteQuerySql([]string{sqlFindNodesByClusterId})
 		if err == nil && nodes != nil && len(nodes) > 0 {
-			var nodeIps []string
 			for _, n := range nodes {
-				if n.Values[0][3].(string) != devID {
+				if n.Values != nil && n.Values[0][3].(string) != devID {
 					nodeIps = append(nodeIps, n.Values[0][4].(string))
 				}
 			}
-			agent, err = sdb.Init(c.Values[0][0].(string), c.Values[0][2].(string), devID, nodeIps)
-			if agent != nil {
-				logger.Debug("sync.Agent init success!")
-			} else {
-				logger.Debug("sync.Agent init fail!")
-			}
 		}
+
+		//agent, err = sdb.Init(c.Values[0][0].(string), c.Values[0][2].(string), devID, nodeIps)
+		//if agent != nil {
+		//	logger.Debug("sync.Agent init success!")
+		//} else {
+		//	logger.Debug("sync.Agent init fail!")
+		//}
+
 	}
 
 	return true
 }
 
-/*
-	涔嬪墠娌℃湁闆嗙兢銆傝皟鐢ㄦ鎺ュ彛杩涜闆嗙兢鍒濆鍖栵紝浼犲叆闆嗙兢鍏朵粬鑺傜偣鐨刬p锛屼究浜庡垵濮嬪寲鍚庣洿鎺ュ姞鍏ラ泦缇�
-	strAddrs = "ip1:port1;ip2:port2;ip3:port3"
-*/
 func SyncInit(clusterID string, password string, nodeID string, strAddrs string) bool {
 	var ips []string
 	if strAddrs == "" {
@@ -61,10 +65,6 @@
 	return true
 }
 
-/*
-	鍒濆鍖栨椂锛岃嫢娌¤兘鍔犲叆闆嗙兢锛屽彲浠ラ�氳繃璇ユ帴鍙e姞鍏ラ泦缇ゃ��
-	strAddrs = "ip1:port1;ip2:port2;ip3:port3"
-*/
 func JoinByNodeAddrs(strAddrs string) bool {
 	if strAddrs == "" {
 		logger.Error("strAddrs == \"\"")
@@ -80,15 +80,11 @@
 	return true
 }
 
-/*
-	鍔犲叆闆嗙兢锛屽寘鍚垵濮嬪寲鑺傜偣SyncInit锛屽苟鏍规嵁浼犲叆鐨勯泦缇ゅ叾浠栬妭鐐瑰垪琛ㄨ嚜鍔ㄥ姞鍏ラ泦缇�
-	strAddrs = "ip1:port1;ip2:port2;ip3:port3"
-*/
 func JoinCluster(clusterID, password, strAddrs, devID, devIP, devName string) bool {
 
 	isOk := SyncInit(clusterID, password, devID, strAddrs)
 
-	if isOk { //鍔犲叆鎴愬姛
+	if isOk { 
 		logger.Debug("dbSync.Init success")
 
 		if ! syncTableDataFromCluster(clusterID, devID, devIP, devName) {
@@ -109,22 +105,6 @@
 	return true
 }
 
-/*
-	鍔犲叆闆嗙兢鍚庯紝鍙互閫氳繃璇ユ帴鍙h幏鍙栭泦缇ょ殑鑺傜偣淇℃伅锛屼笉杩囨渶濂界洿鎺ユ煡鍚屾搴撶殑闆嗙兢鑺傜偣琛�
-json vector
-[
-{Node1},
-{Node2},
-...
-{Noden}
-]
-type NodeInfo struct {
-	ClusterID   string `json:"clusterID"`
-	NodeID      string `json:"nodeID"`
-	NodeAddress string `json:"nodeAddress"`
-	IsAlive     int    `json:"isAlive"` //StatusNone:0, StatusAlive:1, StatusLeaving:2, StatusLeft:3, StatusFailed:4
-}
-*/
 func GetNodes() []byte {
 	nodes := agent.GetNodes()
 	strNode, err := json.Marshal(nodes)
@@ -135,20 +115,15 @@
 	return strNode
 }
 
-/*
-	鍔犲叆闆嗙兢鍚�, 娓呯┖鏈湴鐨勫悓姝ュ簱鏁版嵁,骞朵粠闆嗙兢鎷夊彇鏈�鏂扮殑鍚屾搴撴暟鎹�
- */
 func syncTableDataFromCluster(clusterID, devID, devIP, devName string) bool {
 	var err error
 
-	//0.鍏抽棴reference
 	foreignSql := string("PRAGMA foreign_keys=OFF")
 	_, err = sdb.ExecuteWriteSql([]string{foreignSql}, false)
 	if err != nil {
 		return false
 	}
 
-	//1.鍒犻櫎鏈湴鐨勫悓姝ュ簱鏁版嵁
 	var sqls []string
 	var delSql string
 	for _, t := range syncTables {
@@ -162,7 +137,6 @@
 		sqls = append(sqls, delSql)
 	}
 
-	//2.鎷夊彇闆嗙兢鍐呯殑鍚屾搴撴暟鎹埌鏈湴鏁版嵁搴撹〃涓�
 	var dumpSqls *[]string
 	dumpSqls, err = agent.GetTableDataFromCluster(syncTables)
 	if dumpSqls != nil {
@@ -173,7 +147,6 @@
 
 	logger.Debug("鎴愬姛娣诲姞褰撳墠鑺傜偣鍒伴泦缇よ妭鐐逛腑")
 
-	//3.灏嗘湰鑺傜偣鍔犲叆鍒拌妭鐐瑰垪琛ㄤ腑
 	timeUnix := time.Now().Unix()
 	fmtTimeStr := time.Unix(timeUnix, 0).Format("2006-01-02 15:04:05")
 
@@ -182,17 +155,14 @@
 		(devIP + ":" + strconv.Itoa(sdb.DefaultBindPort)) + "','" + fmtTimeStr + "')"
 	sqls = append(sqls, sqlSync)
 
-	//4. 鍐欏叆鏁版嵁搴�
 	_, err = sdb.ExecuteWriteSql(sqls, true)
 	if err != nil {
 		logger.Debug("sdb.ExecuteWriteSql ERROR:", err)
 		return false
 	}
 
-	//5. 鍚屾璇ヨ妭鐐瑰埌闆嗙兢
 	agent.SyncSql([]string{sqlSync})
 
-	//6.寮�鍚痳eference
 	foreignSql = string("PRAGMA foreign_keys=ON")
 	_, err = sdb.ExecuteWriteSql([]string{foreignSql}, false)
 	if err != nil {
@@ -202,10 +172,6 @@
 	return true
 }
 
-/*
-	鎿嶄綔鏁版嵁搴撳悗锛岄渶瑕佽皟鐢ㄨ鎺ュ彛灏嗗搴旂殑sql璇彞鍚屾鍒伴泦缇�
-	strSql = "sql1;sql2;sql3;...;sqln"
- */
 func SyncSql(strSql string) {
 
 	sqls := strings.Split(strSql, ";")
@@ -213,9 +179,6 @@
 	agent.SyncSql(sqls)
 }
 
-/*
-	鏇存柊闆嗙兢鐨勫悕瀛�
- */
 func UpdateClusterName(clusterName, clusterID string) bool {
 	sql := string("update cluster set cluster_name='" + clusterName + "' where cluster_id='" + clusterID + "'")
 	_, err := sdb.ExecuteWriteSql([]string{sql}, false)
@@ -226,9 +189,6 @@
 	return true
 }
 
-/*
-	閫�鍑洪泦缇�
- */
 func Leave() bool {
 
 	if agent != nil {
@@ -249,4 +209,4 @@
 	}
 
 	return true
-}
+}
\ No newline at end of file

--
Gitblit v1.8.0