public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
 {
     Debug.LogError("Error, MessageInspector of type " + eventName + " called!");
     // return zero to to have this inspector pass this message
     // return positive number if message shouldn't be relayed to all other clients
     return(1); // do not send to other clients
 }
Example #2
0
    public override void SendToLocalGameObject(FFBasePacket package, GameObject go)
    {
        FFPacket <EventType> sentPackage = (FFPacket <EventType>)package;

        FFPacket <EventType> .Decrypt(ref sentPackage.message);

        switch (package.packetInstructions)
        {
        case FFPacketInstructionFlags.MessageBoardGameObjectSend:
            FFMessageBoard <EventType> .SendToLocal(sentPackage.message, go);

            break;

        case FFPacketInstructionFlags.MessageBoardGameObjectSendDown:
            FFMessageBoard <EventType> .SendToLocalDown(sentPackage.message, go);

            break;

        case FFPacketInstructionFlags.MessageBoardGameObjectSendUp:
            FFMessageBoard <EventType> .SendToLocalUp(sentPackage.message, go);

            break;

        case FFPacketInstructionFlags.MessageBoardGameObjectSendToAllConnected:
            FFMessageBoard <EventType> .SendToLocalToAllConnected(sentPackage.message, go);

            break;

        default:
            break;
        }
    }
    public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
    {
        // Example cast
        //FFPacket<PlayerDiedEvent> packet = (FFPacket<PlayerDiedEvent>)incommingPacket;

        return(1); // return positive number if message shouldn't be relayed to all other clients
    }
Example #4
0
    public override bool SendToLocalEntry(FFBasePacket package, string entry)
    {
        FFPacket <EventType> sentPackage = (FFPacket <EventType>)package;

        FFPacket <EventType> .Decrypt(ref sentPackage.message);

        return(FFMessageBoard <EventType> .SendToLocal(sentPackage.message, entry));
    }
    public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
    {
        FFPacket <ClientSyncTimeEvent> packet = (FFPacket <ClientSyncTimeEvent>)incommingPacket;

        packet.message.serverLifeTime = FFServer.serverTime;
        clientSocket.SendNetPacket <ClientSyncTimeEvent>(packet, false);
        return(1); // return zero to to have this inspector pass this message
    }
Example #6
0
    // Used to unpack messages from the net
    public override bool SendToLocal(FFBasePacket package)
    {
        FFPacket <EventType> sentPackage = (FFPacket <EventType>)package;

        FFPacket <EventType> .Decrypt(ref sentPackage.message);

        return(FFMessage <EventType> .SendToLocal(sentPackage.message));
    }
Example #7
0
 void ExecuteMessages()
 {
     while (singleton.recievedMessages.Count > 0)
     {
         FFBasePacket message = singleton.recievedMessages.Dequeue();
         FFPrivate.FFMessageSystem.SendPacketToLocal(message);
     }
 }
    public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
    {
        //Debug.Log("NetObjectDestroyedEvent Packet Recieved"); // debug
        FFPacket <NetObjectDestroyedEvent> packet = (FFPacket <NetObjectDestroyedEvent>)incommingPacket;

        // Remove copy of the object which exists for new clients to create the object
        // TODO: Low-Prio, Optimize for O(N), Needs custom List, very low prio.
        var list = FFServer.NetObjectsCreated;

        list.Remove(list.Find(x => x.gameObjectNetId == packet.message.gameObjectNetId));

        return(0);
    }
Example #9
0
 /// <summary>
 /// Disbatch a packet to the local client
 /// </summary>
 /// <param name="packet"></param>
 public static void DisbatchPacket(FFBasePacket packet)
 {
     if ((packet.packetInstructions & FFPacketInstructionFlags.Immediate).Equals(FFPacketInstructionFlags.Immediate))
     {
         //Debug.Log("Recieved Immediate Message from Net"); // debug
         FFPrivate.FFMessageSystem.SendPacketToLocal(packet);
     }
     else
     {
         //Debug.Log("Recieved Message from Net"); // debug
         singleton.recievedMessages.Enqueue(packet);
     }
 }
    public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
    {
        FFPacket <NetObjectCreatedEvent> packet = (FFPacket <NetObjectCreatedEvent>)incommingPacket;

        long netid = FFServer.GetNewNetId;
        GameObjectNetIdRecievedEvent reply = new GameObjectNetIdRecievedEvent();

        reply.gameInstanceId           = packet.message.gameObjectInstanceId;
        packet.message.gameObjectNetId = netid;
        reply.netId = netid;

        // TODO make this run off of netId on local server/dedicated version
        // SAVE NewObjectCreatedEvents so they can be sent to new clients later
        FFServer.NetObjectsCreated.Add(packet.message);


        clientSocket.SendMessage <GameObjectNetIdRecievedEvent>(reply, true);
        return(0);
    }
    public override uint Inspect(FFServer.ClientSocket clientSocket, FFBasePacket incommingPacket)
    {
        FFPacket <ClientConnectedEvent> packet = (FFPacket <ClientConnectedEvent>)incommingPacket;

        clientSocket.clientData.clientName = packet.message.clientName;
        clientSocket.clientData.clientGuid = packet.message.clientGuid;

        packet.message.clientId        = clientSocket.clientData.clientId;
        packet.message.serverTime      = FFServer.serverTime;
        packet.message.serverStartTime = FFServer.serverStartTime;
        packet.message.serverName      = FFServer.serverName;

        clientSocket.SendMessage <ClientConnectedEvent>(packet.message, true);

        // make a copy so that it doesn't get invalidated if another thread deletes something
        var netObjects = new List <NetObjectCreatedEvent>(FFServer.NetObjectsCreated);

        foreach (var netobj in netObjects)
        {
            clientSocket.SendMessage <NetObjectCreatedEvent>(netobj, true);
        }

        return(0);
    }
