Ejemplo n.º 1
0
 public TemsInfoHeader(byte sequenceNo, TemsInfoMessageType type, uint messageLength)
 {
     startMarker        = START_MARKER;
     this.sequenceNo    = sequenceNo;
     messageType        = type;
     this.messageLength = messageLength;
 }
 private MessageInfo(TemsInfoMessageType type)
 {
     Timestamp   = DateTime.Now;
     MessageType = type;
 }
Ejemplo n.º 3
0
 private void SendMessage(TemsInfoMessageType type, object message)
 {
     byte[] content = ByteArrayHelper.GetByteArray(message);
     SendMessage(type, content);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Sends given message handling the sequence number.
        /// </summary>
        /// <param name="type">Type of the message.</param>
        /// <param name="message">Message payload.</param>
        /// <returns><c>True</c> if the message was sent successfully, otherwise <c>False</c>.</returns>
        private bool SendMessage(TemsInfoMessageType type, byte[] message)
        {
            bool result;

            if (sequenceNo < byte.MaxValue)
            {
                sequenceNo += 1;
            }
            else
            {
                sequenceNo = byte.MinValue;
            }

            if (State != ConnectionState.Error)
            {
                try {
                    Socket localSocket = this.socket;
                    if (localSocket != null && localSocket.Connected)
                    {
                        LogDebug("Sending message ({0}) ...", type);

                        byte[] header   = ByteArrayHelper.GetByteArray(new TemsInfoHeader(sequenceNo, type, (uint)message.Length));
                        byte[] composed = new byte[header.Length + message.Length];
                        header.CopyTo(composed, 0);
                        message.CopyTo(composed, header.Length);

                        localSocket.Send(composed);
                        LogDebug("... message sent");
                        result = true;
                    }
                    else if (localSocket == null)
                    {
                        ChangeState(ConnectionState.Error, "Failed sending message: Socket is NULL!");
                        result = false;
                    }
                    else
                    {
                        ChangeState(ConnectionState.Error, "Failed sending message: Socket is not connected!");
                        result = false;
                    }
                } catch (Exception e) {
                    ChangeState(ConnectionState.Error, "Failed sending message: {0}{1}{2}", e.Message, Environment.NewLine, e);
                    result = false;
                }
            }
            else
            {
                result = false;
            }

            if (!result)
            {
                if (sequenceNo > byte.MinValue)
                {
                    sequenceNo -= 1;
                }
                else
                {
                    sequenceNo = byte.MaxValue;
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        private void HandleReceivedMessage(TemsInfoMessageType type, byte[] content)
        {
            AbstractMessage message = null;

            switch (type)
            {
            case TemsInfoMessageType.Information:
                message = new InformationMessage(content);

                if (State == ConnectionState.Initializing)
                {
                    // Server accepted the client
                    // => Send interface configuration
                    SendConfigurationMessage(Configuration);

                    // => We're online
                    ChangeState(ConnectionState.Ok);
                }
                break;

            case TemsInfoMessageType.Error:
                ErrorMessage msgError = new ErrorMessage(content);
                if (!string.IsNullOrEmpty(msgError.Message))
                {
                    ChangeState(ConnectionState.Error, "Received error message with type \"{0}\": {1}", msgError.Code, msgError.Message);
                }
                else
                {
                    ChangeState(ConnectionState.Error, "Received error message with type \"{0}\"!", msgError.Code);
                }
                message = msgError;
                break;

            case TemsInfoMessageType.Heartbeat:
                message = new HeartbeatMessage(content);
                break;

            case TemsInfoMessageType.Vehicle:
                message = new VehicleMessage(content);
                break;

            case TemsInfoMessageType.ObjectStart:
                message = new ObjectStartMessage(content);
                break;

            case TemsInfoMessageType.ObjectStop:
                message = new ObjectStopMessage(content);
                break;

            case TemsInfoMessageType.ObjectLocation:
                message = new ObjectLocationMessage(content);
                break;

            case TemsInfoMessageType.Status:
                message = new StatusMessage(content);
                break;

            case TemsInfoMessageType.Data:
                message = new DataMessage(content);
                break;

            case TemsInfoMessageType.Value:
                message = new ValueMessage(content);
                break;

            default:
                Log("Received unexpected message of type \"{0}\" => Ignoring!", type);
                break;
            }

            if (message != null)
            {
                OnMessageReceived?.Invoke(message);
            }
        }