Example #1
0
            public Message Process(Message messageStream)
            {
                try {
                    lock (connector.proxy_lock) {
                        IMessageSerializer serializer = connector.MessageSerializer;

                        char code = '\0';
                        if (serviceType == ServiceType.Admin)
                        {
                            code = 'a';
                        }
                        else if (serviceType == ServiceType.Block)
                        {
                            code = 'b';
                        }
                        else if (serviceType == ServiceType.Manager)
                        {
                            code = 'm';
                        }
                        else if (serviceType == ServiceType.Root)
                        {
                            code = 'r';
                        }

                        // Write the message.
                        connector.pout.Write(code);
                        TcpServiceAddressHandler handler = new TcpServiceAddressHandler();
                        byte[] addressBytes = handler.ToBytes(address);
                        connector.pout.Write(handler.GetCode(typeof(TcpServiceAddress)));
                        connector.pout.Write(addressBytes.Length);
                        connector.pout.Write(addressBytes);
                        serializer.Serialize(messageStream, connector.pout.BaseStream);
                        connector.pout.Flush();

                        ResponseMessage baseResponse = (ResponseMessage)serializer.Deserialize(connector.pin.BaseStream, MessageType.Response);
                        return(new ResponseMessage((RequestMessage)messageStream, baseResponse));
                    }
                } catch (IOException e) {
                    // Probably caused because the proxy closed the connection when a
                    // timeout was reached.
                    throw new Exception("IO Error", e);
                }
            }
            public Message Process(Message messageStream)
            {
                try {
                    lock (connector.proxy_lock) {
                        IMessageSerializer serializer = connector.MessageSerializer;

                        char code = '\0';
                        if (serviceType == ServiceType.Admin)
                            code = 'a';
                        else if (serviceType == ServiceType.Block)
                            code = 'b';
                        else if (serviceType == ServiceType.Manager)
                            code = 'm';
                        else if (serviceType == ServiceType.Root)
                            code = 'r';

                        // Write the message.
                        connector.pout.Write(code);
                        TcpServiceAddressHandler handler = new TcpServiceAddressHandler();
                        byte[] addressBytes = handler.ToBytes(address);
                        connector.pout.Write(handler.GetCode(typeof(TcpServiceAddress)));
                        connector.pout.Write(addressBytes.Length);
                        connector.pout.Write(addressBytes);
                        serializer.Serialize(messageStream, connector.pout.BaseStream);
                        connector.pout.Flush();

                        ResponseMessage baseResponse = (ResponseMessage) serializer.Deserialize(connector.pin.BaseStream, MessageType.Response);
                        return new ResponseMessage((RequestMessage) messageStream, baseResponse);
                    }
                } catch (IOException e) {
                    // Probably caused because the proxy closed the connection when a
                    // timeout was reached.
                    throw new Exception("IO Error", e);
                }
            }