How to use ClientRequestEvent class of Microsoft.Coyote.Samples.CloudMessaging package

Best Coyote code snippet using Microsoft.Coyote.Samples.CloudMessaging.ClientRequestEvent

MockClient.cs

Source:MockClient.cs Github

copy

Full Screen

...45 return Task.CompletedTask;46 }47 private void SendNextRequest()48 {49 this.SendEvent(this.ClientInfo.Cluster, new ClientRequestEvent(this.NextCommand));50 this.Logger.WriteLine($"<Client> sent {this.NextCommand}.");51 }52 private void HandleResponse(Event e)53 {54 var response = e as ClientResponseEvent;55 if (response.Command == this.NextCommand)56 {57 this.Logger.WriteLine($"<Client> received response for {response.Command} from {response.Server}.");58 this.NumResponses++;59 if (this.NumResponses == this.ClientInfo.NumRequests)60 {61 // Halt the client, as all responses have been received.62 this.RaiseHaltEvent();63 this.ClientInfo.Finished.SetResult(true);...

Full Screen

Full Screen

ClusterManager.cs

Source:ClusterManager.cs Github

copy

Full Screen

...22 protected readonly Dictionary<string, ActorId> Servers = new Dictionary<string, ActorId>();23 [Start]24 [OnEventDoAction(typeof(VoteRequestEvent), nameof(BroadcastVoteRequestAsync))]25 [OnEventDoAction(typeof(VoteResponseEvent), nameof(SendVoteResponseAsync))]26 [OnEventDoAction(typeof(ClientRequestEvent), nameof(BroadcastClientRequestAsync))]27 [OnEventDoAction(typeof(ClientResponseEvent), nameof(SendClientResponseAsync))]28 [OnEventDoAction(typeof(AppendLogEntriesRequestEvent), nameof(SendAppendEntriesRequestAsync))]29 [OnEventDoAction(typeof(AppendLogEntriesResponseEvent), nameof(SendAppendEntriesResponseAsync))]30 [OnEventDoAction(typeof(RegisterClientEvent), nameof(RegisterClient))]31 [OnEventDoAction(typeof(RegisterServerEvent), nameof(RegisterServer))]32 private class Init : State { }33 public virtual async Task BroadcastVoteRequestAsync(Event e)34 {35 await Task.CompletedTask;36 }37 public virtual async Task SendVoteResponseAsync(Event e)38 {39 await Task.CompletedTask;40 }...

Full Screen

Full Screen

ClientRequestEvent.cs

Source:ClientRequestEvent.cs Github

copy

Full Screen

...6 /// <summary>7 /// Used to issue a client request.8 /// </summary>9 [DataContract]10 public class ClientRequestEvent : Event11 {12 [DataMember]13 public readonly string Command;14 public ClientRequestEvent(string command)15 {16 this.Command = command;17 }18 }19}...

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 static void Main(string[] args)10 {11 var client = new ClientRequestEvent();12 client.ClientId = 1;13 client.RequestId = 1;14 client.Message = "Hello";15 Console.WriteLine(client.ToString());16 Console.ReadKey();17 }18 }19}20using Microsoft.Coyote.Samples.CloudMessaging;21using System;22using System.Collections.Generic;23using System.Linq;24using System.Text;25using System.Threading.Tasks;26{27 {28 static void Main(string[] args)29 {30 var client = new ClientResponseEvent();31 client.ClientId = 1;32 client.RequestId = 1;33 client.Message = "Hello";34 Console.WriteLine(client.ToString());35 Console.ReadKey();36 }37 }38}39using Microsoft.Coyote.Samples.CloudMessaging;40using System;41using System.Collections.Generic;42using System.Linq;43using System.Text;44using System.Threading.Tasks;45{46 {47 static void Main(string[] args)48 {49 var client = new ClientResponseEvent();50 client.ClientId = 1;51 client.RequestId = 1;52 client.Message = "Hello";53 Console.WriteLine(client.ToString());54 Console.ReadKey();55 }56 }57}58using Microsoft.Coyote.Samples.CloudMessaging;59using System;60using System.Collections.Generic;61using System.Linq;62using System.Text;63using System.Threading.Tasks;64{65 {66 static void Main(string[] args)67 {68 var client = new ClientResponseEvent();69 client.ClientId = 1;70 client.RequestId = 1;71 client.Message = "Hello";72 Console.WriteLine(client.ToString());73 Console.ReadKey();74 }75 }76}

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7using Microsoft.Coyote;8using Microsoft.Coyote.Actors;9using Microsoft.Coyote.Tasks;10using Microsoft.Coyote.Runtime;11using Microsoft.Coyote.Samples.CloudMessaging;12using Microsoft.Coyote.Samples.CloudMessaging.Shared;13{14 {15 static void Main(string[] args)16 {17 var config = Configuration.Create();18 config.MaxSchedulingSteps = 10000;19 config.MaxFairSchedulingSteps = 10000;20 config.EnableCycleDetection = true;21 config.EnableDataRaceDetection = true;22 config.EnableIntegerOverflowDetection = true;23 config.EnableDeadlockDetection = true;24 config.EnableOperationCanceledExceptionSupport = true;25 config.EnableActorGarbageCollection = true;26 config.EnableActorLogging = true;27 config.EnableActorMonitoring = true;28 config.EnableActorScopeDebugging = true;29 config.EnableActorStatePrinting = true;30 config.EnableActorTaskDebugging = true;31 config.EnableActorTaskAffinityDebugging = true;32 config.EnableActorTaskGroupDebugging = true;33 config.EnableActorTaskGroupAffinityDebugging = true;34 config.EnableActorTaskGroupSchedulingDebugging = true;35 config.EnableActorTaskGroupSchedulingAffinityDebugging = true;

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using System;2using System.Threading.Tasks;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using Microsoft.Coyote.Samples.CloudMessaging;6{7 {8 public string Request;9 public ClientRequestEvent(string request)10 {11 this.Request = request;12 }13 }14 {15 public string Response;16 public ClientResponseEvent(string response)17 {18 this.Response = response;19 }20 }21 {22 private int id;23 public Client(int id)24 {25 this.id = id;26 }27 [OnEventDoAction(typeof(ClientRequestEvent), nameof(ProcessRequest))]28 private class Init : State { }29 private async Task ProcessRequest(Event e)30 {31 ClientRequestEvent request = e as ClientRequestEvent;32 Console.WriteLine("Client {0} sent {1}", this.id, request.Request);33 await this.SendEventAsync(CloudMessaging.ServerId, new ServerRequestEvent(request.Request));34 ClientResponseEvent response = await this.ReceiveEventAsync<ClientResponseEvent>();35 Console.WriteLine("Client {0} received {1}", this.id, response.Response);36 }37 }38}39using System;40using System.Threading.Tasks;41using Microsoft.Coyote;42using Microsoft.Coyote.Actors;43using Microsoft.Coyote.Samples.CloudMessaging;44{45 {46 public string Request;47 public ServerRequestEvent(string request)48 {49 this.Request = request;50 }51 }52 {53 public string Response;54 public ServerResponseEvent(string response)55 {56 this.Response = response;57 }58 }59 {60 private int id;61 public Server(int id)62 {63 this.id = id;64 }65 [OnEventDoAction(typeof(ServerRequestEvent), nameof(ProcessRequest))]66 private class Init : State { }67 private async Task ProcessRequest(Event e)68 {69 ServerRequestEvent request = e as ServerRequestEvent;70 Console.WriteLine("

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2{3 {4 public string Message { get; private set; }5 public ClientRequestEvent(string message)6 {7 this.Message = message;8 }9 }10}11using System;12using System.Threading.Tasks;13using Microsoft.Coyote.Actors;14using Microsoft.Coyote.Samples.CloudMessaging;15{16 {17 private readonly string _name;18 private readonly IActorRuntime _runtime;19 public Client(string name, IActorRuntime runtime)20 {21 this._name = name;22 this._runtime = runtime;23 }24 [OnEventDoAction(typeof(ClientRequestEvent), nameof(HandleClientRequest))]25 private class Init : State { }26 private void HandleClientRequest(Event e)27 {28 var request = e as ClientRequestEvent;29 Console.WriteLine($"Client {this._name} received request: {request.Message}");30 this._runtime.SendEvent(this.Id, new ClientRequestEvent("Hello from Client"));31 }32 }33}34using System;35using System.Threading.Tasks;36using Microsoft.Coyote;37using Microsoft.Coyote.Actors;38using Microsoft.Coyote.Samples.CloudMessaging;39{40 {41 static void Main(string[] args)42 {43 var config = Configuration.Create();44 config.MaxSchedulingSteps = 1000;45 config.MaxFairSchedulingSteps = 20;46 config.MaxInterleavings = 1000;47 config.MaxUnfairSchedulingSteps = 1000;48 config.MaxStepsInPath = 1000;49 config.MaxStepsFromEntryToError = 1000;50 config.MaxStepsFromAnyToError = 1000;51 config.MaxStepsFromAnyToExit = 1000;52 config.MaxStepsFromAnyToFairExit = 1000;53 config.MaxStepsFromAnyToFairTermination = 1000;54 config.MaxStepsFromAnyToTermination = 1000;55 config.MaxStepsFromEntryToFairExit = 1000;56 config.MaxStepsFromEntryToFairTermination = 1000;

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using System;2using System.Threading.Tasks;3using Microsoft.Coyote;4using Microsoft.Coyote.Samples.CloudMessaging;5using Microsoft.Coyote.Tasks;6{7 {8 public string Id;9 public string Message;10 }11}12using System;13using System.Threading.Tasks;14using Microsoft.Coyote;15using Microsoft.Coyote.Samples.CloudMessaging;16using Microsoft.Coyote.Tasks;17{18 {19 public string Id;20 public string Message;21 }22}23using System;24using System.Threading.Tasks;25using Microsoft.Coyote;26using Microsoft.Coyote.Samples.CloudMessaging;27using Microsoft.Coyote.Tasks;28{29 {30 public string Id;31 public string Message;32 }33}34using System;35using System.Threading.Tasks;36using Microsoft.Coyote;37using Microsoft.Coyote.Samples.CloudMessaging;38using Microsoft.Coyote.Tasks;39{40 {41 public string Id;42 public string Message;43 }44}45using System;46using System.Threading.Tasks;47using Microsoft.Coyote;48using Microsoft.Coyote.Samples.CloudMessaging;49using Microsoft.Coyote.Tasks;50{51 {52 private string Id;53 private string Message;54 [OnEntry(nameof(InitOnEntry))]55 [OnEventDoAction(typeof(ClientRequestEvent), nameof(SendRequest))]56 [OnEventDoAction(typeof(ClientResponseEvent), nameof(HandleResponse))]57 {58 }59 private void InitOnEntry()60 {61 this.Id = Guid.NewGuid().ToString();62 this.Message = "Hello Server";63 this.Raise(new ClientRequestEvent { Id = this.Id, Message = this.Message });64 }

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 public static void Main(string[] args)10 {11 var client = new ClientRequestEvent("client1");12 client.SendRequest("Hello Server");13 Console.ReadLine();14 }15 }16}17using Microsoft.Coyote.Samples.CloudMessaging;18using System;19using System.Collections.Generic;20using System.Linq;21using System.Text;22using System.Threading.Tasks;23{24 {25 public static void Main(string[] args)26 {27 var server = new ServerRequestEvent("server1");28 server.SendRequest("Hello Client");29 Console.ReadLine();30 }31 }32}33using Microsoft.Coyote.Samples.CloudMessaging;34using System;35using System.Collections.Generic;36using System.Linq;37using System.Text;38using System.Threading.Tasks;39{40 {41 public static void Main(string[] args)42 {43 var client = new ClientRequestEvent("client1");44 client.SendRequest("Hello Server");45 Console.ReadLine();46 }47 }48}49using Microsoft.Coyote.Samples.CloudMessaging;50using System;51using System.Collections.Generic;52using System.Linq;53using System.Text;54using System.Threading.Tasks;55{56 {57 public static void Main(string[] args)58 {59 var server = new ServerRequestEvent("server1");60 server.SendRequest("Hello Client");61 Console.ReadLine();62 }63 }64}65using Microsoft.Coyote.Samples.CloudMessaging;66using System;67using System.Collections.Generic;68using System.Linq;69using System.Text;70using System.Threading.Tasks;71{72 {73 public static void Main(string[] args)74 {

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 public static void Main()10 {11 ClientRequestEvent e = new ClientRequestEvent(1, "Hello");12 Console.WriteLine(e.ToString());13 }14 }15}16using Microsoft.Coyote.Samples.CloudMessaging;17using System;18using System.Collections.Generic;19using System.Linq;20using System.Text;21using System.Threading.Tasks;22{23 {24 public static void Main()25 {26 ClientRequestEvent e = new ClientRequestEvent(1, "Hello");27 Console.WriteLine(e.ToString());28 }29 }30}31The type or namespace name 'CloudMessaging' does not exist in the namespace 'Microsoft.Coyote.Samples' (are you missing an assembly reference?)32The type or namespace name 'CloudMessaging' does not exist in the namespace 'Microsoft.Coyote.Samples' (are you missing an assembly reference?)

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using System;2using Microsoft.Coyote.Samples.CloudMessaging;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using System.Collections.Generic;6using System.Threading.Tasks;7using System.Text;8using System.Net.Http;9using Microsoft.Coyote.Tasks;10using System.Threading;11{12 {13 private int id;14 private int numRequests;15 private int numResponses;16 private int numFailures;17 private List<int> responses;18 private List<int> failures;19 private ClientRequestEvent request;20 private string serverUrl;21 private int timeout;22 private int minDelay;23 private int maxDelay;24 private Random random;25 public Client(int id, int numRequests, int timeout, int minDelay, int maxDelay, string serverUrl)26 {27 this.id = id;28 this.numRequests = numRequests;29 this.numResponses = 0;30 this.numFailures = 0;31 this.responses = new List<int>();32 this.failures = new List<int>();33 this.request = new ClientRequestEvent();34 this.serverUrl = serverUrl;35 this.timeout = timeout;36 this.minDelay = minDelay;37 this.maxDelay = maxDelay;38 this.random = new Random();39 }40 private async Task SendRequest()41 {42 this.request.Id = this.id;43 this.request.NumRequests = this.numRequests;44 this.request.NumResponses = this.numResponses;45 this.request.NumFailures = this.numFailures;46 this.request.Responses = this.responses;47 this.request.Failures = this.failures;48 this.request.Timeout = this.timeout;49 this.request.MinDelay = this.minDelay;50 this.request.MaxDelay = this.maxDelay;51 {52 using (var client = new HttpClient())53 {54 var content = new StringContent(this.request.ToString(), Encoding.UTF8, "application/json");55 var response = await client.PostAsync(this.serverUrl, content);56 this.numResponses++;57 this.responses.Add(this.id);58 }59 }60 catch (Exception)61 {62 this.numFailures++;63 this.failures.Add(this.id);64 }65 }66 protected override async Task OnInitializeAsync(Event initialEvent)67 {68 var e = (ClientStartEvent)initialEvent;69 this.id = e.Id;70 this.numRequests = e.NumRequests;71 {72 public static void Main(string[] args)73 {74 var server = new ServerRequestEvent("server1");75 server.SendRequest("Hello Client");76 Console.ReadLine();77 }78 }79}80using Microsoft.Coyote.Samples.CloudMessaging;81using System;82using System.Collections.Generic;83using System.Linq;84using System.Text;85using System.Threading.Tasks;86{87 {88 public static void Main(string[] args)89 {

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 public static void Main()10 {11 ClientRequestEvent e = new ClientRequestEvent(1, "Hello");12 Console.WriteLine(e.ToString());13 }14 }15}16using Microsoft.Coyote.Samples.CloudMessaging;17using System;18using System.Collections.Generic;19using System.Linq;20using System.Text;21using System.Threading.Tasks;22{23 {24 public static void Main()25 {26 ClientRequestEvent e = new ClientRequestEvent(1, "Hello");27 Console.WriteLine(e.ToString());28 }29 }30}31The type or namespace name 'CloudMessaging' does not exist in the namespace 'Microsoft.Coyote.Samples' (are you missing an assembly reference?)32The type or namespace name 'CloudMessaging' does not exist in the namespace 'Microsoft.Coyote.Samples' (are you missing an assembly reference?)

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using System;2using Microsoft.Coyote.Samples.CloudMessaging;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using System.Collections.Generic;6using System.Threading.Tasks;7using System.Text;8using System.Net.Http;9using Microsoft.Coyote.Tasks;10using System.Threading;11{12 {13 private int id;14 private int numRequests;15 private int numResponses;16 private int numFailures;17 private List<int> responses;18 private List<int> failures;19 private ClientRequestEvent request;20 private string serverUrl;21 private int timeout;22 private int minDelay;23 private int maxDelay;24 private Random random;25 public Client(int id, int numRequests, int timeout, int minDelay, int maxDelay, string serverUrl)26 {27 this.id = id;28 this.numRequests = numRequests;29 this.numResponses = 0;30 this.numFailures = 0;31 this.responses = new List<int>();32 this.failures = new List<int>();33 this.request = new ClientRequestEvent();34 this.serverUrl = serverUrl;35 this.timeout = timeout;36 this.minDelay = minDelay;37 this.maxDelay = maxDelay;38 this.random = new Random();39 }40 private async Task SendRequest()41 {42 this.request.Id = this.id;43 this.request.NumRequests = this.numRequests;44 this.request.NumResponses = this.numResponses;45 this.request.NumFailures = this.numFailures;46 this.request.Responses = this.responses;47 this.request.Failures = this.failures;48 this.request.Timeout = this.timeout;49 this.request.MinDelay = this.minDelay;50 this.request.MaxDelay = this.maxDelay;51 {52 using (var client = new HttpClient())53 {54 var content = new StringContent(this.request.ToString(), Encoding.UTF8, "application/json");55 var response = await client.PostAsync(this.serverUrl, content);56 this.numResponses++;57 this.responses.Add(this.id);58 }59 }60 catch (Exception)61 {62 this.numFailures++;63 this.failures.Add(this.id);64 }65 }66 protected override async Task OnInitializeAsync(Event initialEvent)67 {68 var e = (ClientStartEvent)initialEvent;69 this.id = e.Id;70 this.numRequests = e.NumRequests;71using System.Collections.Generic;72using System.Linq;73using System.Text;74using System.Threading.Tasks;75{76 {77 public static void Main(string[] args)78 {79 var server = new ServerRequestEvent("server1");80 server.SendRequest("Hello Client");81 Console.ReadLine();82 }83 }84}85using Microsoft.Coyote.Samples.CloudMessaging;86using System;87using System.Collections.Generic;88using System.Linq;89using System.Text;90using System.Threading.Tasks;91{92 {93 public static void Main(string[] args)94 {

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using Microsoft.Coyote.Samples.CloudMessaging;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 public static void Main()10 {11 ClientRequestEvent e = new ClientRequestEvent(1, "Hello");12 Console.WriteLine(e.ToString());13 }14 }15}16using Microsoft.Coyote.Samples.CloudMessaging;17using System;18using System.Collections.Generic;19using System.Linq;20using System.Text;21using System.Threading.Tasks;22{23 {24 public static void Main()25 {26 ClientRequestEvent e = new ClientRequestEvent(1, "Hello");27 Console.WriteLine(e.ToString());28 }29 }30}31The type or namespace name 'CloudMessaging' does not exist in the namespace 'Microsoft.Coyote.Samples' (are you missing an assembly reference?)32The type or namespace name 'CloudMessaging' does not exist in the namespace 'Microsoft.Coyote.Samples' (are you missing an assembly reference?)

Full Screen

Full Screen

ClientRequestEvent

Using AI Code Generation

copy

Full Screen

1using System;2using Microsoft.Coyote.Samples.CloudMessaging;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using System.Collections.Generic;6using System.Threading.Tasks;7using System.Text;8using System.Net.Http;9using Microsoft.Coyote.Tasks;10using System.Threading;11{12 {13 private int id;14 private int numRequests;15 private int numResponses;16 private int numFailures;17 private List<int> responses;18 private List<int> failures;19 private ClientRequestEvent request;20 private string serverUrl;21 private int timeout;22 private int minDelay;23 private int maxDelay;24 private Random random;25 public Client(int id, int numRequests, int timeout, int minDelay, int maxDelay, string serverUrl)26 {27 this.id = id;28 this.numRequests = numRequests;29 this.numResponses = 0;30 this.numFailures = 0;31 this.responses = new List<int>();32 this.failures = new List<int>();33 this.request = new ClientRequestEvent();34 this.serverUrl = serverUrl;35 this.timeout = timeout;36 this.minDelay = minDelay;37 this.maxDelay = maxDelay;38 this.random = new Random();39 }40 private async Task SendRequest()41 {42 this.request.Id = this.id;43 this.request.NumRequests = this.numRequests;44 this.request.NumResponses = this.numResponses;45 this.request.NumFailures = this.numFailures;46 this.request.Responses = this.responses;47 this.request.Failures = this.failures;48 this.request.Timeout = this.timeout;49 this.request.MinDelay = this.minDelay;50 this.request.MaxDelay = this.maxDelay;51 {52 using (var client = new HttpClient())53 {54 var content = new StringContent(this.request.ToString(), Encoding.UTF8, "application/json");55 var response = await client.PostAsync(this.serverUrl, content);56 this.numResponses++;57 this.responses.Add(this.id);58 }59 }60 catch (Exception)61 {62 this.numFailures++;63 this.failures.Add(this.id);64 }65 }66 protected override async Task OnInitializeAsync(Event initialEvent)67 {68 var e = (ClientStartEvent)initialEvent;69 this.id = e.Id;70 this.numRequests = e.NumRequests;

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Coyote automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used methods in ClientRequestEvent

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful