コード例 #1
0
ファイル: fileserver.go プロジェクト: joushou/g9ptools
func (fs *FileServer) flushed(d protocol.Message) bool {
	fs.tagLock.Lock()
	defer fs.tagLock.Unlock()

	t := d.GetTag()
	if _, ok := fs.tags[t]; ok {
		delete(fs.tags, t)
		return false
	}
	return true
}
コード例 #2
0
ファイル: client.go プロジェクト: joushou/g9p
func (c *Client) handleResponse(d protocol.Message) error {
	c.queueLock.Lock()
	defer c.queueLock.Unlock()
	t := d.GetTag()
	if ch, ok := c.queue[t]; ok {
		ch <- d
		delete(c.queue, t)
		return nil
	}
	return ErrNoSuchTag
}
コード例 #3
0
ファイル: fileserver.go プロジェクト: joushou/g9ptools
func (fs *FileServer) register(d protocol.Message) error {
	fs.tagLock.Lock()
	defer fs.tagLock.Unlock()

	t := d.GetTag()
	if _, ok := fs.tags[t]; ok {
		return fmt.Errorf("tag already in use")
	}

	fs.tags[t] = true
	return nil
}
コード例 #4
0
ファイル: client.go プロジェクト: joushou/g9p
func (c *Client) send(d protocol.Message) (protocol.Message, error) {
	t := d.GetTag()
	ch, err := c.getTag(t)
	if err != nil {
		return nil, err
	}
	c.write(t, d)
	resp := <-ch
	if resp == nil {
		return nil, ErrFlushed
	}

	if e, ok := resp.(*protocol.ErrorResponse); ok {
		return nil, errors.New(e.Error)
	}
	return resp, nil
}