1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package fs
- import (
- "os"
- )
- type MailFileRequest struct {
- respCh chan MailFile
- }
- func NewMailFileRequest() MailFileRequest {
- ch := make(chan MailFile)
- return MailFileRequest{respCh: ch}
- }
- func (r MailFileRequest) Response() MailFile {
- return <-r.respCh
- }
- func NewOracle() chan MailFileRequest {
- r := realClock{}
- return newOracle(r)
- }
- func newOracle(c clock) chan MailFileRequest {
- reqCh := make(chan MailFileRequest, 10)
- go spawnOracle(reqCh, c)
- return reqCh
- }
- func spawnOracle(reqCh <-chan MailFileRequest, c clock) {
- count := 0
- C := c.Ticker().getC()
- pid := os.Getpid()
- hostname, err := os.Hostname()
- if err != nil {
- hostname = "MISSING"
- }
- for {
- select {
- case <-C:
- count = 0
- case req := <-reqCh:
- req.respCh <- MailFile{
- timestamp: c.Now(),
- progressive: count,
- pid: pid,
- hostname: hostname,
- }
- count += 1
- }
- }
- }
|