1
// Copyright 2023 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
11
type WriterConnOption struct {
18
type eventWriterConn struct {
23
var _ EventWriter = (*eventWriterConn)(nil)
25
func NewEventWriterConn(writerName string, writerMode WriterMode) EventWriter {
26
w := &eventWriterConn{EventWriterBaseImpl: NewEventWriterBase(writerName, "conn", writerMode)}
27
opt := writerMode.WriterOption.(WriterConnOption)
28
w.connWriter = connWriter{
29
ReconnectOnMsg: opt.ReconnectOnMsg,
30
Reconnect: opt.Reconnect,
34
w.OutputWriteCloser = &w.connWriter
39
RegisterEventWriter("conn", NewEventWriterConn)
42
// below is copied from old code
44
type connWriter struct {
45
innerWriter io.WriteCloser
49
Net string `json:"net"`
50
Addr string `json:"addr"`
53
var _ io.WriteCloser = (*connWriter)(nil)
55
// Close the inner writer
56
func (i *connWriter) Close() error {
57
if i.innerWriter != nil {
58
return i.innerWriter.Close()
63
// Write the data to the connection
64
func (i *connWriter) Write(p []byte) (int, error) {
65
if i.neededConnectOnMsg() {
66
if err := i.connect(); err != nil {
72
defer i.innerWriter.Close()
75
return i.innerWriter.Write(p)
78
func (i *connWriter) neededConnectOnMsg() bool {
84
if i.innerWriter == nil {
88
return i.ReconnectOnMsg
91
func (i *connWriter) connect() error {
92
if i.innerWriter != nil {
93
_ = i.innerWriter.Close()
97
conn, err := net.Dial(i.Net, i.Addr)
102
if tcpConn, ok := conn.(*net.TCPConn); ok {
103
err = tcpConn.SetKeepAlive(true)