Example #1
0
 protected virtual void onReceiveMessage(GalaxyID peer, Stream messageStream)
 {
     if (bandwidthLogger != null)
     {
         bandwidthLogger.RecordBytesDown(messageStream.Length);
     }
     using (IncomingMessage message = new IncomingMessage())
     {
         using (BinaryReader reader = new BinaryReader(messageStream))
         {
             message.Read(reader);
             if (peers.ContainsLeft(message.FarmerID) && peers[message.FarmerID] == peer.ToUint64())
             {
                 gameServer.processIncomingMessage(message);
             }
             else if (message.MessageType == 2)
             {
                 NetFarmerRoot farmer       = Game1.multiplayer.readFarmer(message.Reader);
                 GalaxyID      capturedPeer = new GalaxyID(peer.ToUint64());
                 gameServer.checkFarmhandRequest(createUserID(peer), getConnectionId(peer), farmer, delegate(OutgoingMessage msg)
                 {
                     sendMessage(capturedPeer, msg);
                 }, delegate
                 {
                     peers[farmer.Value.UniqueMultiplayerID] = capturedPeer.ToUint64();
                 });
             }
         }
     }
 }
Example #2
0
        protected override void parseDataMessageFromClient(NetIncomingMessage rawMessage)
        {
            // add hook to call multiplayer core
            NetConnection peer = rawMessage.SenderConnection;

            using IncomingMessage message = new IncomingMessage();
            using Stream readStream       = new NetBufferReadStream(rawMessage);
            using BinaryReader reader     = new BinaryReader(readStream);

            while (rawMessage.LengthBits - rawMessage.Position >= 8)
            {
                message.Read(reader);
                NetConnection connection = rawMessage.SenderConnection; // don't pass rawMessage into context because it gets reused
                this.OnProcessingMessage(message, outgoing => this.sendMessage(connection, outgoing), () =>
                {
                    if (this.peers.ContainsLeft(message.FarmerID) && this.peers[message.FarmerID] == peer)
                    {
                        this.gameServer.processIncomingMessage(message);
                    }
                    else if (message.MessageType == StardewValley.Multiplayer.playerIntroduction)
                    {
                        NetFarmerRoot farmer = this.Multiplayer.readFarmer(message.Reader);
                        this.gameServer.checkFarmhandRequest("", this.getConnectionId(rawMessage.SenderConnection), farmer, msg => this.sendMessage(peer, msg), () => this.peers[farmer.Value.UniqueMultiplayerID] = peer);
                    }
                });
            }
        }
Example #3
0
        public bool ParseDataMessageFromClient(NetIncomingMessage rawMessage)
        {
            // add hook to call multiplayer core
            NetConnection peer = rawMessage.SenderConnection;

            using (IncomingMessage message = new IncomingMessage())
                using (Stream readStream = (Stream)this.NetBufferReadStreamConstructor.Invoke(new object[] { rawMessage }))
                    using (BinaryReader reader = new BinaryReader(readStream))
                    {
                        while (rawMessage.LengthBits - rawMessage.Position >= 8)
                        {
                            message.Read(reader);
                            this.OnProcessingMessage(this, rawMessage, message, () =>
                            {
                                if (this.Peers.ContainsLeft(message.FarmerID) && this.Peers[message.FarmerID] == peer)
                                {
                                    this.gameServer.processIncomingMessage(message);
                                }
                                else if (message.MessageType == Multiplayer.playerIntroduction)
                                {
                                    NetFarmerRoot farmer = this.ReadFarmer(message.Reader);
                                    this.gameServer.checkFarmhandRequest("", farmer, msg => this.SendMessage(peer, msg), () => this.Peers[farmer.Value.UniqueMultiplayerID] = peer);
                                }
                            });
                        }
                    }

            return(false);
        }
        private void parseDataMessageFromClient(NetIncomingMessage dataMsg)
        {
            NetConnection peer = dataMsg.SenderConnection;

            using (IncomingMessage message = new IncomingMessage())
            {
                using (NetBufferReadStream bufferReadStream = new NetBufferReadStream((NetBuffer)dataMsg))
                {
                    using (BinaryReader reader = new BinaryReader((Stream)bufferReadStream))
                    {
                        while ((long)dataMsg.LengthBits - dataMsg.Position >= 8L)
                        {
                            message.Read(reader);
                            if (this.peers.ContainsLeft(message.FarmerID) && this.peers[message.FarmerID] == peer)
                            {
                                this.gameServer.processIncomingMessage(message);
                            }
                            else if ((int)message.MessageType == 2)
                            {
                                NetFarmerRoot farmer = ModCore.multiplayer.readFarmer(message.Reader);
                                this.gameServer.checkFarmhandRequest("", farmer, (msg => this.sendMessage(peer, msg)), (Action)(() => this.peers[farmer.Value.UniqueMultiplayerID] = peer));
                            }
                        }
                    }
                }
            }
        }
