Beispiel #1
0
        static void RunClient(CancellationToken cancellationToken)
        {
            Task.Factory.StartNew(() =>
            {
                using (var client = new RequestSocket())
                {
                    client.Connect("tcp://localhost:5555");
                    var i = 0;

                    while (true)
                    {
                        Console.WriteLine("Client: Sending Hello");

                        var request = new NetMQMessage();
                        request.Append($"Hello {i++}");
                        request.AppendEmptyFrame();

                        client.SendMultipartMessage(request);

                        var response = client.ReceiveMultipartMessage();
                        var message  = response[0].ConvertToString();

                        Console.WriteLine($"Client: Received {message}");

                        if (cancellationToken.IsCancellationRequested)
                        {
                            return;
                        }
                    }
                }
            });
        }
        /// <summary>
        /// the int returned is the callID
        /// </summary>
        /// <returns></returns>
        public NetMQMessage CallMethod(NetMQMessage mqMessage)
        {
            lock (reqSocket)
            {
                var callID = GenerateCallID();

                var messageToSend = new NetMQMessage();
                messageToSend.Append(callID);
                while (false == mqMessage.IsEmpty)
                {
                    messageToSend.Append(mqMessage.Pop());
                }

                reqSocket.SendMultipartMessage(messageToSend);
                var message       = reqSocket.ReceiveMultipartMessage();
                var callIdFrame   = message.Pop();
                int recivedCallId = callIdFrame.ConvertToInt32();

                if (recivedCallId.Equals(callID))
                {
                    //everything should be just fine
                    return(message);
                }
                callIdInUse.Remove(callID);
            }

            throw new MethodFailedException();
            //return callID;
        }
Beispiel #3
0
    NetMQMessage sendRequest(RequestSocket socket, Dictionary <string, object> data)
    {
        NetMQMessage m = new NetMQMessage();

        m.Append("notify." + data["subject"]);

        using (var byteStream = new MemoryStream())
        {
            var ctx = new SerializationContext();
            ctx.CompatibilityOptions.PackerCompatibilityOptions = MsgPack.PackerCompatibilityOptions.None;
            var ser = MessagePackSerializer.Get <object>(ctx);
            ser.Pack(byteStream, data);
            m.Append(byteStream.ToArray());
        }

        socket.SendMultipartMessage(m);
        timeout = new System.TimeSpan(0, 0, 0, 1);

        NetMQMessage recievedMsg;

        recievedMsg = socket.ReceiveMultipartMessage();

        string msgType = recievedMsg[0].ConvertToString();

        if (recievedMsg.FrameCount > 1)
        {
            MsgPack.UnpackingResult <MsgPack.MessagePackObject> message = MsgPack.Unpacking.UnpackObject(recievedMsg[1].ToByteArray());
            MsgPack.MessagePackObject mmap = message.Value;
        }

        return(recievedMsg);
    }
Beispiel #4
0
        private Either <IError, CapabilityInfo> GetCapabilityFromServer(string name)
        {
            var message = RequestCreator.Create(_encryptor, MessageType.GetCapability,
                                                JsonConvert.SerializeObject(new CapabilityInfo(name)));

            _requestSocket.SendMultipartMessage(message);

            var response    = _requestSocket.ReceiveMultipartMessage();
            var messageType = (MessageType)response.Pop().ConvertToInt32();

            switch (messageType)
            {
            case MessageType.GrantCapability:
                var infoJson = _encryptor.Decrypt(response.Pop().ToByteArray());
                var info     = JsonConvert.DeserializeObject <CapabilityInfo>(infoJson);
                return(new Right <IError, CapabilityInfo>(info));

            case MessageType.Error:
                var errorContent = response.Pop().ToByteArray();
                return(new Left <IError, CapabilityInfo>(ErrorMessageReceiver.GetError(errorContent)));

            default:
                return(new Left <IError, CapabilityInfo>(new UnexpectedMessageError()));
            }
        }
