Example #1
0
    private void NetworkOnMessageReceived(MessageTag messageTag, IDeserializer reader)
    {
        switch (messageTag)
        {
        case MessageTag.StartSimulation:
            var pkt = new Init();
            pkt.Deserialize(reader);
            Time.fixedDeltaTime = 1f / pkt.TargetFPS;


            _simulation.Init(pkt.Seed);

            _simulationStarted = true;
            break;

        case MessageTag.Frame:
            //Server sends in ReliableOrdered-mode, so we only care about the latest frame
            //Also possible could be high-frequency unreliable messages and use redundant frames to fill up a framebuffer in case of frame loss during transmission
            _simulation.AddFrame(new Frame {
                Commands = _inputParser.DeserializeInput(reader)
            });

            //TODO: only for debugging, frames should be buffered & later executed in FixedUpdate
            _simulation.Simulate();

            LockstepNetwork.Instance.SendHashCode(new HashCode
            {
                FrameNumber = _simulation.FrameCounter,
                Value       = _simulation.HashCode
            });
            break;
        }
    }
 private byte[] CreateBufferForSend(MessageTag messageTag, IMessage message)
 {
     using (var memoryStream = new MemoryStream())
     {
         return(CreateBufferForSend(memoryStream, messageTag, message));
     }
 }
 private byte[] CreateBufferForSend(MemoryStream stream, MessageTag messageTag, IMessage message)
 {
     byte[] preabmleBuffer = new byte[] { (byte)messageTag };
     stream.Write(preabmleBuffer, 0, preabmleBuffer.Length);
     message.WriteDelimitedTo(stream);
     return(stream.ToArray());
 }
Example #4
0
 static UnknownFieldCollection ReadGroup(MessageTag startTag, MessageReader reader)
 {
     var group = new UnknownFieldCollection();
     for(int stop = startTag.WithWireType(WireType.EndGroup), tag = reader.ReadInt32(); tag != stop; tag = reader.ReadInt32())
         group.Add(new MessageTag(tag), reader);
     return group;
 }
        private IMessage BuildProtobufOfTag(MessageTag tag)
        {
            switch (tag)
            {
            case MessageTag.kHeartbeatPingTag:
                return(new HeartbeatPing());

            case MessageTag.kHeartbeatAckTag:
                return(new HeartbeatAck());

            case MessageTag.kLoginRequestTag:
                return(new LoginRequest());

            case MessageTag.kLoginResponseTag:
                return(new LoginResponse());

            case MessageTag.kCloseTag:
                return(new Close());

            case MessageTag.kIqStanzaTag:
                return(new IqStanza());

            case MessageTag.kDataMessageStanzaTag:
                return(new DataMessageStanza());

            case MessageTag.kStreamErrorStanzaTag:
                return(new StreamErrorStanza());

            default:
                return(null);
            }
        }
        private void OnGotMessageTag(Stream stream)
        {
            messageTag = (MessageTag)stream.ReadByte();

            Debug.WriteLine($"Received proto of type {messageTag}");

            OnGotMessageSize(stream);
        }