Example #5
0
 protected virtual void onReceiveMessage(GalaxyID peer, Stream messageStream)
 {
     if (peer != serverId)
     {
         return;
     }
     if (bandwidthLogger != null)
     {
         bandwidthLogger.RecordBytesDown(messageStream.Length);
     }
     using IncomingMessage message = new IncomingMessage();
     using BinaryReader reader     = new BinaryReader(messageStream);
     message.Read(reader);
     processIncomingMessage(message);
 }
Example #6
0
 private void onReceiveMessage(GalaxyID peer, Stream messageStream)
 {
     if (peer != this.serverId)
     {
         return;
     }
     using (IncomingMessage message = new IncomingMessage())
     {
         using (BinaryReader reader = new BinaryReader(messageStream))
         {
             message.Read(reader);
             this.processIncomingMessage(message);
         }
     }
 }
Example #7
0
 private void parseDataMessageFromServer(NetIncomingMessage dataMsg)
 {
     using (IncomingMessage message = new IncomingMessage())
     {
         using (NetBufferReadStream bufferReadStream = new NetBufferReadStream((NetBuffer)dataMsg))
         {
             using (BinaryReader reader = new BinaryReader((Stream)bufferReadStream))
             {
                 while ((long)dataMsg.LengthBits - dataMsg.Position >= 8L)
                 {
                     message.Read(reader);
                     this.processIncomingMessage(message);
                 }
             }
         }
     }
 }
Example #8
0
 protected override void onReceiveMessage(GalaxyID peer, Stream messageStream)
 {
     using (IncomingMessage message = new IncomingMessage())
         using (BinaryReader reader = new BinaryReader(messageStream))
         {
             message.Read(reader);
             this.OnProcessingMessage(message, outgoing => this.sendMessage(peer, outgoing), () =>
             {
                 if (this.peers.ContainsLeft(message.FarmerID) && (long)this.peers[message.FarmerID] == (long)peer.ToUint64())
                 {
                     this.gameServer.processIncomingMessage(message);
                 }
                 else if (message.MessageType == StardewValley.Multiplayer.playerIntroduction)
                 {
                     NetFarmerRoot farmer  = this.Multiplayer.readFarmer(message.Reader);
                     GalaxyID capturedPeer = new GalaxyID(peer.ToUint64());
                     this.gameServer.checkFarmhandRequest(Convert.ToString(peer.ToUint64()), farmer, msg => this.sendMessage(capturedPeer, msg), () => this.peers[farmer.Value.UniqueMultiplayerID] = capturedPeer.ToUint64());
                 }
             });
         }
 }
Example #9
0
        protected override void onReceiveMessage(GalaxyID peer, Stream messageStream)
        {
            using IncomingMessage message = new IncomingMessage();
            using BinaryReader reader     = new BinaryReader(messageStream);

            message.Read(reader);
            ulong peerID = peer.ToUint64(); // note: GalaxyID instances get reused, so need to store the underlying ID instead

            this.OnProcessingMessage(message, outgoing => this.SendMessageToPeerID(peerID, outgoing), () =>
            {
                if (this.peers.ContainsLeft(message.FarmerID) && (long)this.peers[message.FarmerID] == (long)peerID)
                {
                    this.gameServer.processIncomingMessage(message);
                }
                else if (message.MessageType == StardewValley.Multiplayer.playerIntroduction)
                {
                    NetFarmerRoot farmer  = this.Multiplayer.readFarmer(message.Reader);
                    GalaxyID capturedPeer = new GalaxyID(peerID);
                    this.gameServer.checkFarmhandRequest(Convert.ToString(peerID), this.getConnectionId(peer), farmer, msg => this.sendMessage(capturedPeer, msg), () => this.peers[farmer.Value.UniqueMultiplayerID] = capturedPeer.ToUint64());
                }
            });
        }