예제 #1
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);
                    }
                });
            }
        }
        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));
                            }
                        }
                    }
                }
            }
        }
예제 #3
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);
                 }
             }
         }
     }
 }