public SerialBalance UpdateBalanceData(SerialBalance Request) { //delegate has to be static because you can't create an instance yet: you don't have resources until the delegate is actually called SerialBalance Ret = new SerialBalance(); var SvcDriver = new CswWebSvcDriver <SerialBalance, SerialBalance>( CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null), ReturnObj: Ret, WebSvcMethodPtr: CswNbtWebServiceSerialBalance.UpdateBalanceData, ParamObj: Request ); SvcDriver.run(); return(Ret); }
}//performBalanceCheck() /// <summary> /// Announces Balance to NBT /// </summary> public void announceBalance( ) { if (_isEnabled) { NbtAuth.SessionCompleteEvent SendBalanceToServer = delegate(NbtPublicClient Client) { SerialBalance Response = Client.UpdateBalanceData(_balanceData); string Status = "NonExistentSession"; if (null != Response) { _balanceData.NodeId = Response.NodeId; Status = "Authenticated"; } return(Status); }; AuthenticationClient.PerformAction(SendBalanceToServer); } }//announceBalance()
public Balance(string COM, string Manufacturer, string Description) { _isEnabled = false; _updateInProgress = false; _stableReadsOnly = false; _balanceData = new SerialBalance(); _balanceData.NbtName = ""; _balanceData.CurrentWeight = 0; _balanceData.UnitOfMeasurement = ""; _balanceData.Manufacturer = Manufacturer; _balanceData.DeviceDescription = Description; _balanceData.Operational = false; _driftThreshold = 0; _pendingReadRequests = 0; _serialPortConfiguration = new BalanceConfiguration(); _balanceConnection = new SerialPort(); _balanceConnection.PortName = COM; _balanceConnection.DataReceived += parseWeightResult; }//constructor
public static void UpdateBalanceData( ICswResources CswResources, SerialBalance Return, SerialBalance Request ) { CswNbtResources NbtResources = (CswNbtResources) CswResources; CswNbtMetaDataObjectClass BalanceOC = NbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.BalanceClass ); if( null != BalanceOC ) { CswNbtMetaDataObjectClassProp BalanceNameOCP = BalanceOC.getObjectClassProp( CswNbtObjClassBalance.PropertyName.Name ); CswNbtObjClassBalance Balance; Action<CswNbtNode> UpdateBalance = delegate( CswNbtNode NewNode ) { CswNbtObjClassBalance thisBalance = NewNode; thisBalance.Name.Text = Request.NbtName; thisBalance.Quantity.Quantity = Request.CurrentWeight; thisBalance.LastActive.DateTimeValue = DateTime.Now; thisBalance.Device.Text = Request.DeviceDescription; thisBalance.Manufacturer.Text = Request.Manufacturer; thisBalance.Operational.Checked = CswConvert.ToTristate( Request.Operational ); thisBalance.BalanceConfiguration.RelatedNodeId = _findConfigurationWithName( NbtResources, Request.Configuration ).NodeId; CswNbtObjClassUnitOfMeasure Unit = _mapUnitToNode( NbtResources, Request.UnitOfMeasurement ); if( null != Unit ) { thisBalance.Quantity.UnitId = Unit.NodeId; } }; if( string.IsNullOrEmpty(Request.NodeId) ) { CswNbtView ExistingBalancesView = new CswNbtView( NbtResources ); ExistingBalancesView.ViewName = "Existing Balances"; CswNbtViewRelationship BalanceRel = ExistingBalancesView.AddViewRelationship( BalanceOC, false ); ExistingBalancesView.AddViewPropertyAndFilter( BalanceRel, BalanceNameOCP, Value: Request.NbtName, FilterMode: CswEnumNbtFilterMode.Equals ); ICswNbtTree ExistingBalancesTree = NbtResources.Trees.getTreeFromView( ExistingBalancesView, false, true, true ); if( ExistingBalancesTree.getChildNodeCount() == 0 ) { //there is no balance with this name yet. Make a new one. CswNbtMetaDataNodeType BalanceNT = BalanceOC.FirstNodeType; Balance = NbtResources.Nodes.makeNodeFromNodeTypeId( BalanceNT.NodeTypeId, UpdateBalance ); } else { //this balance already exists, grab a reference to it. ExistingBalancesTree.goToNthChild( 0 ); Balance = ExistingBalancesTree.getCurrentNode(); UpdateBalance( Balance.Node ); Balance.postChanges( false ); } }//if null == request.nodeid else { Balance = NbtResources.Nodes[new CswPrimaryKey( "nodes", Convert.ToInt32( Request.NodeId ) )]; UpdateBalance( Balance.Node ); Balance.postChanges( false ); } //return the requested balance back, plus what nodeId it was assigned Return = Request; Return.NodeId = Balance.NodeId.PrimaryKey.ToString(); }//if ( null != BalanceOC ) }//UpdateBalanceData()