Example #12
0
    public static void SendPacket(FFBasePacket basepacket, bool varified)
    {
        // Assign Sender ID
        basepacket.senderId = singleton._clientId; // 0 is for server, -1 Uninitialized, (1-MaxLong)

        if ((basepacket.packetInstructions & FFPacketInstructionFlags.Immediate).Equals(FFPacketInstructionFlags.Immediate))
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream    ms = new MemoryStream();
            bf.Serialize(ms, basepacket);
            byte[] packetData = ms.ToArray();
            ms.Flush();
            ms.Dispose();

            if (varified)
            {
                SendPacketTCP(packetData);
            }
            else
            {
                SendPacketUDP(packetData);
            }
        }
        else
        {
            //Debug.Log("SendPacket");  // debug
            if (varified)
            {
                AddVerifiedPacketToSend(basepacket);
            }
            else
            {
                AddUnverifiedPacketToSend(basepacket);
            }
        }
    }
Example #13
0
 // MessageBoards/Messages executed by main thread in FFNetSystem
 // MessageBoards/Messages Unpacking of packetdata
 // MessageBoards/Messages direction and distribution
 public static void SendPacketToLocal(FFBasePacket baseNetPacket)
 {
     #region FFMessage
     if ((baseNetPacket.packetInstructions & FFPacketInstructionFlags.Message).Equals(FFPacketInstructionFlags.Message))
     {
         BaseMessage netMessage;
         if (messageDictionary.TryGetValue(baseNetPacket.messageType, out netMessage))
         {
             netMessage.SendToLocal(baseNetPacket);
         }
         else
         {
             Debug.Log("Recieved message of non-registered NetMessage: " + baseNetPacket.messageType);
         }
     }
     #endregion
     #region FFMessageBoard
     else if ((baseNetPacket.packetInstructions & FFPacketInstructionFlags.MessageBoard).Equals(FFPacketInstructionFlags.MessageBoard))
     {
         BaseMessageBoard netMessageBoard;
         if (messageBoardDictionary.TryGetValue(baseNetPacket.messageType, out netMessageBoard))
         {
             // goes to an entry
             if ((baseNetPacket.packetInstructions & FFPacketInstructionFlags.MessageBoardEntry).Equals(FFPacketInstructionFlags.MessageBoardEntry))
             {
                 netMessageBoard.SendToLocalEntry(baseNetPacket, baseNetPacket.entry);
             }
             // goes to a GameObject
             else if ((baseNetPacket.packetInstructions & FFPacketInstructionFlags.MessageBoardGameObjectSend).Equals(FFPacketInstructionFlags.MessageBoardGameObjectSend))
             {
                 FFSystem.GameObjectData goToSendToData;
                 long netId = Convert.ToInt64(baseNetPacket.entry);
                 if (FFSystem.TryGetGameObjectDataByNetId(netId, out goToSendToData))
                 {
                     netMessageBoard.SendToLocalGameObject(baseNetPacket, goToSendToData.gameObject);
                 }
                 else
                 {
                     Debug.Log("Recieved messageBoard packet for netId which is not registered" +
                               "\nMessageType: " + baseNetPacket.messageType +
                               "\nFlag: " + baseNetPacket.packetInstructions +
                               "\nEntry: " + baseNetPacket.entry +
                               "\nNetId: " + netId);
                 }
             }
             else
             {
                 Debug.Log("Recieved Invalid FFPacketInstructionFlags" +
                           "\nMessageType: " + baseNetPacket.messageType +
                           "\nFlag: " + baseNetPacket.packetInstructions +
                           "\nEntry: " + baseNetPacket.entry);
             }
         }
         else
         {
             Debug.Log("Recieved message for a non-registered NetMessageBoard" +
                       "\nMessageType: " + baseNetPacket.messageType +
                       "\nFlag: " + baseNetPacket.packetInstructions +
                       "\nEntry: " + baseNetPacket.entry);
         }
     }
     #endregion
 }