Beispiel #5
0
        public static T RequestSendReceive <T>(this RequestSocket socket, IdKeyData ikd)
        {
            try
            {
                lock (socket)
                {
                    socket.SendMoreFrame(ikd.Id).SendMoreFrame(ikd.Key).SendFrame(ikd.Data);

                    NetMQMessage msg = null;
#if DEBUG1
                    msg = socket.ReceiveMultipartMessage();  // debug模式打开,不会超时
#else
                    socket.TryReceiveMultipartMessage(TimeSpan.FromSeconds(10), ref msg);
#endif
                    if (msg != null)
                    {
                        var result = JsonUtil.Deserialize <T>(msg[0].Buffer);
                        return(result);
                    }
                    else
                    {
                        throw new Exception("中心服务器请求失败!");
                    }
                }
            }
            catch (Exception ex)
            {
                socket = new RequestSocket();
                socket.Connect(MQConfig.ResponseServer);

                LogUtil.Warn("RequestSendReceive 异常:" + ex.StackTrace);
                return(default(T));
            }
        }
        private static bool GetAcknowledge(RequestSocket requestSocket)
        {
            var response    = requestSocket.ReceiveMultipartMessage();
            var messageType = (MessageType)response.Pop().ConvertToInt32();

            return(messageType == MessageType.Acknowledge);
        }
Beispiel #7
0
        public NetMQMessage SendRequest(NetMQMessage message)
        {
            RequestSocket request = new RequestSocket();

            request.Connect(RequestAddress);
            request.SendMultipartMessage(message);
            return(request.ReceiveMultipartMessage());
        }
Beispiel #8
0
        protected static ServermoduleID RegisterServermoduleByTargetType(TargetType target, ConnectionInfo connInfo)
        {
            if (null == connInfo)
            {
                throw new Exception("Does not allow null");
            }

            ServerMethod method = null;

            if (TargetType.SlaveOwnerServermodule.Equals(target)) //TODO expand
            {
                method = new RegisterSlaveOwnerServermoduleMethod()
                {
                    ConnectionInfo = connInfo
                };
            }

            //socket only used for getting the servermodule ID
            var setupSocket = new RequestSocket();

            setupSocket.Connect("tcp://" + net_mq_util.NetMqUtil.SERVER_MODULE_IP + ":" + net_mq_util.NetMqUtil.SERVER_MODULE_PORT);



            var localCallID = new Random().Next();

            if (null == method)
            {
                throw new Exception();
            }
            var encodedMethod = net_mq_encoder.NetMqEncoder.GenerateServerModuleMethodMessage(new ServermoduleID()
            {
                ID = ProtocolConstants.SERVERMODULE_ID_NOT_YET_ASSIGNED
            }, new CallID()
            {
                ID = localCallID
            }, method);

            setupSocket.SendMultipartMessage(encodedMethod);

            var response = setupSocket.ReceiveMultipartMessage();

            setupSocket.Close();

            var decodedReponse = net_mq_decoder.NetMqDecoder.DecodeResponse <ServermoduleID>(response);

            if (
                ProtocolConstants.SERVERMODULE_ID_NOT_YET_ASSIGNED.Equals(decodedReponse.Item2.Item1.ID) &&
                localCallID.Equals(decodedReponse.Item2.Item2.ID)
                )
            {
                return(decodedReponse.Item1);
            }
            else
            {
                throw new MethodFailedException("The SlaveOwner Setup method failed");
            }
        }
        public async Task <string> GetSmallPayloadAsync()
        {
            return(await Task.Run(() =>
            {
                _client.SendFrame(GetRequestTypeBytes(RequestType.GetSmallPayload));

                var response = _client.ReceiveMultipartMessage();

                if (response != null && response.FrameCount == 2)
                {
                    var requestType = ReadRequestType(response[0]);

                    if (requestType == RequestType.GetSmallPayload)
                    {
                        return response[1].ConvertToString();
                    }
                }

                return string.Empty;
            }));
        }
    NetMQMessage _sendRequestMessage(Dictionary <string, object> data)
    {
        NetMQMessage m = new NetMQMessage();

        m.Append("notify." + data["subject"]);

        using (var byteStream = new MemoryStream()) {
            var ctx = new SerializationContext();
            ctx.CompatibilityOptions.PackerCompatibilityOptions = MsgPack.PackerCompatibilityOptions.None;
            var ser = MessagePackSerializer.Get <object>(ctx);
            ser.Pack(byteStream, data);
            m.Append(byteStream.ToArray());
        }

        _requestSocket.SendMultipartMessage(m);

        NetMQMessage recievedMsg;

        recievedMsg = _requestSocket.ReceiveMultipartMessage();

        return(recievedMsg);
    }
