Example #1
0
    /// <summary>
    /// Performs the stored action. Returns true if the action was
    /// successful.
    /// </summary>
    public void DoAction()
    {
        if (SelectedAction.CanDo())
        {
            // Action about to start!
            OnActionStarted?.Invoke(SelectedActor, SelectedAction);

            // Do the action!
            SelectedAction.Do();

            // Notify senpai.
            OnActionComplete?.Invoke(SelectedActor, SelectedAction);
        }
    }
Example #2
0
        public static void SafeAsyncReceive(this Socket serviceSocket, byte[] buffer, int offset, int len, OnActionComplete completeCallback)
        {
            if (!serviceSocket.Connected)
            {
                OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
                return;
            }

            try
            {
                serviceSocket.BeginReceive(buffer, offset, len, SocketFlags.None, out var brerr, ar =>
                {
                    if (!serviceSocket.Connected)
                    {
                        OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
                        return;
                    }

                    try
                    {
                        var result = serviceSocket.EndReceive(ar, out var ererr);

                        if (result <= 0 || ererr != SocketError.Success)
                        {
                            OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
                            return;
                        }

                        completeCallback(serviceSocket, ar.CompletedSynchronously ? ActorOperationResult.CompletedSyncroniously : ActorOperationResult.Completed, result, buffer, offset);
                    }
                    catch (SocketException e)
                    {
#if DEBUG
                        Debug.WriteLine($"Socket exception on end receive operation: {e}");
                        OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
#endif
                    }
                    catch (ObjectDisposedException e)
                    {
#if DEBUG
                        Debug.WriteLine($"Socket disposed exception on end receive operation: {e}");
                        OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
#endif
                    }
                }, serviceSocket);
            }
            catch (SocketException e)
            {
#if DEBUG
                Debug.WriteLine($"Socket exception on attempt to receive operation: {e}");
                OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
#endif
            }
            catch (ObjectDisposedException e)
            {
#if DEBUG
                Debug.WriteLine($"Socket disposed exception on attempt to receive operation: {e}");
                OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
#endif
            }
        }
Example #3
0
 public static void SafeAsyncReceive(this Socket serviceSocket, byte[] buffer, OnActionComplete completeCallback)
 {
     SafeAsyncReceive(serviceSocket, buffer, 0, buffer.Length, completeCallback);
 }
Example #4
0
        public static void SafeAsyncReceive(this Socket serviceSocket, int len, OnActionComplete completeCallback)
        {
            var buffer = new byte[len];

            SafeAsyncReceive(serviceSocket, buffer, 0, len, completeCallback);
        }
Example #5
0
 private static void OperationWasCancelled(Socket serviceSocket, OnActionComplete action, byte[] buffer, int offset)
 {
     action(serviceSocket, ActorOperationResult.Canceled, 0, buffer, offset);
 }
Example #6
0
        public static void AsyncReceiveFixed(this Socket serviceSocket, byte[] buffer, int offset, int len, OnActionComplete completeCallback)
        {
            SafeAsyncReceive(serviceSocket, buffer, offset, len, (owner, result, i, bytes, bufferOffset) =>
            {
                if (!serviceSocket.Connected)
                {
                    OperationWasCancelled(serviceSocket, completeCallback, buffer, offset);
                    return;
                }

                if (i < len)
                {
                    AsyncReceiveFixed(serviceSocket, buffer, offset + i, len - i, completeCallback);
                }
                else
                {
                    completeCallback(serviceSocket, ActorOperationResult.Completed, len, buffer, offset);
                }
            });
        }