小黄
4 years ago
15 changed files with 554 additions and 1 deletions
-
8.idea/hasaki-service-push.iml
-
8.idea/modules.xml
-
6.idea/vcs.xml
-
29.idea/watcherTasks.xml
-
85.idea/workspace.xml
-
8README.md
-
21go.mod
-
167go.sum
-
18hasaki-push/api.go
-
61hasaki-push/api_pre.go
-
42hasaki-push/api_push_message.go
-
47hasaki-push/db_push_message.go
-
45hasaki-push/initialize.go
-
5hasaki_push_options/options.go
-
5main.go
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module type="WEB_MODULE" version="4"> |
|||
<component name="NewModuleRootManager"> |
|||
<content url="file://$MODULE_DIR$" /> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectModuleManager"> |
|||
<modules> |
|||
<module fileurl="file://$PROJECT_DIR$/.idea/hasaki-service-push.iml" filepath="$PROJECT_DIR$/.idea/hasaki-service-push.iml" /> |
|||
</modules> |
|||
</component> |
|||
</project> |
@ -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> |
@ -0,0 +1,29 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectTasksOptions"> |
|||
<TaskOptions isEnabled="true"> |
|||
<option name="arguments" value="fmt $FilePath$" /> |
|||
<option name="checkSyntaxErrors" value="true" /> |
|||
<option name="description" /> |
|||
<option name="exitCodeBehavior" value="ERROR" /> |
|||
<option name="fileExtension" value="go" /> |
|||
<option name="immediateSync" value="false" /> |
|||
<option name="name" value="go fmt" /> |
|||
<option name="output" value="$FilePath$" /> |
|||
<option name="outputFilters"> |
|||
<array /> |
|||
</option> |
|||
<option name="outputFromStdout" value="false" /> |
|||
<option name="program" value="$GoExecPath$" /> |
|||
<option name="runOnExternalChanges" value="false" /> |
|||
<option name="scopeName" value="Project Files" /> |
|||
<option name="trackOnlyRoot" value="true" /> |
|||
<option name="workingDir" value="$ProjectFileDir$" /> |
|||
<envs> |
|||
<env name="GOROOT" value="$GOROOT$" /> |
|||
<env name="GOPATH" value="$GOPATH$" /> |
|||
<env name="PATH" value="$GoBinDirs$" /> |
|||
</envs> |
|||
</TaskOptions> |
|||
</component> |
|||
</project> |
@ -0,0 +1,85 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="BranchesTreeState"> |
|||
<expand> |
|||
<path> |
|||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" /> |
|||
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" /> |
|||
</path> |
|||
<path> |
|||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" /> |
|||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" /> |
|||
</path> |
|||
<path> |
|||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" /> |
|||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" /> |
|||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" /> |
|||
</path> |
|||
</expand> |
|||
<select /> |
|||
</component> |
|||
<component name="ChangeListManager"> |
|||
<list default="true" id="632a5522-05f7-49df-8c6d-0a07b427b78e" name="Default Changelist" comment=""> |
|||
<change afterPath="$PROJECT_DIR$/hasaki-push/api.go" afterDir="false" /> |
|||
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" /> |
|||
</list> |
|||
<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="FileTemplateManagerImpl"> |
|||
<option name="RECENT_TEMPLATES"> |
|||
<list> |
|||
<option value="Go File" /> |
|||
</list> |
|||
</option> |
|||
</component> |
|||
<component name="GOROOT" path="D:/Go" /> |
|||
<component name="Git.Settings"> |
|||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> |
|||
</component> |
|||
<component name="ProjectId" id="1pxWzGcfAQHJA00qSDcP3s0LEoh" /> |
|||
<component name="ProjectViewState"> |
|||
<option name="hideEmptyMiddlePackages" value="true" /> |
|||
<option name="showLibraryContents" value="true" /> |
|||
</component> |
|||
<component name="PropertiesComponent"> |
|||
<property name="DefaultGoTemplateProperty" value="Go File" /> |
|||
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" /> |
|||
<property name="WebServerToolWindowFactoryState" value="false" /> |
|||
<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="settings.editor.selected.configurable" value="watcher.settings" /> |
|||
</component> |
|||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> |
|||
<component name="Vcs.Log.Tabs.Properties"> |
|||
<option name="TAB_STATES"> |
|||
<map> |
|||
<entry key="MAIN"> |
|||
<value> |
|||
<State /> |
|||
</value> |
|||
</entry> |
|||
</map> |
|||
</option> |
|||
</component> |
|||
<component name="VgoProject"> |
|||
<integration-enabled>true</integration-enabled> |
|||
</component> |
|||
<component name="WindowStateProjectService"> |
|||
<state x="563" y="296" key="EditFileWatcherDialog" timestamp="1616126185484"> |
|||
<screen x="0" y="0" width="1920" height="1040" /> |
|||
</state> |
|||
<state x="563" y="296" key="EditFileWatcherDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1616126185484" /> |
|||
<state x="483" y="164" key="SettingsEditor" timestamp="1616126186789"> |
|||
<screen x="0" y="0" width="1920" height="1040" /> |
|||
</state> |
|||
<state x="483" y="164" key="SettingsEditor/0.0.1920.1040@0.0.1920.1040" timestamp="1616126186789" /> |
|||
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup" timestamp="1616133920639"> |
|||
<screen x="0" y="0" width="1920" height="1040" /> |
|||
</state> |
|||
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1616133920639" /> |
|||
</component> |
|||
</project> |
@ -1,3 +1,9 @@ |
|||
# hasaki-service-push |
|||
|
|||
推送 |
|||
推送 |
|||
|
|||
## session |
|||
品牌 -> 用户id |
|||
|
|||
## 消息 |
|||
类型 -> 处理函数[响应] |
@ -0,0 +1,21 @@ |
|||
module git.ouxuan.net/tommy/hasaki-service-push |
|||
|
|||
go 1.16 |
|||
|
|||
require ( |
|||
git.ouxuan.net/hasaki-service/hasaki-sdk v0.0.0-20210319020634-8fcf853e7c47 |
|||
git.ouxuan.net/tommy/melody v0.0.0-20200312175938-1333d0784cc3 // indirect |
|||
github.com/elazarl/go-bindata-assetfs v1.0.1 // indirect |
|||
github.com/gin-gonic/gin v1.6.3 // indirect |
|||
github.com/go-playground/form v3.1.4+incompatible // indirect |
|||
github.com/google/uuid v1.2.0 // indirect |
|||
github.com/gorilla/websocket v1.4.2 // indirect |
|||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect |
|||
github.com/syyongx/php2go v0.9.4 // indirect |
|||
github.com/tidwall/sjson v1.1.5 // indirect |
|||
go.uber.org/zap v1.16.0 // indirect |
|||
gopkg.in/go-playground/assert.v1 v1.2.1 // indirect |
|||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect |
|||
xorm.io/core v0.7.3 // indirect |
|||
xorm.io/xorm v1.0.7 |
|||
) |
@ -0,0 +1,167 @@ |
|||
git.ouxuan.net/hasaki-service/hasaki-sdk v0.0.0-20210319020634-8fcf853e7c47 h1:xD0lljfBeITXJE8gcq4R1C2I7rk1LIOKXwdw39Ace8g= |
|||
git.ouxuan.net/hasaki-service/hasaki-sdk v0.0.0-20210319020634-8fcf853e7c47/go.mod h1:ZywQHFae2g5lQvOnHD7J4HfIWt9r/D2Z2Mnsa3znaXQ= |
|||
git.ouxuan.net/tommy/melody v0.0.0-20200312175938-1333d0784cc3 h1:lNfs8mRYpioYWlz+RfiUwRUSyOsI7lRosYeFILh5zFY= |
|||
git.ouxuan.net/tommy/melody v0.0.0-20200312175938-1333d0784cc3/go.mod h1:U3XnwEywt/MQKpKssJH5KUNTfj5+JsZc0AvMbqlWJMc= |
|||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= |
|||
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= |
|||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= |
|||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= |
|||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= |
|||
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= |
|||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
|||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= |
|||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
|||
github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= |
|||
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw= |
|||
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= |
|||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= |
|||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= |
|||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= |
|||
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= |
|||
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= |
|||
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= |
|||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= |
|||
github.com/go-playground/form v3.1.4+incompatible h1:lvKiHVxE2WvzDIoyMnWcjyiBxKt2+uFJyZcPYWsLnjI= |
|||
github.com/go-playground/form v3.1.4+incompatible/go.mod h1:lhcKXfTuhRtIZCIKUeJ0b5F207aeQCPbZU09ScKjwWg= |
|||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= |
|||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= |
|||
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= |
|||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= |
|||
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= |
|||
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= |
|||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= |
|||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= |
|||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= |
|||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= |
|||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= |
|||
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= |
|||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= |
|||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= |
|||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= |
|||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |
|||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= |
|||
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs= |
|||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
|||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= |
|||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= |
|||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= |
|||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= |
|||
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= |
|||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= |
|||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= |
|||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= |
|||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= |
|||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= |
|||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= |
|||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= |
|||
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= |
|||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= |
|||
github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= |
|||
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= |
|||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= |
|||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= |
|||
github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= |
|||
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= |
|||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= |
|||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= |
|||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= |
|||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= |
|||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= |
|||
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= |
|||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= |
|||
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= |
|||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= |
|||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= |
|||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= |
|||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= |
|||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= |
|||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= |
|||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= |
|||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= |
|||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= |
|||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= |
|||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= |
|||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= |
|||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= |
|||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= |
|||
github.com/syyongx/php2go v0.9.4 h1:qUtETTHzqHzxZK8plkbkb0YawD8bpLpxNsbzHQmb22Y= |
|||
github.com/syyongx/php2go v0.9.4/go.mod h1:meN2eIhhUoxOd2nMxbpe8g6cFPXI5O9/UAAuz7oDdzw= |
|||
github.com/tidwall/gjson v1.6.8 h1:CTmXMClGYPAmln7652e69B7OLXfTi5ABcPPwjIWUv7w= |
|||
github.com/tidwall/gjson v1.6.8/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= |
|||
github.com/tidwall/match v1.0.3 h1:FQUVvBImDutD8wJLN6c5eMzWtjgONK9MwIBCOrUJKeE= |
|||
github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= |
|||
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU= |
|||
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= |
|||
github.com/tidwall/sjson v1.1.5 h1:wsUceI/XDyZk3J1FUvuuYlK62zJv2HO2Pzb8A5EWdUE= |
|||
github.com/tidwall/sjson v1.1.5/go.mod h1:VuJzsZnTowhSxWdOgsAnb886i4AjEyTkk7tNtsL7EYE= |
|||
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= |
|||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= |
|||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= |
|||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= |
|||
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= |
|||
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= |
|||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= |
|||
go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= |
|||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= |
|||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= |
|||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= |
|||
go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= |
|||
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= |
|||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
|||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
|||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |
|||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= |
|||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= |
|||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= |
|||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
|||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
|||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
|||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= |
|||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= |
|||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= |
|||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= |
|||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= |
|||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= |
|||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
|||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
|||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
|||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
|||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
|||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
|||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= |
|||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
|||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
|||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= |
|||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= |
|||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= |
|||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= |
|||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= |
|||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= |
|||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= |
|||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= |
|||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
|||
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= |
|||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |
|||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= |
|||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |
|||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= |
|||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= |
|||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= |
|||
gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= |
|||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= |
|||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= |
|||
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= |
|||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= |
|||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= |
|||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= |
|||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= |
|||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= |
|||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= |
|||
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= |
|||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= |
|||
xorm.io/builder v0.3.7 h1:2pETdKRK+2QG4mLX4oODHEhn5Z8j1m8sXa7jfu+/SZI= |
|||
xorm.io/builder v0.3.7/go.mod h1:aUW0S9eb9VCaPohFCH3j7czOx1PMW3i1HrSzbLYGBSE= |
|||
xorm.io/core v0.7.3 h1:W8ws1PlrnkS1CZU1YWaYLMQcQilwAmQXU0BJDJon+H0= |
|||
xorm.io/core v0.7.3/go.mod h1:jJfd0UAEzZ4t87nbQYtVjmqpIODugN6PD2D9E+dJvdM= |
|||
xorm.io/xorm v1.0.7 h1:26yBTDVI+CfQpVz2Y88fISh+aiJXIPP4eNoTJlwzsC4= |
|||
xorm.io/xorm v1.0.7/go.mod h1:uF9EtbhODq5kNWxMbnBEj8hRRZnlcNSz2t2N7HW/+A4= |
@ -0,0 +1,18 @@ |
|||
package hasaki_push |
|||
|
|||
import "git.ouxuan.net/hasaki-service/hasaki-sdk/hskdb" |
|||
|
|||
func InitDb(config interface{}) (err error) { |
|||
if config == nil { |
|||
err = hskdb.XormSync2() |
|||
if err != nil { |
|||
return |
|||
} |
|||
} else { //分库
|
|||
err = hskdb.XormSync2(config) |
|||
if err != nil { |
|||
return |
|||
} |
|||
} |
|||
return |
|||
} |
@ -0,0 +1,61 @@ |
|||
package hasaki_push |
|||
|
|||
import ( |
|||
"git.ouxuan.net/hasaki-service/hasaki-sdk/hskdb" |
|||
"git.ouxuan.net/hasaki-service/hasaki-sdk/hsktime" |
|||
"git.ouxuan.net/tommy/hasaki-service-push/hasaki_push_options" |
|||
"xorm.io/xorm" |
|||
) |
|||
|
|||
type Api struct { |
|||
db *xorm.Engine |
|||
config interface{} |
|||
} |
|||
|
|||
func NewApi(db ...*xorm.Engine) *Api { |
|||
if len(db) > 0 { |
|||
return &Api{ |
|||
db: db[0], |
|||
} |
|||
} else { |
|||
return &Api{ |
|||
db: hskdb.GetXormAuto(), |
|||
} |
|||
} |
|||
} |
|||
|
|||
func GetApi(ctx interface{}) *Api { |
|||
config := hasaki_push_options.GetMysqlConfig(ctx) |
|||
if config == nil { |
|||
api := NewApi(hskdb.GetXormAuto()) |
|||
return api |
|||
} else { |
|||
api := NewApi(hskdb.GetXormAuto(config)) |
|||
api.config = config |
|||
return api |
|||
} |
|||
} |
|||
|
|||
type Model struct { |
|||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` |
|||
CreatedAt hsktime.Time `json:"created_at" xorm:"created comment('创建时间')"` |
|||
UpdatedAt hsktime.Time `json:"updated_at" xorm:"updated comment('更新时间')"` |
|||
DeletedAt hsktime.Time `json:"-" xorm:"deleted comment('是否删除') TIMESTAMP"` |
|||
Db *xorm.Engine `json:"-" xorm:"-"` |
|||
} |
|||
|
|||
func NewModel(engs ...*xorm.Engine) *Model { |
|||
var eng *xorm.Engine |
|||
if len(engs) > 0 { |
|||
eng = engs[0] |
|||
} else { |
|||
eng = hskdb.GetXormAuto() |
|||
} |
|||
return &Model{ |
|||
Db: eng, |
|||
} |
|||
} |
|||
|
|||
func (api *Api) NewModel() *Model { |
|||
return &Model{Db: api.db} |
|||
} |
@ -0,0 +1,42 @@ |
|||
package hasaki_push |
|||
|
|||
import ( |
|||
"git.ouxuan.net/tommy/melody" |
|||
"sync" |
|||
) |
|||
|
|||
var PushMessageSpanSecond = 5 |
|||
|
|||
func Send(sender int, receiver int, messageType string, Content interface{}, retries ...int) error { |
|||
retry := 0 |
|||
if len(retries) > 0 { |
|||
retry = retries[0] |
|||
} |
|||
return add(&PushMessage{ |
|||
Type: messageType, |
|||
Sender: sender, |
|||
Receiver: receiver, |
|||
RetryNumber: retry, |
|||
SpanSecond: PushMessageSpanSecond, |
|||
Content: Content, |
|||
Status: NotSend, |
|||
}) |
|||
} |
|||
|
|||
func SetStatus(uniqueId string, status MessageStatus) error { |
|||
return setStatus(uniqueId, status) |
|||
} |
|||
|
|||
type Message struct { |
|||
UniqueId string `json:"unique_id"` |
|||
Type string `json:"type"` |
|||
Content interface{} `json:"content"` |
|||
} |
|||
|
|||
var messageHandlerMap sync.Map |
|||
|
|||
type MessageHandler func(session *melody.Session, message []byte) |
|||
|
|||
func SetMessageHandler(messageType string, f MessageHandler) { |
|||
messageHandlerMap.Store(messageType, f) |
|||
} |
@ -0,0 +1,47 @@ |
|||
package hasaki_push |
|||
|
|||
import ( |
|||
"git.ouxuan.net/hasaki-service/hasaki-sdk/hskdb" |
|||
"git.ouxuan.net/hasaki-service/hasaki-sdk/hskutils" |
|||
) |
|||
|
|||
type MessageStatus int |
|||
|
|||
// 未发送
|
|||
// 已发送
|
|||
// 发送成功
|
|||
// 发送失败
|
|||
const ( |
|||
NotSend MessageStatus = 0 |
|||
Sending MessageStatus = 1 |
|||
SendSuccess MessageStatus = 2 |
|||
SendFailure MessageStatus = 3 |
|||
) |
|||
|
|||
// 发送方
|
|||
// 推送消息
|
|||
type PushMessage struct { |
|||
Model `xorm:"extends"` |
|||
|
|||
UniqueId string `json:"unique_id" xorm:"not null default '' comment('消息唯一值')"` |
|||
Type string `json:"type" xorm:"not null default '' comment('消息类型') VARCHAR(128)"` |
|||
Content interface{} `json:"content" xorm:"json comment('消息内容')"` |
|||
Sender int `json:"-" xorm:"not null default 0 comment('发送方') INT(11)"` |
|||
Receiver int `json:"-" xorm:"not null default 0 comment('接收方') INT(11)"` |
|||
RetryNumber int `json:"-" xorm:"not null default 0 comment('尝试次数') INT(11)"` |
|||
SpanSecond int `json:"-" xorm:"not null default 0 comment('间隔秒') INT(11)"` |
|||
Status MessageStatus `json:"-" xorm:"not null default 0 comment('消息状态') INT(11)"` |
|||
} |
|||
|
|||
func add(message *PushMessage) error { |
|||
if message.UniqueId == "" { |
|||
message.UniqueId = hskutils.CreateUUID() |
|||
} |
|||
_, err := hskdb.GetXormAuto().InsertOne(message) |
|||
return err |
|||
} |
|||
|
|||
func setStatus(uniqueId string, status MessageStatus) error { |
|||
_, err := hskdb.GetXormAuto().Where("unique_id=?", uniqueId).Cols("status").Update(&PushMessage{Status: status}) |
|||
return err |
|||
} |
@ -0,0 +1,45 @@ |
|||
package hasaki_push |
|||
|
|||
import ( |
|||
"git.ouxuan.net/hasaki-service/hasaki-sdk/hskgin" |
|||
"git.ouxuan.net/tommy/melody" |
|||
) |
|||
|
|||
func Initialize(router *hskgin.GinHelper) { |
|||
mrouter := melody.New() |
|||
|
|||
router.Any("/push/message", func(ctx *hskgin.GinContextHelper) { |
|||
err := mrouter.HandleRequest(ctx.GinContext.Writer, ctx.GinContext.Request) |
|||
ctx.CheckErrDisplayByError(err) |
|||
}) |
|||
|
|||
// 连接
|
|||
mrouter.HandleConnect(func(session *melody.Session) { |
|||
|
|||
}) |
|||
|
|||
// 断连
|
|||
mrouter.HandleDisconnect(func(session *melody.Session) { |
|||
|
|||
}) |
|||
|
|||
// 接收信息
|
|||
mrouter.HandleMessage(func(session *melody.Session, message []byte) { |
|||
// 根据消息类型进行各种
|
|||
}) |
|||
|
|||
// 发送消息
|
|||
mrouter.HandleSentMessage(func(session *melody.Session, bytes []byte) { |
|||
// 设置发送状态
|
|||
}) |
|||
|
|||
// 错误
|
|||
mrouter.HandleError(func(session *melody.Session, err error) { |
|||
|
|||
}) |
|||
|
|||
// 关闭
|
|||
mrouter.HandleClose(func(session *melody.Session, i int, s string) error { |
|||
return nil |
|||
}) |
|||
} |
@ -0,0 +1,5 @@ |
|||
package hasaki_push_options |
|||
|
|||
var GetMysqlConfig = func(ctx interface{}) interface{} { |
|||
return nil |
|||
} |
@ -0,0 +1,5 @@ |
|||
package main |
|||
|
|||
func main() { |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue