예제 #1
0
 private void HandleSocketOperationPacket(SocketOperationRequest socketOperationRequest)
 {
     if (socketOperationRequest.Request == SocketOperationRequest.OperationRequest.Finish)
     {
         if (!HostChannel.ActiveSocketOperations.ContainsKey(socketOperationRequest.OperationGuid))
         {
             //TODO: real exception
             Debug.Print("Could not locate socket operation");
         }
         HostChannel.ActiveSocketOperations[socketOperationRequest.OperationGuid].Initialize();
     }
 }
예제 #2
0
        public T CreateOperation <T>(Guid connectionGuid) where T : ISocketOperation
        {
            var operation = CreateOperation <T>();

            operation.ConnectionGuid = connectionGuid;
            lock (_lockObj)
                ActiveSocketOperations.Add(operation.OperationGuid, operation);
            var operationRequest = new SocketOperationRequest
            {
                OperationGuid = operation.OperationGuid,
                Request       = SocketOperationRequest.OperationRequest.Create,
                OperationId   = operation.OperationId
            };

            Send(operationRequest, operation.ConnectionGuid);
            return(operation);
        }
예제 #3
0
        public void UnregisterOperation(Guid operationGuid)
        {
            if (!ActiveSocketOperations.ContainsKey(operationGuid))
            {
                return;
            }
            var operationRequest = new SocketOperationRequest
            {
                OperationGuid = operationGuid,
                Request       = SocketOperationRequest.OperationRequest.Close,
                OperationId   = ActiveSocketOperations[operationGuid].OperationId
            };

            Send(operationRequest, operationGuid);
            lock (_lockObj)
                ActiveSocketOperations.Remove(operationGuid);
            Debug.Print("Closed operation with GUID: " + operationGuid);
        }
예제 #4
0
        public void RegisterOperation(ISocketOperation operation)
        {
            if (operation.ConnectionGuid == Guid.Empty)
            {
                //TODO: real exception
                Debug.Print("Socket operation not attached");
            }
            lock (_lockObj)
                ActiveSocketOperations.Add(operation.OperationGuid, operation);
            var operationRequest = new SocketOperationRequest
            {
                OperationGuid = operation.OperationGuid,
                Request       = SocketOperationRequest.OperationRequest.Create,
                OperationId   = operation.OperationId
            };

            Send(operationRequest, operation.ConnectionGuid);
        }
예제 #5
0
 private void HandleSocketOperationPacket(SocketOperationRequest socketOperationRequest)
 {
     if (socketOperationRequest.Request == SocketOperationRequest.OperationRequest.Create)
     {
         var operation =
             (ISocketOperation)Activator.CreateInstance(OperationTable[socketOperationRequest.OperationId]);
         operation.OperationGuid  = socketOperationRequest.OperationGuid;
         operation.HostChannel    = this;
         operation.ConnectionGuid = Client.Identity.Guid;
         ActiveSocketOperations.Add(socketOperationRequest.OperationGuid, operation);
         var operationRequest = new SocketOperationRequest
         {
             OperationGuid = socketOperationRequest.OperationGuid,
             Request       = SocketOperationRequest.OperationRequest.Finish
         };
         Send(operationRequest);
         Debug.Print("New SocketOperation created with GUID: " + socketOperationRequest.OperationGuid);
     }
     else if (socketOperationRequest.Request == SocketOperationRequest.OperationRequest.Close)
     {
         ActiveSocketOperations.Remove(socketOperationRequest.OperationGuid);
     }
 }