using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; using System.Threading; namespace AGVControllerD { [ServiceContract(Session = true, CallbackContract = typeof(IMoveToCallback))] public interface IAGVControl { [OperationContract(IsInitiating = true, IsTerminating = false)] int AcquireVehicle(); [OperationContract(IsTerminating = true, IsInitiating = false)] void ReleaseVehicle(); [OperationContract(IsOneWay=true)] void MoveTo(int location); [OperationContract] void Load(); [OperationContract] void Unload(); } //What the client needs to implement public interface IMoveToCallback { [OperationContract(IsOneWay = true)] void MoveDone(int location); } [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class AGVControl : IAGVControl { private IMoveToCallback callback = null; public AGVControl() { callback = OperationContext.Current.GetCallbackChannel<IMoveToCallback>(); } public int AcquireVehicle() { int vehicleID = 0; return vehicleID; } public void ReleaseVehicle() { //place vehicle back in the pool } public void MoveTo(int location) { //This takes a long time... Thread.Sleep(5000); //Send a response callback.MoveDone(location); } public void Load() { //load it } public void Unload() { //unload it } } }
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)