Ejemplo n.º 1
0
        /// <summary>  Globally calls an <see cref="RPCMessage"/>, as if the given client had sent it. </summary>
        /// <param name="client"> Client to simulate call of method for </param>
        /// <param name="callback"> Callback to call </param>
        /// <param name="stuff"> Parameters for call </param>
        public void Call(Client client, RPCMessage.Handler callback, params System.Object[] stuff)
        {
            string     str = Client.FormatCall(callback, stuff);
            RPCMessage msg = RPCMessage.TCP(client, str);

            incoming.Enqueue(msg);
        }
Ejemplo n.º 2
0
        private void HandleMessage(RPCMessage msg)
        {
            RPCMessage.Handler handler = GetHandler(msg);

            try {
                handler?.Invoke(msg);
            } catch (Exception e) {
                Log.Warning($"Error occurred during {msg.rpcName}: ", e);
            }
        }
Ejemplo n.º 3
0
        /// <summary> Sends a message to remotely call a function handler on the client. </summary>
        /// <param name="callback"> Handler to call </param>
        /// <param name="stuff"> parameters to send into call </param>
        public void Call(RPCMessage.Handler callback, params System.Object[] stuff)
        {
            if (closed)
            {
                throw new InvalidOperationException("Cannot send messages on a closed Client");
            }
            string msg = FormatCall(callback, stuff);

            tcpOutgoing.Enqueue(msg);
        }
Ejemplo n.º 4
0
 public void Reply(RPCMessage.Handler callback, params System.Object[] stuff)
 {
     if (wasUDP)
     {
         sender.Hurl(callback, stuff);
     }
     else
     {
         sender.Call(callback, stuff);
     }
 }
Ejemplo n.º 5
0
        /// <summary> Formats a message into a string intended to be sent over the network. </summary>
        /// <param name="stuff"> Array of parameters to format. </param>
        /// <returns> String of all objects in <paramref name="stuff"/> formatted to be sent over the network. </returns>
        public static string FormatCall(RPCMessage.Handler callback, params System.Object[] stuff)
        {
            string time       = Pack.Base64(DateTime.UtcNow);
            string methodName = callback.Method.Name;
            string typeName   = callback.Method.DeclaringType.ShortName();
            string msg;

            if (stuff.Length > 0)
            {
                string[] strs = new string[stuff.Length];
                for (int i = 0; i < strs.Length; i++)
                {
                    strs[i] = stuff[i].ToString();
                }
                string rest = String.Join("" + RPCMessage.SEPARATOR, strs);
                msg = String.Join("" + RPCMessage.SEPARATOR, typeName, methodName, time, rest);
            }
            else
            {
                msg = String.Join("" + RPCMessage.SEPARATOR, typeName, methodName, time);
            }
            return(msg);
        }
Ejemplo n.º 6
0
 public void Forward(IEnumerable <Client> clients, RPCMessage.Handler callback, params System.Object[] stuff)
 {
 }