uo_ljws_cmd.sru 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. $PBExportHeader$uo_ljws_cmd.sru
  2. forward
  3. global type uo_ljws_cmd from uo_ljws_engine
  4. end type
  5. end forward
  6. global type uo_ljws_cmd from uo_ljws_engine
  7. end type
  8. global uo_ljws_cmd uo_ljws_cmd
  9. forward prototypes
  10. public subroutine setsendmsg (s_msgframe arg_s_msg, integer arg_len)
  11. end prototypes
  12. public subroutine setsendmsg (s_msgframe arg_s_msg, integer arg_len);Int i, li_slen
  13. li_slen = 10
  14. String ls_sendmsg = ""
  15. String ins_signStr = ">> "
  16. String MsgHead[] = {"<MH>","<Msg>"}
  17. String MsgEnd[] = {"</MH>","</Msg>"}
  18. //int I_ERROR = 0
  19. //int I_MSG = 1
  20. //int I_STATUS = 2
  21. //int I_SETINFO = 3
  22. //int I_DBINFO = 4
  23. //int I_SETREQ = 5
  24. //int I_LOGINREQ = 6
  25. //int I_USERQUTIREQ = 7
  26. //int I_SYSQUTIREQ = 8
  27. IF arg_len < 0 THEN
  28. FOR i = 1 TO UpperBound(arg_s_msg.Frame_str)
  29. IF NOT IsNull(arg_s_msg.Frame_str[i]) THEN
  30. ls_sendmsg += arg_s_msg.Frame_str[i] + ins_signStr
  31. END IF
  32. NEXT
  33. ELSEIF arg_len = 0 THEN
  34. ELSEIF arg_len = 1 THEN
  35. IF NOT IsNull(arg_s_msg.Frame_str[1]) THEN
  36. ls_sendmsg = arg_s_msg.Frame_str[1]
  37. END IF
  38. ELSE
  39. FOR i = 1 TO arg_len
  40. IF NOT IsNull(arg_s_msg.Frame_str[i]) THEN
  41. ls_sendmsg += arg_s_msg.Frame_str[i] + ins_signStr
  42. END IF
  43. NEXT
  44. END IF
  45. ls_sendmsg = MsgHead[1] + String(arg_s_msg.FrameHead) + MsgEnd[1] + MsgHead[2] + ls_sendmsg + MsgEnd[2]
  46. //Unicode码
  47. ins_send_blob_ori = Blob("")
  48. ins_send_blob_ori = Blob(ls_sendmsg,EncodingUTF16LE!) //FromUnicode()
  49. //ins_send_blob_ori = ToAnsi ( ls_sendmsg )
  50. end subroutine
  51. on uo_ljws_cmd.create
  52. call super::create
  53. end on
  54. on uo_ljws_cmd.destroy
  55. call super::destroy
  56. end on
  57. event ue_getdatacomplete;call super::ue_getdatacomplete;String sReceived
  58. //unicode码
  59. //sReceived = sReceived + FromUnicode(arg_bdata)
  60. ////ascii码
  61. //sReceived = sReceived + String(arg_bdata,EncodingAnsi!)
  62. sReceived = String(arg_bdata)
  63. //sReceived = sReceived + String(arg_bdata)
  64. // //支持旧版本
  65. // if pos(sReceived,"<") <= 0 or pos(sReceived,"</") <= 0 then
  66. // //unicode码
  67. // sReceived = sReceived + FromUnicode(BlobMid(blobBuf, 1, iLen))
  68. // end if
  69. String MsgHead[] = {"<MH>","<Msg>"}
  70. String MsgEnd[] = {"</MH>","</Msg>"}
  71. Int I_ERROR = 0
  72. Int I_MSG = 1
  73. Int I_STATUS = 2
  74. Int I_ACOUNT = 3
  75. Int I_DBINFO = 4
  76. Int I_SETREQ = 5
  77. Int I_LOGINREQ = 6
  78. Int I_RELOGINREQ = 7
  79. Int I_CHKLOGINREQ = 8
  80. Int I_DBSPID = 9
  81. String arg_msg
  82. s_infomsg SInfoMsg[]
  83. Long i
  84. Long ll_MH
  85. Long ll_sPos, ll_ePos
  86. String ls_Msg
  87. s_msgframe s_msg
  88. arg_msg = sReceived
  89. ll_sPos = Pos(arg_msg,MsgHead[1])
  90. ll_ePos = Pos(arg_msg,MsgEnd[1])
  91. IF ll_sPos > 0 AND ll_ePos > 0 THEN
  92. ll_MH = Integer(Mid(arg_msg, ll_sPos+Len(MsgHead[1]), ll_ePos - (ll_sPos + Len(MsgHead[1]))))
  93. ELSE
  94. ll_MH = -1
  95. END IF
  96. ll_sPos = Pos(arg_msg,MsgHead[2])
  97. ll_ePos = Pos(arg_msg,MsgEnd[2])
  98. IF ll_sPos > 0 AND ll_ePos > 0 THEN
  99. ls_Msg = Mid(arg_msg, ll_sPos+Len(MsgHead[2]), ll_ePos - (ll_sPos + Len(MsgHead[2])))
  100. END IF
  101. SInfoMsg[1].Index = ll_MH
  102. SInfoMsg[1].InfoMsg = ls_Msg
  103. String signStr = ">> "
  104. string ls_ErrType
  105. int li_ErrType
  106. Int li_index
  107. String ls_TmpMsgStr
  108. i = 1
  109. if SInfoMsg[i].Index < 0 then
  110. sys_buf_s_msgFrame.Error = SInfoMsg[i].Index
  111. sys_buf_s_msgFrame.ErrorMsg = SInfoMsg[i].InfoMsg
  112. // if pos(sys_buf_s_msgFrame.ErrorMsg,"[") > 0 and pos(sys_buf_s_msgFrame.ErrorMsg,"]") > 0 then
  113. // ls_ErrType = mid(sys_buf_s_msgFrame.ErrorMsg, pos(sys_buf_s_msgFrame.ErrorMsg,"[") + 1, pos(sys_buf_s_msgFrame.ErrorMsg,"]") - pos(sys_buf_s_msgFrame.ErrorMsg,"[") - 1)
  114. // sys_buf_s_msgFrame.Error = long(ls_ErrType)
  115. // end if
  116. end if
  117. CHOOSE CASE SInfoMsg[i].Index
  118. CASE I_ERROR //ERROR
  119. sys_buf_s_msgFrame.Error = -1
  120. sys_buf_s_msgFrame.ErrorMsg = SInfoMsg[i].InfoMsg
  121. if pos(sys_buf_s_msgFrame.ErrorMsg,"[") > 0 and pos(sys_buf_s_msgFrame.ErrorMsg,"]") > 0 then
  122. ls_ErrType = mid(sys_buf_s_msgFrame.ErrorMsg, pos(sys_buf_s_msgFrame.ErrorMsg,"[") + 1, pos(sys_buf_s_msgFrame.ErrorMsg,"]") - pos(sys_buf_s_msgFrame.ErrorMsg,"[") - 1)
  123. sys_buf_s_msgFrame.Error = long(ls_ErrType)
  124. end if
  125. CASE I_STATUS //I_STATUS
  126. s_msg.FrameHead = I_STATUS
  127. s_msg.frame_str[1] = String(sys_Status)
  128. sys_buf_s_msgFrame.Error = 0
  129. sys_buf_s_msgFrame.MsgType = I_STATUS
  130. setsendmsg( s_msg, 1)
  131. EVENT ue_send() //发送命令
  132. CASE I_ACOUNT //ACOUNT
  133. li_index = 0
  134. if Pos(SInfoMsg[i].InfoMsg , "[VersionID]") > 0 then
  135. sys_buf_s_msgFrame.version_id = Left(SInfoMsg[i].InfoMsg, Pos(SInfoMsg[i].InfoMsg, "[VersionID]") - 1)
  136. SInfoMsg[i].InfoMsg = mid(SInfoMsg[i].InfoMsg, Pos(SInfoMsg[i].InfoMsg, "[VersionID]") + len( "[VersionID]"))
  137. end if
  138. if Pos(SInfoMsg[i].InfoMsg , "[IfRegister]") > 0 then
  139. sys_buf_s_msgFrame.if_register = Integer(Left(SInfoMsg[i].InfoMsg, Pos(SInfoMsg[i].InfoMsg, "[IfRegister]") - 1))
  140. SInfoMsg[i].InfoMsg = mid(SInfoMsg[i].InfoMsg, Pos(SInfoMsg[i].InfoMsg, "[IfRegister]") + len( "[IfRegister]"))
  141. end if
  142. IF SInfoMsg[i].InfoMsg = "Acount Must User" THEN //服务器需用户名选择帐套
  143. sys_buf_s_msgFrame.AcountMustUser = TRUE
  144. ELSE
  145. sys_buf_s_msgFrame.AcountMustUser = FALSE
  146. DO WHILE Pos(SInfoMsg[i].InfoMsg , signStr) > 0
  147. ls_TmpMsgStr = Left(SInfoMsg[i].InfoMsg, Pos(SInfoMsg[i].InfoMsg, signStr) - 1)
  148. li_index++
  149. sys_buf_s_msgFrame.acount[li_index] = ls_TmpMsgStr
  150. SInfoMsg[i].InfoMsg = Right(SInfoMsg[i].InfoMsg, Len(SInfoMsg[i].InfoMsg)-Len(ls_TmpMsgStr)-Len(signStr))
  151. LOOP
  152. END IF
  153. sys_buf_s_msgFrame.acountCnt = li_index
  154. sys_buf_s_msgFrame.Error = 0
  155. sys_buf_s_msgFrame.MsgType = I_ACOUNT
  156. CASE I_DBINFO //DataBaseInfo
  157. //servername+database+loginid+loginpwd
  158. li_index = 0
  159. DO WHILE Pos(SInfoMsg[i].InfoMsg , signStr) > 0
  160. ls_TmpMsgStr = Left(SInfoMsg[i].InfoMsg, Pos(SInfoMsg[i].InfoMsg,signStr) - 1)
  161. IF li_index = 5 AND ls_TmpMsgStr = "" THEN
  162. EXIT
  163. END IF
  164. li_index++
  165. sys_buf_s_msgFrame.frame_str[li_index] = ls_TmpMsgStr
  166. SInfoMsg[i].InfoMsg = Right(SInfoMsg[i].InfoMsg, Len(SInfoMsg[i].InfoMsg)-Len(ls_TmpMsgStr)-Len(signStr))
  167. LOOP
  168. sys_buf_s_msgFrame.frame_str_index = li_index
  169. IF li_index = 5 THEN
  170. sys_buf_s_msgFrame.Error = 0
  171. sys_buf_s_msgFrame.ErrorMsg = ""
  172. ELSEIF li_index = 6 THEN
  173. sys_buf_s_msgFrame.Error = 0
  174. sys_buf_s_msgFrame.ErrorMsg = sys_buf_s_msgFrame.frame_str[6]
  175. //新注册程序
  176. ELSEIF li_index >= 7 THEN //6:有否加密锁,7:是否已注册, 8:有效日期,9:错误信息, 10:用户级别
  177. IF li_index = 8 THEN
  178. sys_buf_s_msgFrame.Error = 0
  179. sys_buf_s_msgFrame.ErrorMsg = ""
  180. ELSEIF li_index >= 9 THEN
  181. sys_buf_s_msgFrame.Error = 0
  182. sys_buf_s_msgFrame.ErrorMsg = sys_buf_s_msgFrame.frame_str[9]
  183. END IF
  184. ELSE
  185. sys_buf_s_msgFrame.Error = -1
  186. sys_buf_s_msgFrame.ErrorMsg = "获取数据库连接信息有误,系统将不能登录"
  187. END IF
  188. sys_buf_s_msgFrame.MsgType = I_DBINFO
  189. CASE I_CHKLOGINREQ //请求返回用户信息
  190. IF sys_login THEN
  191. s_msg.FrameHead = I_CHKLOGINREQ
  192. //
  193. s_msg.frame_str[1] = "1"
  194. s_msg.frame_str[2] = publ_userid
  195. s_msg.frame_str[3] = sys_psw
  196. s_msg.frame_str[4] = sys_DBMS
  197. s_msg.frame_str[5] = sys_ServerName
  198. s_msg.frame_str[6] = sys_userid
  199. s_msg.frame_str[7] = sys_dbpass
  200. s_msg.frame_str[8] = sys_DataBase
  201. s_msg.frame_str[9] = sys_LoginID
  202. s_msg.frame_str[10] = sys_LoginPwd
  203. s_msg.frame_str[11] = sys_dbparm
  204. setsendmsg( s_msg, 11)
  205. ELSE
  206. s_msg.FrameHead = I_CHKLOGINREQ
  207. //
  208. s_msg.frame_str[1] = "0"
  209. setsendmsg( s_msg, 1)
  210. END IF
  211. sys_buf_s_msgFrame.Error = 0
  212. sys_buf_s_msgFrame.MsgType = I_CHKLOGINREQ
  213. EVENT ue_send() //发送命令
  214. CASE I_DBSPID
  215. s_msg.FrameHead = I_DBSPID
  216. s_msg.frame_str[1] = String(sys_db_spid)
  217. s_msg.frame_str[2] = String(sys_Status)
  218. setsendmsg( s_msg, 2)
  219. EVENT ue_send() //发送命令
  220. CASE 20 //client list
  221. sys_buf_s_msgFrame.frame_str[1] = SInfoMsg[1].InfoMsg
  222. CASE 100 //client list
  223. // sys_buf_s_msgFrame.frame_str[1] = SInfoMsg[1].InfoMsg
  224. messagebox("系统信息",SInfoMsg[1].InfoMsg)
  225. END CHOOSE
  226. sys_buf_new = TRUE
  227. end event
  228. event ue_send;call super::ue_send;IF ins_cancel_flag = TRUE THEN //2006.7.8取消操作
  229. RETURN
  230. END IF
  231. Long rslt
  232. IF IsNull(ins_send_blob_ori) OR Len(ins_send_blob_ori) < 3 THEN
  233. ins_msg = 'ue_send>without send content.'
  234. EVENT ue_error(ins_msg)
  235. END IF
  236. rslt = Send( )
  237. IF rslt = 0 THEN
  238. //ins_msg = 'Send Error'
  239. ins_msg = 'ue_send>'+ins_msg
  240. //ue_error(ins_msg)
  241. this.postevent('ue_error')
  242. END IF
  243. end event
  244. event ue_error;call super::ue_error;//messagebox("Winsock系统错误",ins_msg)
  245. end event