Exemplo n.º 1
0
/**
定时tick,把数据写入文件
**/
func EntityDump(tickTime time.Duration) {
	c := time.Tick(tickTime * time.Second)
	for _ = range c {
		//		Utils.LogInfo("%v\n", now)
		//如果在规定时间内没有更改,就不更新
		if dataChange == false {
			continue
		}
		//得到存储方式的句柄
		fd := DataStore.GetFd().(*os.File)
		//清空文件
		fd.Truncate(0)
		//得到gob转换出来的[]byte
		var wbuf bytes.Buffer
		egob := gob.NewEncoder(&wbuf)
		Utils.LogInfo("gob data=%#v\n", TaskData)
		err := egob.Encode(TaskData)
		if err != nil {
			Utils.LogInfo("data gob err")
			Utils.LogErr(err)
			continue
		}
		_, err = DataStore.Set(wbuf.Bytes())
		if err != nil {
			Utils.LogErr(err)
			continue
		}
		dataChange = false
	}
}
Exemplo n.º 2
0
/**
返回所有任务索引数组
**/
func GetAllTaskIndex() ([]Entity.TaskAddr, error) {
	bufReader := IndexStore.Get()
	var gobTypeList []Entity.TaskAddr
	for {
		var gobType Entity.TaskAddr
		dataLenBuf := make([]byte, 4)
		//得到数据体长度
		_, err := bufReader.Read(dataLenBuf)
		if err != nil {
			Utils.LogInfo("err=%d\n", err)
			if err == io.EOF {
				break
			}
			return nil, err
		}
		dataLen := Utils.BytesToUint32(dataLenBuf)
		dataBuf := make([]byte, dataLen)
		_, err = bufReader.Read(dataBuf)
		Utils.LogInfo("read file index=%#v\n", dataBuf)
		if err != nil {
			Utils.LogInfo("err=%d\n", err)
			return nil, err
		}
		rgob := gob.NewDecoder(bytes.NewBuffer(dataBuf))
		err = rgob.Decode(&gobType)
		if err != nil {
			Utils.LogInfo("gob index err=%d\n", err)
			return nil, Utils.LogErr(err)
		}
		gobTypeList = append(gobTypeList[:], gobType)
	}
	Utils.LogInfo("retn index=%#v\n", gobTypeList)
	return gobTypeList, nil
}
Exemplo n.º 3
0
/**
取出readyData和waitData数据
**/
func GetData() (*Entity.ReadyData, *Entity.WaitData, error) {
	//得到存储方式的句柄
	fd := DataStore.GetFd().(*os.File)
	//得到文件状态
	fileStat, err := fd.Stat()
	if err != nil {
		return nil, nil, Utils.LogErr(err)
	}
	//如果文件是空的,直接返回
	fileSize := fileStat.Size()
	if fileSize == 0 {
		return &Entity.ReadyData{}, &Entity.WaitData{}, nil
	}
	//得到文件大小的buf
	dataBuf := make([]byte, fileSize)
	//得到文件读取buf
	bufReader := DataStore.Get()
	_, err = bufReader.Read(dataBuf)
	Utils.LogInfo("read file data=%#v\n", dataBuf)
	if err != nil {
		Utils.LogInfo("err=%d\n", err)
		return nil, nil, err
	}
	//吧读到的[]byte转换成结构数据,使用全局变量TaskData
	rgob := gob.NewDecoder(bytes.NewBuffer(dataBuf))
	err = rgob.Decode(&TaskData)
	Utils.LogInfo("gob data =%v\n", TaskData)
	if err != nil {
		Utils.LogInfo("gob data err=%d\n", err)
		return nil, nil, Utils.LogErr(err)
	}
	return TaskData.ReadyData, TaskData.WaitData, nil
}
Exemplo n.º 4
0
/**
根据约定的数据包结构,区分出是telnet还是client
**/
func New(conn net.Conn) (IConn, error) {
	data, err := Utils.ReadConn(1, conn)
	Utils.LogInfo("new data=%v\n", string(data))
	if err != nil {
		return nil, err
	}
	Utils.LogInfo("data=%v\n", data)
	var retn IConn
	if string(data) == "1" {
		Utils.LogInfo("telnet\n")
		retn = NewTelnet(conn)
	} else {
		Utils.LogInfo("client\n")
		retn = NewClient(conn)
	}
	return retn, nil
}
Exemplo n.º 5
0
/**
写入索引
**/
func AddIndex(dataAddr Entity.TaskAddr) (int, error) {
	//得到存储方式的句柄
	fd := IndexStore.GetFd().(*os.File)
	//得到文件状态
	fileStat, err := fd.Stat()
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	//	//得到文件大小,这个位置就是这条记录的起始位置
	dataAddr.FileAddr = fileStat.Size()
	dataAddr.EleAddr = nil
	gob.Register(dataAddr)
	//得到gob转换出来的[]byte
	var wbuf bytes.Buffer
	egob := gob.NewEncoder(&wbuf)
	Utils.LogInfo("gob index=%#v\n", dataAddr)
	err = egob.Encode(dataAddr)
	if err != nil {
		Utils.LogInfo("index gob err")
		return 0, Utils.LogErr(err)
	}
	//拼出最终存入文件的数据==数据长度+数据体
	var storeByte []byte
	storeByteBuf := bytes.NewBuffer(storeByte)
	//写入数据长度
	_, err = storeByteBuf.Write(Utils.Uint32ToBytes(uint32(wbuf.Len())))
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	_, err = storeByteBuf.Write(wbuf.Bytes())
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	wData := storeByteBuf.Bytes()
	Utils.LogInfo("len=%d\n", storeByteBuf.Len())
	Utils.LogInfo("data=%#v\n", wData)
	writeNum, err := IndexStore.Set(wData)
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	return writeNum, nil
}
Exemplo n.º 6
0
/**
写入任意数据,都使用gob存入file,返回的int64,是该数据在文件中的起始位置
**/
func AddData(data Entity.TaskData) (int, error) {
	//得到存储方式的句柄
	fd := DataStore.GetFd().(*os.File)
	//得到文件状态
	fileStat, err := fd.Stat()
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	data.FileAddr = fileStat.Size()
	//得到gob转换出来的[]byte
	var wbuf bytes.Buffer
	egob := gob.NewEncoder(&wbuf)
	Utils.LogInfo("gob data=%#v\n", data)
	err = egob.Encode(data)
	if err != nil {
		Utils.LogInfo("data gob err")
		return 0, Utils.LogErr(err)
	}
	//拼出最终存入文件的数据==数据长度+数据体
	var storeByte []byte
	storeByteBuf := bytes.NewBuffer(storeByte)
	//写入数据长度
	_, err = storeByteBuf.Write(Utils.Uint32ToBytes(uint32(wbuf.Len())))
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	_, err = storeByteBuf.Write(wbuf.Bytes())
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	wData := storeByteBuf.Bytes()
	Utils.LogInfo("len=%d\n", storeByteBuf.Len())
	Utils.LogInfo("data=%#v\n", wData)
	writeNum, err := DataStore.Set(wData)
	if err != nil {
		return 0, Utils.LogErr(err)
	}
	return writeNum, nil
}
Exemplo n.º 7
0
//http://sendcloud.sohu.com
func SendMailBySohu(to, subject, body string) (err error) {
	resp, err := http.PostForm(Config.GetUrl().MailApi,
		url.Values{"to": {to}, "subject": {subject}, "html": {body}})
	if err != nil {
		return err
	}
	defer resp.Body.Close()
	res, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		Utils.LogPanicErr(err)
	}
	Utils.LogInfo(string(res))
	return nil
}
Exemplo n.º 8
0
/**
信号量处理函数
**/
func signalHandle() {
	for {
		ch := make(chan os.Signal)
		signal.Notify(ch, syscall.SIGINT, syscall.SIGUSR1)
		sig := <-ch
		Utils.LogInfo("Signal received: %v", sig)
		switch sig {
		case syscall.SIGINT:
			os.Exit(1)
		case syscall.SIGUSR1:
			Config.ParseXml(Config.ConfigFile)
		}
	}
}
Exemplo n.º 9
0
/**
解析xml文件
**/
func ParseXml(configFile string) {
	file, err := os.Open(configFile)
	if err != nil {
		Utils.LogPanicErr(err)
		return
	}
	xmlObj := xml.NewDecoder(file)
	err = xmlObj.Decode(&vsConfig)
	if err != nil {
		Utils.LogPanicErr(err)
		return
	}
	Utils.LogInfo("parse xml=%v\n", vsConfig)
}
Exemplo n.º 10
0
func sendPolicy(conn net.Conn) {
	defer conn.Close()
	str := "<cross-domain-policy><site-control permitted-cross-domain-policies=\"master-only\"/>  <allow-access-from domain=\"*\" to-ports=\"9876\" /></cross-domain-policy>"
	//	str+="\0"
	Utils.LogInfo("send data=%s\n", str)
	_, err := Utils.ReadConn(23, conn)
	if err != nil {
		Utils.LogErr(err)
	}
	bufk := bufio.NewWriter(conn)

	bufk.WriteString(str)
	//	bufk.WriteString("\\0")
	bufk.Flush()
}
Exemplo n.º 11
0
func (j *Jobsms) Run() {
	for {
		Utils.LogInfo("Jobsms delay %d Second", Config.GetLoopTime().Sms)
		time.Sleep(time.Second * Config.GetLoopTime().Sms)

		beanstalkd, err := lentil.Dial(Config.GetBeanstalk().Server)
		if err != nil {
			Utils.LogPanicErr(err)
		} else {
			err = beanstalkd.Use(Config.GetBeanstalk().MobileQueue)
		}

		if err != nil {
			Utils.LogPanicErr(err)
		} else {
			for i := 0; i < 10; i++ {
				job, err := beanstalkd.PeekReady()
				if err != nil {
					//Utils.LogPanicErr(err)
					break
				} else {
					body := strings.SplitN(string(job.Body), "\t", 2)
					if len(body) == 2 {
						r, err := base64.StdEncoding.DecodeString(body[1])
						if err == nil {
							fmt.Printf("Job id: %d  \nmobile: %s \nbody: %s", job.Id, body[0], string(r))
							e := SendSms(body[0], string(r))
							if e != nil {
								Utils.LogPanicErr(e)
							}
						}
					}
					beanstalkd.Delete(job.Id)
				}
			}
		}

	}
}
Exemplo n.º 12
0
/**
检查进入等待状态的任务是否到期,到期后放入readyData
**/
func CheckWaitTask(readyData *Entity.ReadyData, waitData *Entity.WaitData) {
	c := time.Tick(time.Second)
	dataChange := false
	for _ = range c {
		for key, value := range *waitData {
			//已经到期的任务,放入readyData
			if value.Expired <= uint(time.Now().Unix()) {
				Utils.LogInfo("check do=%s\n", key)
				readyData.Add(key, value.Value, value.Expired)
				waitData.Del(key)
				dataChange = true
			}
		}
		if dataChange {
			//存储数据
			Store.SetData(readyData, waitData)
			dataChange = false
		}

	}

}
Exemplo n.º 13
0
func main() {
	service := ":843"
	tcpAddr, err := net.ResolveTCPAddr("ip4", service)
	Utils.LogErr(err)

	listener, err := net.ListenTCP("tcp", tcpAddr)
	Utils.LogErr(err)
	i := 0
	runtime.GOMAXPROCS(runtime.NumCPU())
	for {
		conn, err := listener.Accept()
		if err != nil {
			Utils.LogErr(err)
			return
		}
		Utils.LogInfo("start conn\n")
		go sendPolicy(conn)
		//		go Handle.Test(i,roomList, conn)
		//		roomChan <- roomList
		i++
	}
}
Exemplo n.º 14
0
func (j *Jobmail) Run() {
	for {

		Utils.LogInfo("Jobmail delay %d Second", Config.GetLoopTime().Mail)
		time.Sleep(time.Second * Config.GetLoopTime().Mail)
		beanstalkd, err := lentil.Dial(Config.GetBeanstalk().Server)
		if err != nil {
			Utils.LogPanicErr(err)
		} else {
			err = beanstalkd.Use(Config.GetBeanstalk().MailQueue)
		}
		if err != nil {
			Utils.LogPanicErr(err)
		} else {
			for i := 0; i < 10; i++ {
				job, err := beanstalkd.PeekReady()
				if err != nil {
					//Utils.LogPanicErr(err)
					break
				} else {
					body := strings.SplitN(string(job.Body), "\t", 4)
					if len(body) == 4 {
						r, err := base64.StdEncoding.DecodeString(body[3])
						if err == nil {
							fmt.Printf("Job id: %d  \nmail to:%s \nsubject:%s\nbody: , %s", job.Id, body[0], body[1], string(r))
							//SendMail( body[0], body[1], string(r), body[2])
							SendMailBySohu(body[0], body[1], string(r))
						}
					}
					beanstalkd.Delete(job.Id)
				}
			}
		}

	}
}
Exemplo n.º 15
0
func main() {
	utils.LogInfo(fmt.Sprintf("-----------------------begin %d", 1))
	utils.LogError("----------------------begin")
	utils.LogWarning("=====================end")
	utils.LogInfo("=======================end ")
}