Beispiel #11
0
        static void Main(string[] args)
        {
            try
            {
                //Thread thread = new Thread(new ThreadStart(start_zeromq_server));
                //thread.Start();

                start_zeromq_server();

                Console.WriteLine($"Soma {sum(5, 10)}");

                int i = 0;

                while (i < 4)
                {
                    using (var client = new RequestSocket("tcp://127.0.0.1:5555"))
                    {
                        Console.WriteLine("Client sending");
                        //client.SendMoreFrame("A").SendFrame("Hello");
                        byte[] msg = Encoding.ASCII.GetBytes("HEllo");
                        client.SendFrame(msg);

                        var resp = client.ReceiveMultipartMessage();
                        Console.WriteLine("Client received {0} frames", resp.FrameCount);
                    }
                    i++;
                    System.Threading.Thread.Sleep(1000);
                }

                using (var client = new RequestSocket("tcp://127.0.0.1:5555"))
                {
                    Console.WriteLine("closing socket");
                    //client.SendMoreFrame("A").SendFrame("Hello");
                    byte[] msg = Encoding.ASCII.GetBytes("EXIT");
                    client.SendFrame(msg);

                    var resp = client.ReceiveMultipartMessage();
                    Console.WriteLine("Client received {0} frames", resp.FrameCount);
                }

                //thread.Join();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
        }
        private static Maybe <string> RequestPublicKey(RequestSocket requestSocket)
        {
            var request = RequestCreator.Create(new NoEncryption(), MessageType.RequestPublicKey);

            requestSocket.SendMultipartMessage(request);

            var responseMessage = requestSocket.ReceiveMultipartMessage();

            Maybe <string> response = null;

            ResponseReader.Read <string>(new NoEncryption(), new NoEncryption(), responseMessage)
            .Case((Response <string> publicKay) => response = new Maybe <string>(publicKay.Payload))
            .Fold(_ => response = new Nothing <string>());

            return(response);
        }
        private T SendMultipartMessageWithReply <T>(Message request)
            where T : Message
        {
            _requestSocket.SendMultipartMessage(request.ToNetMQMessage());
            var raw   = _requestSocket.ReceiveMultipartMessage();
            var reply = Message.Parse(raw);

            if (!(reply is T))
            {
                throw new InvalidMessageException(
                          $"Unexpected reply message, {reply.GetType()}");
            }
            else
            {
                return((T)reply);
            }
        }
Beispiel #14
0
        public void Run()
        {
            var rnd = new Random(m_id);

            using (var worker = new RequestSocket())
            {
                worker.Connect(m_localBackendAddress);

                Console.WriteLine("[WORKER {0}] Connected & READY", m_id);

                // build READY message
                var msg   = new NetMQMessage();
                var ready = NetMQFrame.Copy(new[] { Program.WorkerReady });

                msg.Append(ready);
                msg.Push(NetMQFrame.Empty);
                msg.Push(new[] { m_id });

                // and send to broker
                worker.SendMultipartMessage(msg);

                while (true)
                {
                    // wait for a request - the REQ might be from a local client or a cloud request
                    var request = worker.ReceiveMultipartMessage();

                    if (request.FrameCount < 3)
                    {
                        Console.WriteLine("[WORKER {0}] ERR - received an empty message", m_id);
                        break; // something went wrong -> exit
                    }

                    Console.WriteLine("[WORKER {0}] received", m_id);

                    foreach (var frame in request)
                    {
                        Console.WriteLine("\t[{0}", frame.ConvertToString());
                    }

                    // simulate working for an arbitrary time < 2s
                    Thread.Sleep(rnd.Next(2000));
                    // simply send back what we received
                    worker.SendMultipartMessage(request);
                }
            }
        }
        private Maybe <Challenge> GetChallenge(RequestSocket requestSocket)
        {
            var challengeMessage = requestSocket.ReceiveMultipartMessage();

            var messageType = (MessageType)challengeMessage.Pop().ConvertToInt32();

            switch (messageType)
            {
            case MessageType.SendChallenge:
                var encryptedChallenge = challengeMessage.Pop().ToByteArray();
                return(new Maybe <Challenge>(
                           JsonConvert.DeserializeObject <Challenge>(_encryptor.Decrypt(encryptedChallenge))));

            default:
                return(new Nothing <Challenge>());
            }
        }
Beispiel #16
0
        private static void Main()
        {
            using (var client = new RequestSocket(">tcp://127.0.0.1:5559"))
            {
                for (var i = 0; i < 10; i++)
                {
                    var msg = new NetMQMessage();
                    msg.Append("Message_" + i);
                    client.SendMultipartMessage(msg);
                    Console.WriteLine("Sent Message {0}", msg.Last.ConvertToString());

                    var response = client.ReceiveMultipartMessage();
                    Console.WriteLine("Received Message {0}", response.Last.ConvertToString());
                }

                Console.ReadKey();
            }
        }
Beispiel #17
0
        static void Main(string[] args)
        {
            Console.WriteLine("Tier 1");

            var sendSocket = new RequestSocket();

            sendSocket.Connect("tcp://127.0.0.1:" + net_mq_tier_two.Program.listeningPort);

            sendSocket.SendMoreFrame("MethidID").SendFrame("Frame 2: ma last frame");
            Console.WriteLine("finished sending");

            var response = sendSocket.ReceiveMultipartMessage();

            Console.WriteLine("Yaay I got a response: ");
            Console.WriteLine(response.Pop().ConvertToString());
            //Console.WriteLine(response.Pop().ConvertToString());
            Console.ReadKey();
        }
Beispiel #18
0
        public void Run()
        {
            var rnd = new Random(m_id);

            using (var worker = new RequestSocket())
            {
                worker.Connect(m_localBackendAddress);

                Console.WriteLine("[WORKER {0}] Connected & READY", m_id);

                // build READY message
                var msg = new NetMQMessage();
                var ready = NetMQFrame.Copy(new[] { Program.WorkerReady });

                msg.Append(ready);
                msg.Push(NetMQFrame.Empty);
                msg.Push(new[] { m_id });

                // and send to broker
                worker.SendMultipartMessage(msg);

                while (true)
                {
                    // wait for a request - the REQ might be from a local client or a cloud request
                    var request = worker.ReceiveMultipartMessage();

                    if (request.FrameCount < 3)
                    {
                        Console.WriteLine("[WORKER {0}] ERR - received an empty message", m_id);
                        break; // something went wrong -> exit
                    }

                    Console.WriteLine("[WORKER {0}] received", m_id);

                    foreach (var frame in request)
                        Console.WriteLine("\t[{0}", frame.ConvertToString());

                    // simulate working for an arbitrary time < 2s
                    Thread.Sleep(rnd.Next(2000));
                    // simply send back what we received
                    worker.SendMultipartMessage(request);
                }
            }
        }
Beispiel #19
0
        /// <summary>
        ///     Invokes the capability and returns the return value
        /// </summary>
        /// <param name="argument">The invocation argument</param>
        /// <returns>The return value</returns>
        public Either <IError, TReturn> Invoke(TArgument argument)
        {
            _socket.SendMultipartMessage(CreateRequest(argument));

            var response    = _socket.ReceiveMultipartMessage();
            var messageType = (MessageType)response.Pop().ConvertToInt32();

            switch (messageType)
            {
            case MessageType.CapabilityInvocationResult:
                return(new Right <IError, TReturn>(
                           JsonConvert.DeserializeObject <TReturn>(_encryptor.Decrypt(response.Pop().ToByteArray()))));

            case MessageType.Error:
                var error = JsonConvert.DeserializeObject <ErrorCode>(response.Pop().ConvertToString());
                return(new Left <IError, TReturn>(ErrorUtilities.GetErrorByErrorCode(error)));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Beispiel #20
0
 public NetMQMessage recieveRequestMessage()
 {
     return(requestSocket.ReceiveMultipartMessage());
 }
        static void Main(string[] args)
        {
            Console.WriteLine("Tier 2");

            var reciveSocket = new ResponseSocket();
            //reciveSocket.Bind("tcp://0.0.0.0:" + listeningPort);



            var newRouterSocket = new RouterSocket();

            newRouterSocket.Bind("tcp://0.0.0.0:" + listeningPort);

            Console.WriteLine("Ready to recive!");

            var message = newRouterSocket.ReceiveMultipartMessage();

            var sendSocket = new RequestSocket();

            sendSocket.Connect("tcp://127.0.0.1:" + net_mq_tier_three.Program.listeningPort);



            List <NetMQFrame> frames = new List <NetMQFrame>();

            while (false == message.IsEmpty)
            {
                var frame = message.Pop();
                frames.Add(frame);
            }

            if ("MethidID" == frames[2].ConvertToString())
            {
                if (true) // debug
                {
                    foreach (var item in frames)
                    {
                        Console.WriteLine(item.ConvertToString());
                    }
                }

                var multiPartMessage = new NetMQMessage(frames);
                sendSocket.SendMultipartMessage(multiPartMessage);


                //now a response should be recived on the the same socket, and I need to figure out how to handle that.

                var responseMessage = sendSocket.ReceiveMultipartMessage();
                newRouterSocket.SendMultipartMessage(responseMessage);
            }
            else
            {
                //not a valid message
                Console.WriteLine("Something bad happened in tier 2");
            }



            //lets pretend I have validated where to send this message



            Console.ReadKey();
        }