Files
go3270/transactions.go
T

45 lines
1.6 KiB
Go

// This file is part of https://github.com/racingmars/go3270/
// Copyright 2025 by Matthew R. Wilson, licensed under the MIT license.
// See LICENSE in the project root for license information.
package go3270
import "net"
// Tx is a function that serves as one transaction in a go3270 application.
// The Tx function is called with the network connection to the client, and a
// "data" value provided by the previous transaction. Tx functions return the
// next transaction to run (or nil to indicate the RunTransactions() function
// should terminate), the data to pass into the next transaction, and any
// error. If the error is non-nil, the RunTransactions() function will
// terminate and return the err. A non-nil error is _not_ passed between
// transactions, it terminates transaction processing.
type Tx func(conn net.Conn, data any) (next Tx, newdata any, err error)
// RunTransactions begins running transaction functions, starting with the
// initial transaction, until a transaction eventually returns nil for the
// next transaction, or until a transaction function returns a non-nil error
// value. data (which may be nil, if the initial transaction does not require
// data) is passed in as the data to the initial transaction.
func RunTransactions(conn net.Conn, initial Tx, data any) error {
var next Tx
var err error
next = initial
// We run transactions until there isn't a next transaction to run, or
// an error.
for {
next, data, err = next(conn, data)
if err != nil {
// Error means we bail out and return the error to the caller.
return err
}
if next == nil {
// nil next transaction means we're done.
return nil
}
}
}