Example #7
0
        public async Task WhenReceiveHeartBeatPing_WhileListeningForPushNotification_ShouldSendBackHeartBeatAck()
        {
            FakeFcmConnection connection = null;
            bool sentHeartBeatAck        = false;
            bool expectHeartBeatAck      = true;

            connection = new FakeFcmConnection((ctoken) =>
            {
                byte[] buffer = new byte[2048];
                byte[] fakeData;

                fakeData = new byte[] { 41 };
                connection.SimulateDataReceived(fakeData);
                fakeData = new byte[] { 3, 62, 10, 18, 99, 104, 114, 111, 109, 101, 45, 54, 51, 46, 48, 46, 51, 50, 51, 52, 46, 48, 18, 31, 117, 115, 101, 114, 64, 102, 105, 114, 101, 98, 97, 115, 101, 46, 99, 111, 109, 47, 110, 111, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 115, 48, 1, 64, 192, 216, 151, 177, 230, 46, };
                connection.SimulateDataReceived(fakeData);

                fakeData = new byte[] { 7, 10, 16, 1, 26, 0, 58, 4, 8, 12, 18, 0, };
                connection.SimulateDataReceived(fakeData);

                expectHeartBeatAck = true;
                fakeData           = new byte[] { 0, 0 };
                connection.SimulateDataReceived(fakeData);
                expectHeartBeatAck = false;

                return(Task.CompletedTask);
            });

            connection.DataSent += (s, data) =>
            {
                if (expectHeartBeatAck == true)
                {
                    using (var memoryStream = new MemoryStream(data))
                    {
                        MessageTag currentTag = (MessageTag)memoryStream.ReadByte(); // read messageTag byte

                        if (currentTag == MessageTag.kHeartbeatAckTag)
                        {
                            var instance = HeartbeatAck.Parser.ParseDelimitedFrom(memoryStream);
                            if (instance != null)
                            {
                                sentHeartBeatAck = true;
                            }
                        }
                    }
                }
            };

            FcmListener listener = new FcmListener(connection);
            await listener.ConnectAsync();

            await listener.LoginAsync(0, 0);

            await listener.ListenAsync();

            Assert.IsTrue(sentHeartBeatAck);
        }
        private static UnknownFieldCollection ReadGroup(MessageTag startTag, MessageReader reader)
        {
            UnknownFieldCollection group = new UnknownFieldCollection();

            for (int stop = startTag.WithWireType(WireType.EndGroup),
                 tag = reader.ReadInt32(); tag != stop; tag = reader.ReadInt32())
            {
                group.Add(new MessageTag(tag), reader);
            }

            return(group);
        }
        internal string DecodeMessageTag(byte[] InputData, int Index)
        {
            var Tag = new MessageTag(InputData, Index);
            KeyValuePair <string, MsgTagParamType> MessageTagInfo = MessageTagDictionary.ElementAt(Tag.Group).ElementAt(Tag.Index);

            string Argument = "";

            switch (MessageTagInfo.Value)
            {
            case MsgTagParamType.U8:
                Argument = GetDataString(Tag.GetParamU8(), DataType.HexByte);
                break;

            case MsgTagParamType.U16:
                Argument = GetDataString(Tag.GetParamU16(), DataType.HexUShort);
                break;
                // TODO: Rest of types
            }

            return(string.Format(MessageTagInfo.Key, Argument)); // TODO: Argument needs to be an array
        }
Example #10
0
        /// <summary>
        ///     Send a message with a specified tag to the log console on MainWindow.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="type"></param>
        public static void sendMessage(string message, MessageTag tag)
        {
            //Form form = MainWindow.ActiveForm;
            //if (form != null)
            //{
            //    if (form.GetType() == typeof(MainWindow))
            //    {
            //        mainWind = (MainWindow)form;
            //    }
            //    else
            //    {
            //        Console.WriteLine("Foreign instance of type <" + form.GetType().Name + "> cannot send messages.");
            //        return;
            //    }
            //}
            //else
            //{
            //    Console.WriteLine("MainWindow has been closed.");
            //    Manager.stopJob(false);
            //}

            try
            {
                if (mainWind != null && !mainWind.IsDisposed && !mainWind.Disposing)
                {
                    mainWind.addMessage(message, tag);
                }
                else
                {
                    //Manager.stopJob(false);
                }
            }
            catch (StackOverflowException)
            {
                // Doesn't matter
            }
        }