Example #14
0
 private static void AddUnverifiedPacketToSend(FFBasePacket packet)
 {
     singleton._packetsToSendViaUDP.Enqueue(packet);
 }
Example #15
0
    public static void SendPacket(FFBasePacket basepacket, bool varified)
    {
        // Assign Sender ID
        basepacket.senderId = singleton._clientId; // 0 is for server, -1 Uninitialized, (1-MaxLong)

        if((basepacket.packetInstructions & FFPacketInstructionFlags.Immediate).Equals(FFPacketInstructionFlags.Immediate))
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            bf.Serialize(ms, basepacket);
            byte[] packetData = ms.ToArray();
            ms.Flush();
            ms.Dispose();

            if (varified)
            {
                SendPacketTCP(packetData);
            }
            else
            {
                SendPacketUDP(packetData);
            }
        }
        else
        {
            //Debug.Log("SendPacket");  // debug
            if (varified)
            {
                AddVerifiedPacketToSend(basepacket);
            }
            else
            {
                AddUnverifiedPacketToSend(basepacket);
            }
        }
    }
Example #16
0
 private static void AddVerifiedPacketToSend(FFBasePacket packet)
 {
     singleton._packetsToSendViaTCP.Enqueue(packet);
 }
Example #17
0
 virtual public void SendToLocalGameObject(FFBasePacket package, GameObject go)
 {
     Debug.LogError("Message Didn't override SentToLocalGameObject function?!?");
 }
Example #18
0
 virtual public bool SendToLocal(FFBasePacket package)
 {
     Debug.LogError("Message Didn't override SentToLocal function?!?");
     return(false);
 }
Example #19
0
    private static void SendThreadLoop()
    {
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream    ms = new MemoryStream();

        FFSystem.InitBinaryFormatter(bf);

        uint PingCycle          = (uint)(singleton._PingCycle * 1000.0f);
        uint DialationSyncCycle = (uint)(singleton._DialationSyncCycle * 1000.0f);
        // Sync Counters (in milliseconds)
        uint DialationSyncTimeCounter = DialationSyncCycle;
        uint PingTimeCounter          = 0;

        System.Diagnostics.Stopwatch sendThreadWatch = new System.Diagnostics.Stopwatch();
        sendThreadWatch.Start();

        while (true)
        {
            int cyclePacketCount = 0;

            // sync Client if needed
            if (FFClient.isReady)
            {
                if (sendThreadWatch.ElapsedMilliseconds >= PingTimeCounter)
                {
                    PingTimeCounter += PingCycle;
                    SendClientSyncTimeEvent(false);
                    //Debug.Log("SendThread sent a ClientSyncTimeEvent w/o Dialation"); //debug
                }

                if (sendThreadWatch.ElapsedMilliseconds >= DialationSyncTimeCounter)
                {
                    DialationSyncTimeCounter += DialationSyncCycle;
                    SendClientSyncTimeEvent(true);
                    //Debug.Log("SendThread sent a ClientSyncTimeEvent w/ Dialation"); //debug
                }
            }

            while (singleton._packetsToSendViaTCP.Count != 0)
            {
                ms = new MemoryStream();
                FFBasePacket packet = singleton._packetsToSendViaTCP.Dequeue();
                bf.Serialize(ms, packet);

                byte[] packetData = ms.GetBuffer();
                ms.Flush();
                ms.Dispose();

                SendPacketTCP(packetData);
                ++cyclePacketCount;
                //Debug.Log("SendThead Sent a TCP packet"); // debug
            }

            while (singleton._packetsToSendViaUDP.Count != 0)
            {
                ms = new MemoryStream();
                FFBasePacket packet = singleton._packetsToSendViaUDP.Dequeue();
                bf.Serialize(ms, packet);

                byte[] packetData = ms.GetBuffer();
                ms.Flush();
                ms.Dispose();

                SendPacketUDP(packetData);
                ++cyclePacketCount;
                //Debug.Log("SendThead Sent a UDP packet"); // debug
            }


            if (cyclePacketCount == 0) // if we didn't send anything
            {
                Thread.Sleep(1);       // Throw on CPU thead queue
            }
        }
    }