123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- package xugu
- import (
- "encoding/binary"
- "fmt"
- )
- func SockSendCommandN(pConn *xuguConn, sql string, num int) (int, error) {
- ret := 0
- var err error
- cmd_len := len(sql)
- ret, err = RhSend(pConn, []byte("?"), 1)
- if err != nil {
- return 0, err
- }
- ret, err = rhSendInt32(pConn, uint32(cmd_len))
- if err != nil {
- return 0, err
- }
- ret, err = RhSend(pConn, []byte(sql), cmd_len+1)
- if err != nil {
- return 0, err
- }
- if num != 0 {
- ret, err = rhSendInt32(pConn, uint32(num))
- if err != nil {
- return 0, err
- }
- } else {
- ret, err = rhSendInt32(pConn, uint32(0))
- if err != nil {
- return 0, err
- }
- }
- return ret, nil
- }
- func SockSendCommand0(pConn *xuguConn, sql string) (int, error) {
- cmdLen := len(sql)
-
- ret, err := RhSend(pConn, []byte("?"), cmdLen)
- if err != nil {
- return 0, err
- }
-
- lengthInt32 := uint32(len(sql))
- ret, err = rhSendInt32(pConn, lengthInt32)
- if err != nil {
- return 0, err
- }
-
- ret, err = RhSend(pConn, []byte(sql), cmdLen+1)
- if err != nil {
- return 0, err
- }
- data := make([]byte, 1)
- ret, err = RhSend(pConn, data, 1)
- if err != nil {
- return 0, err
- }
-
- ret, err = rhSendInt32(pConn, 0)
- if err != nil {
- return 0, err
- }
- fmt.Println("SockSendCommand0 msg", pConn.sendBuff.String())
- RhFlush(pConn)
- return ret, nil
- }
- func RhSend(pConn *xuguConn, buff []byte, length int) (int, error) {
- pConn.mu.Lock()
- defer pConn.mu.Unlock()
-
- if length == 0 {
- return 0, nil
- }
-
- if pConn.useSSL {
- fmt.Println("加密未实现")
- return length, nil
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- } else {
-
- if length > 2048 {
- if _, err := pConn.conn.Write(pConn.sendBuff.Bytes()); err != nil {
-
- pConn.sendBuff.Reset()
- return 0, err
- }
-
- pConn.sendBuff.Reset()
-
- _, err := pConn.conn.Write(buff)
- return length, err
- } else if pConn.sendBuff.Len()+length >= 8*1024 {
-
-
- if _, err := pConn.conn.Write(pConn.sendBuff.Bytes()); err != nil {
- pConn.sendBuff.Reset()
- return 0, err
- }
- pConn.sendBuff.Reset()
- pConn.sendBuff.Write(buff)
- return length, nil
- } else {
-
- pConn.sendBuff.Write(buff)
- return length, nil
- }
- }
- }
- func rhSendInt32(pConn *xuguConn, i uint32) (int, error) {
-
- var networkBytes [4]byte
-
- binary.BigEndian.PutUint32(networkBytes[:], i)
-
- return RhSend(pConn, networkBytes[:], 4)
- }
- func RhFlush(pConn *xuguConn) (int, error) {
- if pConn.sendBuff.Len() > 0 {
- if _, err := pConn.conn.Write(pConn.sendBuff.Bytes()); err != nil {
- pConn.sendBuff.Reset()
- return 0, err
- }
- pConn.sendBuff.Reset()
- }
- return 0, nil
- }
|