Ejemplo n.º 1
0
        private StreamConnectionThreadData[] OpenStreamChannel(UpDevice device, Call serviceCall, CallContext messageContext)
        {
            StreamConnectionThreadData[] data = null;

            //Channel type decision
            string netType = null;

            if (serviceCall.channelType != null)
            {
                netType = serviceCall.channelType;
            }
            else
            {
                UpNetworkInterface network = GetAppropriateInterface(device);
                netType = network.netType;
            }

            int channels = serviceCall.channels;

            data = new StreamConnectionThreadData[channels];
            string[] channelIDs = new string[channels];

            for (int i = 0; i < channels; i++)
            {
                NetworkDevice networkDevice = GetAvailableNetworkDevice(netType);
                channelIDs[i] = Util.GetPort(networkDevice.networkDeviceName);
                StreamConnectionThreadData thread = new StreamConnectionThreadData(this, messageContext, networkDevice);
                thread.thread.Start();
                data[i] = thread;
            }

            serviceCall.channelIDs  = channelIDs;
            serviceCall.channelType = netType;

            return(data);
        }
Ejemplo n.º 2
0
 private Response RemoteServiceCall(
     UpDevice target,
     Call serviceCall,
     StreamConnectionThreadData[] streamData,
     CallContext messageContext)
 {
     try
     {
         logger.Log("Call service on " + target.name + ": " + Json.Serialize(serviceCall.ToJSON()));
         // Encodes and sends call message.
         string msg = Json.Serialize(serviceCall.ToJSON()) + "\n";
         Response r;
         string responseMsg = SendMessage(msg, target);
         if (responseMsg != null)
         {
             r = Response.FromJSON(Json.Deserialize(responseMsg));
             r.messageContext = messageContext;
             return r;
         }
         else
             throw new System.Exception("No response received from call.");
     }
     catch (System.Exception e)
     {
         logger.LogError("Error on remote service call: " + e.ToString());
         CloseStreams(streamData);
         throw new ServiceCallException(e);
     }
 }
Ejemplo n.º 3
0
        private StreamConnectionThreadData[] OpenStreamChannel(UpDevice device, Call serviceCall, CallContext messageContext)
        {
            StreamConnectionThreadData[] data = null;

            //Channel type decision
            string netType = null;
            if (serviceCall.channelType != null)
                netType = serviceCall.channelType;
            else
            {
                UpNetworkInterface network = GetAppropriateInterface(device);
                netType = network.netType;
            }

            int channels = serviceCall.channels;
            data = new StreamConnectionThreadData[channels];
            string[] channelIDs = new string[channels];

            for (int i = 0; i < channels; i++)
            {
                NetworkDevice networkDevice = GetAvailableNetworkDevice(netType);
                channelIDs[i] = Util.GetPort(networkDevice.networkDeviceName);
                StreamConnectionThreadData thread = new StreamConnectionThreadData(this, messageContext, networkDevice);
                thread.thread.Start();
                data[i] = thread;
            }

            serviceCall.channelIDs = channelIDs;
            serviceCall.channelType = netType;

            return data;
        }
Ejemplo n.º 4
0
        private Response LocalServiceCall(
            Call serviceCall,
            StreamConnectionThreadData[] streamData,
            CallContext messageContext)
        {
            logger.Log("Handling Local ServiceCall");

            try
            {
                Response response = HandleServiceCall(serviceCall, messageContext);
                response.messageContext = messageContext;

                return response;
            }
            catch (System.Exception e)
            {
                // if there was an opened stream channel, it must be closed
                CloseStreams(streamData);
                throw new ServiceCallException(e);
            }
        }
Ejemplo n.º 5
0
 private void CloseStreams(StreamConnectionThreadData[] streamData)
 {
     if (streamData != null)
     {
         foreach (var s in streamData)
             s.thread.Abort();
     }
 }