Dispatch() public method

public Dispatch ( ) : void
return void
Example #1
0
 public void ProcessCall(Message.Call call)
 {
     var processCall = processors[call.MethodId].Call;
     if (processCall != null)
     {
         processCall(call);
     }
     else
     {
         var response = new Message(call.Data, MessageType.Exception);
         RemotingException x = new RemotingException(RemotingException.ExceptionType.UnknownMethod, "Invalid method id: '" + call.MethodId + "'");
         response.Serializer.WriteI32(call.Id);
         x.Write(response.Serializer);
         response.Dispatch();
     }
 }
Example #2
0
        public unsafe void DispatchChanges()
        {
            foreach (var reference in referencesChanged)
            {
                var bitFieldsCount = reference.DataObject.BaseDataObjectCount + 1;
                var bitFields = stackalloc BitField[bitFieldsCount];

                reference.DataObject.GetResetChanges(bitFields);

                foreach (var peer in reference.Subscribers)
                {
                    var peerData = new Message(peer, remotingManager, reference.LocalId, 0, MessageType.ReferenceChanges);
                    // TODO: Optimize this. Dont't serialize again for each peer.
                    reference.DataObject.Write(peerData.Serializer, bitFields, bitFieldsCount, peerData);
                    peerData.Dispatch();
                }
            }
        }
Example #3
0
        private void ProcessContextRequest(Message data)
        {
            var remoteId = data.Header.RemoteId;
            var contextId = Loader.ReadContextId(data);

            ContextInfo context;
            if (!contextIdToContext.TryGetValue(contextId, out context))
            {
                //TODO: check data.Peer permissions
                var task = Loader.LoadContext(contextId);
                task.ContinueWith(t =>
                {
                    if(t.Result == null)
                        throw new Exception("Context could not be loaded.");

                    var cxt = GetCreateContext(t.Result);
                    var res = new Message(data.Peer, remotingManager, cxt.LocalId, remoteId, MessageType.ContextResponse);
                    res.Dispatch();
                });
                return;
            }

            var response = new Message(data.Peer, remotingManager, context.LocalId, remoteId, MessageType.ContextResponse);
            response.Dispatch();
        }
Example #4
0
 public void RequestContext(RemotingPeer peer, Assembly assembly)
 {
     var context = GetCreateContext(assembly);
     var request = new Message(peer, remotingManager, context.LocalId, 0, MessageType.ContextRequest);
     context.ContextId.Write(request);
     request.Dispatch();
 }
Example #5
0
        public void Subscribe(IObservableDataObject dataObject, RemotingPeer peer, int remoteId)
        {
            Reference reference;
            if (!dataObjectToReference.TryGetValue(dataObject, out reference))
                reference = CreateReference(dataObject);

            reference.Subscription = new Subscription(peer, remoteId);

            subscriptionToReference.Add(reference.Subscription, reference);

            var data = new Message(peer, remotingManager, reference.LocalId, remoteId, MessageType.ReferenceSubscribe);
            data.Dispatch();
        }