Example #11
0
        private static MessageEnvelope Deserialize(byte[] bytes, string exchange, ulong deliveryTag, bool redelivered, string routingKey, IBasicProperties basicProperties, MessageClientBase messageClient)
        {
            var envelope = MessageEnvelope.Deserialize(bytes, messageClient);

            envelope.Exchange        = exchange;
            envelope.DeliveryTag     = deliveryTag;
            envelope.Redelivered     = redelivered;
            envelope.RoutingKey      = routingKey;
            envelope.BasicProperties = basicProperties;

            if (basicProperties != null && basicProperties.Headers != null)
            {
                List <MessageTag> tags = new List <MessageTag>();

                foreach (var key in basicProperties.Headers.Keys)
                {
                    tags.Add(MessageTag.DemangleTag(key));
                }

                envelope.Tags = tags.ToArray();
            }

            return(envelope);
        }
        private void GetNextMessage()
        {
            messageTag  = 0;
            messageSize = 0;
            state       = ProcessingState.MCS_TAG_AND_SIZE;
            var oldStream = dataStream;

            // release the memory for read bytes
            long unreadBytesCount = dataStream.UnreadBytesCount();

            if (unreadBytesCount > 0)
            {
                byte[] unreadBytes = new byte[unreadBytesCount];

                dataStream.Read(unreadBytes, 0, unreadBytes.Length);
                dataStream = new MemoryStream(unreadBytes);
            }
            else
            {
                dataStream = new MemoryStream();
            }

            oldStream.Dispose();
        }
Example #13
0
 public UnknownFieldString(MessageTag tag, MessageReader reader)
     : base(tag, reader.CreateSubReader().ReadString())
 {
 }
 public UnknownFieldVarint(MessageTag tag, long value)
     : base(tag, value)
 {
 }
 public UnknownFieldVarint(MessageTag tag, MessageReader reader)
     : base(tag, reader.ReadInt64())
 {
 }
