文件同步
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

484 righe
12 KiB

  1. package websocket
  2. import (
  3. "encoding/json"
  4. "fts/handle"
  5. "github.com/gorilla/websocket"
  6. "log"
  7. "net/http"
  8. "strconv"
  9. "strings"
  10. )
  11. var(
  12. upgrader = websocket.Upgrader{
  13. //允许跨域访问
  14. CheckOrigin: func(r *http.Request) bool {
  15. return true
  16. },
  17. }
  18. )
  19. func UploadHandler(w http.ResponseWriter, r *http.Request) {
  20. //w.Write([]byte("hello"))
  21. //收到http请求(upgrade),完成websocket协议转换
  22. //在应答的header中放上upgrade:websoket
  23. var (
  24. conn *websocket.Conn
  25. err error
  26. //msgType int
  27. data []byte
  28. )
  29. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  30. //报错了,直接返回底层的websocket链接就会终断掉
  31. return
  32. }
  33. //得到了websocket.Conn长连接的对象,实现数据的收发
  34. for {
  35. //Text(json), Binary
  36. //if _, data, err = conn.ReadMessage(); err != nil {
  37. if _, data, err = conn.ReadMessage(); err != nil {
  38. //报错关闭websocket
  39. goto ERR
  40. }
  41. //发送数据,判断返回值是否报错
  42. //log.Println("param uploadHandler:"+string(data))
  43. params :=strings.Split(string(data),"|")
  44. mil,_:=strconv.ParseBool(params[7])
  45. err := handle.UploadCommand(conn,params[0],params[1],params[2],params[3],params[4],params[5],params[6],mil)
  46. if err!=nil{
  47. log.Println(err)
  48. goto ERR
  49. }
  50. goto ERR
  51. }
  52. //error的标签
  53. ERR:
  54. conn.Close()
  55. }
  56. func DownloadHandler(w http.ResponseWriter, r *http.Request) {
  57. //w.Write([]byte("hello"))
  58. //收到http请求(upgrade),完成websocket协议转换
  59. //在应答的header中放上upgrade:websoket
  60. var (
  61. conn *websocket.Conn
  62. err error
  63. //msgType int
  64. data []byte
  65. )
  66. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  67. //报错了,直接返回底层的websocket链接就会终断掉
  68. return
  69. }
  70. //得到了websocket.Conn长连接的对象,实现数据的收发
  71. for {
  72. //Text(json), Binary
  73. //if _, data, err = conn.ReadMessage(); err != nil {
  74. if _, data, err = conn.ReadMessage(); err != nil {
  75. //报错关闭websocket
  76. goto ERR
  77. }
  78. //发送数据,判断返回值是否报错
  79. //log.Println("param downloadHandler:"+string(data))
  80. params :=strings.Split(string(data),"|")
  81. err := handle.DownCommand(conn,params[0],params[1],params[2],params[3])
  82. if err!=nil{
  83. log.Println(err)
  84. goto ERR
  85. }
  86. goto ERR
  87. }
  88. //error的标签
  89. ERR:
  90. conn.Close()
  91. }
  92. func InitLocalWorkSpaceHandler(w http.ResponseWriter, r *http.Request) {
  93. //w.Write([]byte("hello"))
  94. //收到http请求(upgrade),完成websocket协议转换
  95. //在应答的header中放上upgrade:websoket
  96. var (
  97. conn *websocket.Conn
  98. err error
  99. //msgType int
  100. data []byte
  101. )
  102. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  103. //报错了,直接返回底层的websocket链接就会终断掉
  104. return
  105. }
  106. //得到了websocket.Conn长连接的对象,实现数据的收发
  107. for {
  108. //Text(json), Binary
  109. //if _, data, err = conn.ReadMessage(); err != nil {
  110. if _, data, err = conn.ReadMessage(); err != nil {
  111. //报错关闭websocket
  112. goto ERR
  113. }
  114. //发送数据,判断返回值是否报错
  115. //log.Println("param initLocalWorkSpaceHandler:"+string(data))
  116. params :=strings.Split(string(data),"|")
  117. //TODO userId
  118. err := handle.InitLocalWorkSpace(conn,params[0],"367294106252087297",params[1])
  119. if err!=nil{
  120. log.Println(err)
  121. goto ERR
  122. }
  123. goto ERR
  124. }
  125. //error的标签
  126. ERR:
  127. conn.Close()
  128. }
  129. func OpenFileWithHandler(w http.ResponseWriter, r *http.Request) {
  130. //w.Write([]byte("hello"))
  131. //收到http请求(upgrade),完成websocket协议转换
  132. //在应答的header中放上upgrade:websoket
  133. var (
  134. conn *websocket.Conn
  135. err error
  136. //msgType int
  137. data []byte
  138. )
  139. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  140. //报错了,直接返回底层的websocket链接就会终断掉
  141. return
  142. }
  143. //得到了websocket.Conn长连接的对象,实现数据的收发
  144. for {
  145. //Text(json), Binary
  146. //if _, data, err = conn.ReadMessage(); err != nil {
  147. if _, data, err = conn.ReadMessage(); err != nil {
  148. //报错关闭websocket
  149. goto ERR
  150. }
  151. //发送数据,判断返回值是否报错
  152. //log.Println("param OpenFileWithHandler:"+string(data))
  153. err := handle.OpenFileWith(string(data))
  154. if err!=nil{
  155. log.Println(err)
  156. if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
  157. log.Println(err)
  158. goto ERR
  159. }
  160. goto ERR
  161. }
  162. goto ERR
  163. }
  164. //error的标签
  165. ERR:
  166. conn.Close()
  167. }
  168. func CheckForUpdatesHandler(w http.ResponseWriter, r *http.Request) {
  169. //w.Write([]byte("hello"))
  170. //收到http请求(upgrade),完成websocket协议转换
  171. //在应答的header中放上upgrade:websoket
  172. var (
  173. conn *websocket.Conn
  174. err error
  175. //msgType int
  176. data []byte
  177. )
  178. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  179. //报错了,直接返回底层的websocket链接就会终断掉
  180. return
  181. }
  182. //得到了websocket.Conn长连接的对象,实现数据的收发
  183. for {
  184. //Text(json), Binary
  185. //if _, data, err = conn.ReadMessage(); err != nil {
  186. if _, data, err = conn.ReadMessage(); err != nil {
  187. //报错关闭websocket
  188. goto ERR
  189. }
  190. //发送数据,判断返回值是否报错
  191. //log.Println("param CheckForUpdatesHandler:"+string(data))
  192. err := handle.CheckForUpdates(string(data))
  193. if err!=nil{
  194. log.Println(err)
  195. if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
  196. log.Println(err)
  197. goto ERR
  198. }
  199. goto ERR
  200. }
  201. goto ERR
  202. }
  203. //error的标签
  204. ERR:
  205. conn.Close()
  206. }
  207. func InitClientConfigHandler(w http.ResponseWriter, r *http.Request) {
  208. //w.Write([]byte("hello"))
  209. //收到http请求(upgrade),完成websocket协议转换
  210. //在应答的header中放上upgrade:websoket
  211. var (
  212. conn *websocket.Conn
  213. err error
  214. //msgType int
  215. data []byte
  216. )
  217. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  218. //报错了,直接返回底层的websocket链接就会终断掉
  219. return
  220. }
  221. //得到了websocket.Conn长连接的对象,实现数据的收发
  222. for {
  223. //Text(json), Binary
  224. //if _, data, err = conn.ReadMessage(); err != nil {
  225. if _, data, err = conn.ReadMessage(); err != nil {
  226. //报错关闭websocket
  227. goto ERR
  228. }
  229. //发送数据,判断返回值是否报错
  230. //log.Println("param InitClientConfigHandler:"+string(data))
  231. params :=strings.Split(string(data),"|")
  232. err := handle.InitClientConfig(params[0],params[1])
  233. if err!=nil{
  234. log.Println(err)
  235. if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
  236. log.Println(err)
  237. goto ERR
  238. }
  239. goto ERR
  240. }
  241. goto ERR
  242. }
  243. //error的标签
  244. ERR:
  245. conn.Close()
  246. }
  247. func GetFolderFileInfoHandler(w http.ResponseWriter, r *http.Request) {
  248. //w.Write([]byte("hello"))
  249. //收到http请求(upgrade),完成websocket协议转换
  250. //在应答的header中放上upgrade:websoket
  251. var (
  252. conn *websocket.Conn
  253. err error
  254. //msgType int
  255. data []byte
  256. )
  257. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  258. //报错了,直接返回底层的websocket链接就会终断掉
  259. return
  260. }
  261. //得到了websocket.Conn长连接的对象,实现数据的收发
  262. for {
  263. //Text(json), Binary
  264. //if _, data, err = conn.ReadMessage(); err != nil {
  265. if _, data, err = conn.ReadMessage(); err != nil {
  266. //报错关闭websocket
  267. goto ERR
  268. }
  269. //发送数据,判断返回值是否报错
  270. //log.Println("param GetFolderFileInfo:"+string(data))
  271. err := handle.GetFolderFileInfo(conn,string(data))
  272. if err!=nil{
  273. log.Println(err)
  274. goto ERR
  275. }
  276. goto ERR
  277. }
  278. //error的标签
  279. ERR:
  280. conn.Close()
  281. }
  282. func EditCommitHistoryMilestoneHandler(w http.ResponseWriter, r *http.Request) {
  283. //w.Write([]byte("hello"))
  284. //收到http请求(upgrade),完成websocket协议转换
  285. //在应答的header中放上upgrade:websoket
  286. var (
  287. conn *websocket.Conn
  288. err error
  289. //msgType int
  290. data []byte
  291. )
  292. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  293. //报错了,直接返回底层的websocket链接就会终断掉
  294. return
  295. }
  296. //得到了websocket.Conn长连接的对象,实现数据的收发
  297. for {
  298. //Text(json), Binary
  299. //if _, data, err = conn.ReadMessage(); err != nil {
  300. if _, data, err = conn.ReadMessage(); err != nil {
  301. //报错关闭websocket
  302. goto ERR
  303. }
  304. //发送数据,判断返回值是否报错
  305. //log.Println("param EditCommitHistoryMilestoneHandler:"+string(data))
  306. params := strings.Split(string(data),"|")
  307. mil,_:=strconv.ParseBool(params[3])
  308. hash,err := handle.EditCommitHistoryMilestoneHandler(params[0],params[1],params[2],mil)
  309. if err!=nil{
  310. log.Println(err)
  311. if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
  312. log.Println(err)
  313. goto ERR
  314. }
  315. }else{
  316. if err := conn.WriteMessage(websocket.TextMessage, []byte(hash)); err != nil {
  317. log.Println(err)
  318. goto ERR
  319. }
  320. }
  321. goto ERR
  322. }
  323. //error的标签
  324. ERR:
  325. conn.Close()
  326. }
  327. func SubscriptionFileChangeHandler(w http.ResponseWriter, r *http.Request){
  328. //w.Write([]byte("hello"))
  329. //收到http请求(upgrade),完成websocket协议转换
  330. //在应答的header中放上upgrade:websoket
  331. var (
  332. conn *websocket.Conn
  333. err error
  334. //msgType int
  335. data []byte
  336. )
  337. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  338. //报错了,直接返回底层的websocket链接就会终断掉
  339. return
  340. }
  341. //得到了websocket.Conn长连接的对象,实现数据的收发
  342. for {
  343. //Text(json), Binary
  344. //if _, data, err = conn.ReadMessage(); err != nil {
  345. if _, data, err = conn.ReadMessage(); err != nil {
  346. //报错关闭websocket
  347. goto ERR
  348. }
  349. //发送数据,判断返回值是否报错
  350. //log.Println("param subscriptionFileChangeHandler:"+string(data))
  351. err = handle.SubscriptionFileChange(conn,string(data))
  352. if err != nil {
  353. //报错了
  354. log.Println(err)
  355. goto ERR
  356. }
  357. goto ERR
  358. }
  359. //error的标签
  360. ERR:
  361. conn.Close()}
  362. var IsKeeplive bool = false //客户端是否存活
  363. func KeepliveHandler(w http.ResponseWriter, r *http.Request){
  364. //w.Write([]byte("hello"))
  365. //收到http请求(upgrade),完成websocket协议转换
  366. //在应答的header中放上upgrade:websoket
  367. IsKeeplive = true
  368. var (
  369. conn *websocket.Conn
  370. err error
  371. //msgType int
  372. //data []byte
  373. )
  374. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  375. //报错了,直接返回底层的websocket链接就会终断掉
  376. log.Println(err)
  377. return
  378. }
  379. //得到了websocket.Conn长连接的对象,实现数据的收发
  380. for {
  381. //Text(json), Binary
  382. //if _, data, err = conn.ReadMessage(); err != nil {
  383. if _, _, err = conn.ReadMessage(); err != nil {
  384. //报错关闭websocket
  385. log.Println(err)
  386. goto ERR
  387. }
  388. IsKeeplive = true
  389. //goto ERR
  390. }
  391. //error的标签
  392. ERR:
  393. conn.Close()
  394. }
  395. //查询历史版本记录
  396. func QueryCommitHistoryHandler(w http.ResponseWriter, r *http.Request) {
  397. //w.Write([]byte("hello"))
  398. //收到http请求(upgrade),完成websocket协议转换
  399. //在应答的header中放上upgrade:websoket
  400. var (
  401. conn *websocket.Conn
  402. err error
  403. //msgType int
  404. data []byte
  405. )
  406. if conn, err = upgrader.Upgrade(w, r, nil); err !=nil {
  407. //报错了,直接返回底层的websocket链接就会终断掉
  408. return
  409. }
  410. //得到了websocket.Conn长连接的对象,实现数据的收发
  411. for {
  412. //Text(json), Binary
  413. //if _, data, err = conn.ReadMessage(); err != nil {
  414. if _, data, err = conn.ReadMessage(); err != nil {
  415. //报错关闭websocket
  416. goto ERR
  417. }
  418. //发送数据,判断返回值是否报错
  419. //eg: 文件路径|历史版本文件Hash
  420. dataString := string(data)
  421. //log.Println("param QueryCommitHistoryHandler:"+dataString)
  422. params := strings.Split(dataString,"|")
  423. dataList,err := handle.QueryCommitHistory(params[0],params[1])
  424. if err!=nil{
  425. log.Println(err)
  426. if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
  427. log.Println(err)
  428. }
  429. goto ERR
  430. }else{
  431. result,_ :=json.Marshal(dataList)
  432. if err := conn.WriteMessage(websocket.TextMessage, result); err != nil {
  433. log.Println(err)
  434. }
  435. goto ERR
  436. }
  437. goto ERR
  438. }
  439. //error的标签
  440. ERR:
  441. conn.Close()
  442. }
  443. func main() {
  444. }