예제 #1
0
        public AOE(Service service, Vector2 where, Vector2 forward, float timeAlive, ref List <Client> players)
        {
            this.service = service;
            id           = service.GetAoeUniqueId();
            Awake();
            transform.setPosition(where);
            List <Vector2> fwds = new List <Vector2>();

            fwds.Add(forward);
            List <float> times = new List <float>();

            times.Add(timeAlive);

            alive = timeAlive;

            transform.setSegment(fwds, times);

            ByteMessage msg = new ByteMessage();

            msg.WriteTag("NEA");
            msg.WriteInt(id);
            msg.WriteFloat(transform.getPosition().X);
            msg.WriteFloat(transform.getPosition().Y);

            foreach (Client c in players)
            {
                c.SendMessage(msg);
            }
        }
        public void Handle(ByteMessage message)
        {
            // If the user 1 flag is set then this is a session management message.
            // Do not pass to the higher layers but rather process locally.
            if ((message.Data[0] & 0x40) == 0x40)
            {
                var type = FLMsgType.GetUInt32(message.Data, ref message.Position);
                // On receipt of a trans user data session info we send back a dummy
                // entry that's just sufficient to let the client's dplay implementation
                // to recognise us.
                switch (type)
                {
                case 0xC1:
                    if (_sessionState != FLServer.Player.Session.State.CONNECTING)
                    {
                        return;
                    }
                    _sessionState = FLServer.Player.Session.State.CONNECTING_SESSINFO;
                    SendTUDSessionInfo();
                    break;

                case 0xC3:
                    if (_sessionState != FLServer.Player.Session.State.CONNECTING_SESSINFO)
                    {
                        return;
                    }
                    _sessionState = FLServer.Player.Session.State.CONNECTED;
                    var p = Context.System.Guardian.GetSingleChild("server").Ask <LocalActorRef>("NewPlayer");
                    p.Wait(10);
                    _playerRef = p.Result;

                    // FLPACKET_SERVER_CONNECTRESPONSE
                    byte[] omsg = { 0x01, 0x02 };
                    var    num  = _playerRef.Path.Name.Split('/')[1];
                    var    pid  = uint.Parse(num);
                    FLMsgType.AddUInt32(ref omsg, pid);
                    Handle(omsg);
                    Handle(new SendNews());
                    //Sender.Tell(omsg);
                    //OnPlayerConnected(sess);
                    break;
                }
            }
            // If this is a complete message then pass up.
            else if ((message.Data[0] & 0x30) == 0x30)
            {
                if ((message.Data.Length - message.Position) <= 0)
                {
                    return;
                }

                byte[] msg = FLMsgType.GetArray(message.Data, ref message.Position, message.Data.Length - message.Position);
                _playerRef.Tell(msg);
            }
            // Otherwise we don't support this. Flag the error.
            else
            {
                _log.Warn("{0} unsupported message: {1}", Self.Path, message.Data);
            }
        }
예제 #3
0
파일: Bugs.cs 프로젝트: akkadotnet/Wire
 public void CanSerializeMessageWithByte()
 {
     var stream = new MemoryStream();
     var msg = new ByteMessage(DateTime.UtcNow,1,2);
     var serializer = new Serializer(new SerializerOptions(versionTolerance: true, preserveObjectReferences: true));
     serializer.Serialize(msg, stream);
     stream.Position = 0;
     var res = serializer.Deserialize(stream);
 }
예제 #4
0
        //Actuall outgoing msg
        //Gets sent to "listenForClientMsg" here all types currentely needs to manually added
        private void sendMsg(OutMsg msg)
        {
            ByteMessage bMsg = new ByteMessage()
            {
                msg = msg.msg
            };

            connectionToServer.Send(msg.msgType, bMsg);
        }
예제 #5
0
파일: Bugs.cs 프로젝트: jogibear9988/Wire
        public void CanSerializeMessageWithByte()
        {
            var stream     = new MemoryStream();
            var msg        = new ByteMessage(DateTime.UtcNow, 1, 2);
            var serializer = new Serializer(new SerializerOptions(true));

            serializer.Serialize(msg, stream);
            stream.Position = 0;
            var res = serializer.Deserialize(stream);
        }
예제 #6
0
        public void CanSerializeMessageWithByte()
        {
            var stream     = new MemoryStream();
            var msg        = new ByteMessage(DateTime.UtcNow, 1, 2);
            var serializer = new Serializer(new SerializerOptions(versionTolerance: true, preserveObjectReferences: true));

            serializer.Serialize(msg, stream);
            stream.Position = 0;
            var res = serializer.Deserialize(stream);
        }
예제 #7
0
        public void SendEvent(int conn, byte[] serializedmsg, int channel)
        {
            //TODO Log Message
            Debug.Log(LZ4MessagePackSerializer.ToJson(serializedmsg));
            var data = new ByteMessage()
            {
                Data = serializedmsg
            };

            NetworkServer.SendToClient(conn, (byte)RtsMessageType.Event, data);
        }
예제 #8
0
    public void sendMsg(object msg, NetworkConnection c, short msgId)
    {
        byte[] bytes;
        using (MemoryStream stream = new MemoryStream()){
            new BinaryFormatter().Serialize(stream, msg);
            bytes = stream.ToArray();
        }
        ByteMessage netMsg = new ByteMessage();

        netMsg.msg = bytes;
        c.Send(msgId, netMsg);
    }
예제 #9
0
        public void SendOpResponse(int conn, byte[] serializedmsg, int channel)
        {
            //TODO Log Message
            Debug.Log(LZ4MessagePackSerializer.ToJson(serializedmsg));
            var data = new ByteMessage()
            {
                Data = serializedmsg
            };

            NetworkServer.SendToClient(conn, (byte)RtsMessageType.OperationResponse, data);
            //TODO Log Message
            Debug.Log("Message Sent");
        }
        public void ByteIsSentForByteEnum()
        {
            ByteMessage msg = new ByteMessage()
            {
                byteEnum = MyByteEnum.B
            };

            NetworkWriter writer = new NetworkWriter();

            writer.Write(msg);

            // should be 1 byte for null check and 1 byte for data
            Assert.That(writer.Length, Is.EqualTo(2));
        }
예제 #11
0
        public void ByteIsSentForByteEnum()
        {
            ByteMessage msg = new ByteMessage()
            {
                byteEnum = MyByteEnum.B
            };

            NetworkWriter writer = new NetworkWriter();

            writer.Write(msg);

            // should be 1 byte for data
            Assert.That(writer.Position, Is.EqualTo(1));
        }
예제 #12
0
        public void ByteIsSentForByteEnum()
        {
            ByteMessage msg = new ByteMessage()
            {
                byteEnum = MyByteEnum.B
            };

            NetworkWriter writer = new NetworkWriter();

            msg.Serialize(writer);

            // should only be 1 byte
            Assert.That(writer.Length, Is.EqualTo(1));
        }
예제 #13
0
파일: Bugs.cs 프로젝트: jogibear9988/Wire
 public bool Equals(ByteMessage other)
 {
     return(UtcTime.Equals(other.UtcTime) && LongValue.Equals(other.LongValue) &&
            ByteValue.Equals(other.ByteValue));
 }
예제 #14
0
파일: Bugs.cs 프로젝트: akkadotnet/Wire
 public bool Equals(ByteMessage other)
 {
     return UtcTime.Equals(other.UtcTime) && LongValue.Equals(other.LongValue) && ByteValue.Equals(other.ByteValue);
 }