Example #16
0
 public static dynamic EntitytoJSON(dynamic entity, Type type)
 {
     if (type == typeof(Channel))
     {
         Channel channel = (Channel)entity;
         return(new {
             id = channel.ThreadId,
             slug = channel.Slug,
             title = channel.Title,
             type = EnumToString(channel.Type, typeof(Channel.Types)),
             description = channel.Description,
             membership = EntitytoJSON(channel.Membership, typeof(Membership)),
             memberships = EntitytoJSON(channel.Memberships ?? new Membership[] { }, typeof(Membership[])),
             manager_user = channel.ManagerUser,
             manager_details = EntitytoJSON(channel.ManagerDetails, typeof(User)),
             members = channel.Members
         });
     }
     else if (type == typeof(Channel[]))
     {
         List <dynamic> channels = new List <dynamic>();
         foreach (var channel in (entity as Channel[]))
         {
             channels.Add(EntitytoJSON(channel, typeof(Channel)));
         }
         return(channels.ToArray());
     }
     else if (type == typeof(FriendRequest))
     {
         FriendRequest friendrequest = (FriendRequest)entity;
         return(new {
             requester = friendrequest.Requester,
             addresser = friendrequest.Addresser,
             friend_detail = EntitytoJSON(friendrequest.FriendDetails, typeof(User)),
             request_date = friendrequest.RequestDate.ToUniversalTime(),
             approval_date = friendrequest.ApprovalDate.ToUniversalTime(),
             friendship_end_date = friendrequest.FriendshipEndDate.ToUniversalTime(),
             active = friendrequest.Active
         });
     }
     else if (type == typeof(FriendRequest[]))
     {
         List <dynamic> friendrequests = new List <dynamic>();
         foreach (var friendrequest in (entity as FriendRequest[]))
         {
             friendrequests.Add(EntitytoJSON(friendrequest, typeof(FriendRequest)));
         }
         return(friendrequests);
     }
     else if (type == typeof(Entities.Friendship))
     {
         Entities.Friendship friendship = (Entities.Friendship)entity;
         return(new {
             id = friendship.FriendshipId,
             requester_user = friendship.Requester,
             addresser_user = friendship.Addresser,
             request_date = friendship.RequestDate.ToUniversalTime(),
             approval_date = friendship.ApprovalDate.ToUniversalTime(),
             friendship_end_date = friendship.FriendshipEndDate.ToUniversalTime(),
             active = friendship.Active
         });
     }
     else if (type == typeof(Entities.Friendship[]))
     {
         List <dynamic> friendships = new List <dynamic>();
         foreach (var friendship in (entity as Entities.Friendship[]))
         {
             friendships.Add(EntitytoJSON(friendship, typeof(Entities.Friendship)));
         }
         return(friendships.ToArray());
     }
     else if (type == typeof(Membership))
     {
         Membership membership = (Membership)entity;
         return(new {
             id = membership.MembershipId,
             thread = membership.ThreadId,
             user = membership.UserId,
             last_seen_date = membership.LastSeenDate.ToUniversalTime(),
             last_seen_message = membership.LastSeenMessageId,
             active = membership.IsParticipant,
             join_date = membership.JoinDate.ToUniversalTime(),
             user_details = EntitytoJSON(membership.UserDetails, typeof(User)),
             unchecked_count = membership.UncheckedCount
         });
     }
     else if (type == typeof(Membership[]))
     {
         List <dynamic> memberships = new List <dynamic>();
         foreach (var membership in (entity as Membership[]))
         {
             memberships.Add(EntitytoJSON(membership, typeof(Membership)));
         }
         return(memberships.ToArray());
     }
     else if (type == typeof(Message))
     {
         Message message = (Message)entity;
         return(new {
             id = message.MessageId,
             thread = message.ThreadId,
             user_sender = message.UserId,
             contents = message.Contents,
             sent_date = message.SentDate.ToUniversalTime(),
             type = EnumToString(message.Type, typeof(Message.Types)),
             tags = EntitytoJSON(message.Tags ?? new MessageTag[] { }, typeof(MessageTag[]))
         });
     }
     else if (type == typeof(Message[]))
     {
         List <dynamic> messages = new List <dynamic>();
         foreach (var message in (entity as Message[]))
         {
             messages.Add(JSONtoEntity(message, typeof(Message)));
         }
         return(messages.ToArray());
     }
     else if (type == typeof(MessageTag))
     {
         MessageTag tag = (MessageTag)entity;
         return(new {
             tagger_user = tag.TaggedUserId,
             message = tag.MessageId,
             placeholder_position = tag.PlaceholderPosition,
             tagged_user_details = EntitytoJSON(tag.TaggedUserDetails, typeof(User))
         });
     }
     else if (type == typeof(MessageTag[]))
     {
         List <dynamic> messagetags = new List <dynamic>();
         foreach (var messagetag in (entity as MessageTag[]))
         {
             messagetags.Add(JSONtoEntity(messagetag, typeof(MessageTag)));
         }
         return(messagetags.ToArray());
     }
     else if (type == typeof(PrivateDiscussion))
     {
         PrivateDiscussion privatediscussion = (PrivateDiscussion)entity;
         return(new {
             id = privatediscussion.ThreadId,
             slug = privatediscussion.Slug,
             title = privatediscussion.Title,
             type = EnumToString(privatediscussion.Type, typeof(PrivateDiscussion.Types)),
             description = privatediscussion.Description,
             creator_user = privatediscussion.CreatorUser,
             manager_user = privatediscussion.ManagerUser,
             manager_details = EntitytoJSON(privatediscussion.ManagerDetails, typeof(User)),
             membership = EntitytoJSON(privatediscussion.Membership, typeof(Membership)),
             memberships = EntitytoJSON(privatediscussion.Memberships, typeof(Membership[])),
             interlocutor_membership = EntitytoJSON(privatediscussion.InterlocutorMembership, typeof(Membership))
         });
     }
     else if (type == typeof(PrivateDiscussion[]))
     {
         List <dynamic> privatediscussions = new List <dynamic>();
         foreach (var privatediscussion in (entity as PrivateDiscussion[]))
         {
             privatediscussions.Add(EntitytoJSON(privatediscussion, typeof(PrivateDiscussion)));
         }
         return(privatediscussions.ToArray());
     }
     else if (type == typeof(Thread))
     {
         Thread thread = (Thread)entity;
         return(new {
             id = thread.ThreadId,
             slug = thread.Slug,
             title = thread.Title,
             type = EnumToString(thread.Type, typeof(Thread.Types)),
             description = thread.Description,
             creator_user = thread.CreatorUser,
             manager_user = thread.ManagerUser,
             manager_details = EntitytoJSON(thread.ManagerDetails, typeof(User)),
             membership = EntitytoJSON(thread.Membership, typeof(Membership)),
             memberships = EntitytoJSON(thread.Memberships, typeof(Membership[]))
         });
     }
     else if (type == typeof(Thread[]))
     {
         List <dynamic> threads = new List <dynamic>();
         foreach (var thread in (entity as Thread[]))
         {
             threads.Add(EntitytoJSON(thread, typeof(PrivateDiscussion)));
         }
         return(threads.ToArray());
     }
     else if (type == typeof(User))
     {
         User user = (User)entity;
         return(new {
             id = user.UserId,
             username = user.Username,
             first_name = user.FirstName,
             last_name = user.LastName,
             type = EnumToString(user.Type, typeof(User.Types)),
         });
     }
     else if (type == typeof(User[]))
     {
         List <dynamic> users = new List <dynamic>();
         foreach (var user in (entity as User[]))
         {
             users.Add(EntitytoJSON(user, typeof(User)));
         }
         return(users.ToArray());
     }
     else
     {
         throw new Exception("Unhandled Type " + type.ToString());
     }
 }
 public UnknownFieldString(MessageTag tag, MessageReader reader)
     : base(tag, reader.CreateSubReader().ReadString())
 {
 }
