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(); }); } } } }
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); } }); } }
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)); } } } } } }
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); }
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); } } }
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); } } } } }
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()); } }); } }
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()); } }); }