예제 #1
0
        public static NetworkMessageBase ReceiveNetworkMsg(this NetMQSocket socket, TimeSpan timeout)
        {
            var inMsg = new Msg();

            inMsg.InitEmpty();

            try
            {
                socket.TryReceive(ref inMsg, timeout);
            }
            catch (Exception)
            {
                return(null);
            }

            var str = inMsg.Size > 0
                                ? Encoding.GetString(inMsg.Data, 0, inMsg.Size)
                                : string.Empty;

            inMsg.Close();

            if (!string.IsNullOrWhiteSpace(str))
            {
                Debug.WriteLine("[R <<<] " + str);
            }

            return(NetworkMessageCoding.Decode(str));
        }
예제 #2
0
        public static bool SendNetworkMsg(this NetMQSocket socket, NetworkMessageBase message,
                                          uint timeoutMilliSeconds = GlobalConstants.StandardSendingTimeout)
        {
            var encodedMessage = NetworkMessageCoding.Encode(message);

            var outMsg = new Msg();

            outMsg.InitPool(Encoding.GetByteCount(encodedMessage));
            Encoding.GetBytes(encodedMessage, 0, encodedMessage.Length, outMsg.Data, 0);

            bool sendSuccessful;

            try
            {
                sendSuccessful = socket.TrySend(ref outMsg, TimeSpan.FromMilliseconds(timeoutMilliSeconds), false);

                Debug.WriteLine("[T >>>] " + encodedMessage);
            }
            catch (Exception)
            {
                sendSuccessful = false;
            }

            outMsg.Close();
            return(sendSuccessful);
        }