Example #18
0
        public byte[] ToMessage(ILTag payload)
        {
            var payloadBytes = payload.EncodedBytes;

            return(MessageTag.AsILInt().Append(((ulong)payloadBytes.Length).AsILInt()).Append(payloadBytes));
        }
Example #19
0
 public Request(Sim author, MessageTag message)
 {
     AuthorTag = author.Behavior.Tag;
     Message   = message;
     Author    = author;
 }
 public UnknownFieldFixed32(MessageTag tag, MessageReader reader)
     : base(tag, reader.ReadFixedInt32())
 {
 }
 public UnknownFieldGroup(MessageTag tag, MessageReader reader)
     : base(tag, ReadGroup(tag, reader))
 {
 }
Example #22
0
        /// <summary>
        /// Write the tag serialized data using the supplied writer.
        /// </summary>
        /// <remarks>
        /// This is a really KLUDGY routine. Even though it deals with primitive
        /// types it has knowledge of what those types mean. For example the UInt16ArrayTag
        /// doesn't have a length value written, but the UInt32ArrayTag does. This is
        /// a very brittle solution to this problem and needs to be fixed. The solution is
        /// to have a serialize method for each tag type (uggh) - so you see why I took
        /// this shortcut.
        /// </remarks>
        /// <param name="tag"></param>
        /// <param name="writer"></param>
        private static void SerializeTag(BBeBTag tag, BBeBinaryWriter writer)
        {
            ushort id = (ushort)(0xf500 + tag.Id);

            if (tag.GetType() == typeof(ByteTag))
            {
                ByteTag t = (ByteTag)tag;
                writer.Write(id);
                writer.Write(t.Value);
            }
            else if (tag.GetType() == typeof(StreamTagGroup))
            {
                StreamTagSerializer.Serialize(writer, (StreamTagGroup)tag);
            }
            else if (tag.GetType() == typeof(ByteArrayTag))
            {
                ByteArrayTag t = (ByteArrayTag)tag;

                if (t.Id == TagId.StreamStart)
                {
                    byte[] data = t.Value;

                    writer.Write(BBeBLib.TagId.StreamSize);
                    writer.Write((uint)data.Length);
                    writer.Write(id);
                    writer.Write(data);
                    writer.Write(BBeBLib.TagId.StreamEnd);
                }
                else
                {
                    writer.Write(id);
                    writer.Write(t.Value);
                }
            }
            else if (tag.GetType() == typeof(UInt16Tag))
            {
                UInt16Tag t = (UInt16Tag)tag;
                writer.Write(id);
                writer.Write(t.Value);
            }
            else if (tag.GetType() == typeof(UInt16ArrayTag))
            {
                UInt16ArrayTag t = (UInt16ArrayTag)tag;
                writer.Write(id);
                foreach (ushort val in t.Value)
                {
                    writer.Write(val);
                }
            }
            else if (tag.GetType() == typeof(UInt32Tag))
            {
                UInt32Tag t = (UInt32Tag)tag;

                // StreamSize is written out by the StreamStart tag as the data may be compressed
                if (t.Id != TagId.StreamSize)
                {
                    writer.Write(id);

                    // Zero byte tags (but have hardcoded data associated with them
                    if (t.Id != TagId.BaseButtonStart &&
                        t.Id != TagId.FocusinButtonStart &&
                        t.Id != TagId.PushButtonStart &&
                        t.Id != TagId.UpButtonStart)
                    {
                        writer.Write(t.Value);
                    }
                }
            }
            else if (tag.GetType() == typeof(UInt32ArrayTag))
            {
                UInt32ArrayTag t = (UInt32ArrayTag)tag;
                writer.Write(id);

                // JumpTo doesn't have a length set and is hardcoded to 2!
                if (t.Id != TagId.JumpTo)
                {
                    writer.Write((ushort)t.Value.Length);
                }
                foreach (uint val in t.Value)
                {
                    writer.Write(val);
                }
            }
            else if (tag.GetType() == typeof(StringTag))
            {
                StringTag t = (StringTag)tag;
                writer.Write(id);
                writer.Write(t.Value);
            }
            else if (tag.GetType() == typeof(MessageTag))
            {
                MessageTag t = (MessageTag)tag;
                writer.Write(id);
                writer.Write((ushort)t.parameters);
                byte[] data = System.Text.Encoding.Unicode.GetBytes(t.param1);
                writer.Write((ushort)data.Length);
                writer.Write(data);
                data = System.Text.Encoding.Unicode.GetBytes(t.param2);
                writer.Write((ushort)data.Length);
                writer.Write(data);
            }
            else if (tag.GetType() == typeof(EmpDotsCodeTag))
            {
                EmpDotsCodeTag t = (EmpDotsCodeTag)tag;
                writer.Write(id);
                writer.Write((uint)t.Value);

                SerializeTag(t.FontFace, writer);

                writer.Write(t.DotsCode);
            }
            else if (tag.GetType() == typeof(IDOnlyTag))
            {
                IDOnlyTag t = (IDOnlyTag)tag;
                if (t.Id != TagId.StreamEnd)
                {
                    writer.Write(id);
                }
            }
            else if (tag.GetType() == typeof(BBeBTag))
            {
                BBeBTag t = (BBeBTag)tag;
                if (t.Id != TagId.StreamEnd)
                {
                    writer.Write(id);
                }
            }
            else
            {
                Debug.Assert(false, "Unknown tag type: " + tag.GetType().ToString());
            }
        }
Example #23
0
 public UnknownFieldVarint(MessageTag tag, MessageReader reader)
     : base(tag, reader.ReadInt64())
 {
 }
 public UnknownFieldFixed32(MessageTag tag, MessageReader reader)
     : base(tag, reader.ReadFixedInt32())
 {
 }
Example #25
0
 public UnknownFieldVarint(MessageTag tag, long value)
     : base(tag, value)
 {
 }
Example #26
0
 public UnknownFieldGroup(MessageTag tag, MessageReader reader)
     : base(tag, ReadGroup(tag, reader))
 {
 }