Exemplo n.º 1
0
        protected virtual void HandleOfferMessage(OfferMessage Message)
        {
            Message.TradePartner.ResolveResources(resourceManager, false);
            Message.TradePartner.DecompressResources();

            foreach (ObjectBase obj in Message.OfferedItems)
            {
                obj.ResolveResources(resourceManager, false);
                obj.DecompressResources();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Handles someone offers you first
        /// </summary>
        /// <param name="Message"></param>
        protected override void HandleOfferMessage(OfferMessage Message)
        {
            base.HandleOfferMessage(Message);

            if (Data.Trade.TradePartner == null)
            {
                return;
            }

            // accept any items from configured admins in config, offer nothing in return
            if (Config.IsAdmin(Data.Trade.TradePartner.Name))
            {
                // nothing
                SendReqCounterOffer(new ObjectID[0]);

                // tell admin
                SendSayGroupMessage(
                    Data.Trade.TradePartner.ID,
                    "I will take that, master " + Data.Trade.TradePartner.Name);
            }
        }
 public void UpdateOfferMessage(OfferMessage message)
 {
     _repository.GetRepository <OfferMessage>().Update(message);
 }
 public void InsertOfferMessage(OfferMessage message)
 {
     _repository.GetRepository <OfferMessage>().Insert(message);
 }
    private void WSProcessMessage(object sender, MessageEventArgs e)
    {
        var content = Encoding.UTF8.GetString(e.RawData);

        Debug.Log($"Signaling: Receiving message: {content}");

        try
        {
            var    message = JsonUtility.FromJson <Message>(content);
            string type    = message.type;

            switch (type)
            {
            case "accept":
            {
                AcceptMessage acceptMessage = JsonUtility.FromJson <AcceptMessage>(content);
                this.m_acceptMessage = acceptMessage;
                this.OnAccept?.Invoke(this);
                break;
            }

            case "offer":
            {
                OfferMessage offerMessage = JsonUtility.FromJson <OfferMessage>(content);
                DescData     descData     = new DescData();
                descData.connectionId = this.m_acceptMessage.connectionId;
                descData.sdp          = offerMessage.sdp;

                this.OnOffer?.Invoke(this, descData);

                break;
            }

            case "answer":
            {
                AnswerMessage answerMessage = JsonUtility.FromJson <AnswerMessage>(content);
                DescData      descData      = new DescData();
                descData.connectionId = this.m_acceptMessage.connectionId;
                descData.sdp          = answerMessage.sdp;

                this.OnAnswer?.Invoke(this, descData);

                break;
            }

            case "candidate":
            {
                CandidateMessage candidateMessage = JsonUtility.FromJson <CandidateMessage>(content);

                CandidateData candidateData = new CandidateData();
                candidateData.connectionId  = this.m_acceptMessage.connectionId;
                candidateData.candidate     = candidateMessage.ice.candidate;
                candidateData.sdpMLineIndex = candidateMessage.ice.sdpMLineIndex;
                candidateData.sdpMid        = candidateMessage.ice.sdpMid;

                this.OnIceCandidate?.Invoke(this, candidateData);

                break;
            }

            case "ping":
            {
                PongMessage pongMessage = new PongMessage();
                this.WSSend(JsonUtility.ToJson(pongMessage));

                break;
            }

            case "bye":
            {
                // TODO:
                break;
            }

            default:
            {
                Debug.LogError("Signaling: Received message from unknown peer");
                break;
            }
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("Signaling: Failed to parse message: " + ex);
        }
    }
Exemplo n.º 6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Message"></param>
 protected virtual void HandleOfferMessage(OfferMessage Message)
 {
 }
Exemplo n.º 7
0
        /// <summary>
        /// Handles someone offers you first
        /// </summary>
        /// <param name="Message"></param>
        protected override void HandleOfferMessage(OfferMessage Message)
        {
            base.HandleOfferMessage(Message);

            // no tradepartner set (bug!?) or
            // someone tried to offer nothing (pointless)
            if (Data.Trade.TradePartner == null || Data.Trade.ItemsPartner.Count == 0)
            {
                SendCancelOffer();
                return;
            }

            ///
            /// ADMIN
            ///

            // accept any items from configured admins in config, offer nothing in return
            if (Config.IsAdmin(Data.Trade.TradePartner.Name))
            {
                // nothing
                SendReqCounterOffer(new ObjectID[0]);

                // tell admin
                SendSayGroupMessage(
                    Data.Trade.TradePartner.ID,
                    Config.ChatPrefixString + "I will take that, master " + Data.Trade.TradePartner.Name);

                // exit
                return;
            }

            ///
            /// NORMAL
            ///

            // see what they offered
            for (int i = 0; i < Data.Trade.ItemsPartner.Count; i++)
            {
                ObjectBase obj = Data.Trade.ItemsPartner[i];

                // perform action on shillings
                if (!Config.IsAdmin(Data.Trade.TradePartner.Name))
                {
                    if (obj.Name == NAME_SHILLING || obj.Name == "mushroom" || obj.Name == "red mushroom" ||
                        obj.Name == "purple mushroom" || obj.Name == "blue dragon scale" || obj.Name == "sapphire" ||
                        obj.Name == "orc tooth" || obj.Name == "elderberry" || obj.Name == "kriipa claw" || obj.Name == "vial of solagh" ||
                        obj.Name == "Inky-cap mushroom")
                    {
                        if (Config.Enabledonations == true)
                        {
                            // offer nothing
                            SendReqCounterOffer(new ObjectID[0]);

                            return;
                        }
                    }
                }

                else
                {
                    SendCancelOffer();
                }
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Handles someone offers you first
        /// </summary>
        /// <param name="Message"></param>
        protected override void HandleOfferMessage(OfferMessage Message)
        {
            base.HandleOfferMessage(Message);

            // no tradepartner set (bug!?) or
            // someone tried to offer nothing (pointless)
            if (Data.Trade.TradePartner == null || Data.Trade.ItemsPartner.Count == 0)
            {
                SendCancelOffer();
                return;
            }

            ///
            /// ADMIN
            ///

            // accept any items from configured admins in config, offer nothing in return
            if (Config.IsAdmin(Data.Trade.TradePartner.Name))
            {
                // nothing
                SendReqCounterOffer(new ObjectID[0]);

                // tell admin
                SendSayGroupMessage(
                    Data.Trade.TradePartner.ID,
                    Config.ChatPrefixString + "I will take that, master " + Data.Trade.TradePartner.Name);

                // exit
                return;
            }

            ///
            /// NORMAL
            ///

            uint offersum = 0;
            Dictionary <string, uint> dict = new Dictionary <string, uint>();

            // see what they offered
            for (int i = 0; i < Data.Trade.ItemsPartner.Count; i++)
            {
                ObjectBase obj   = Data.Trade.ItemsPartner[i];
                ShopItem   entry = Config.BuyListGetItemByName(obj.Name);

                // if there's anything we don't buy, reject offer
                if (entry == null)
                {
                    // tell customer
                    SendSayGroupMessage(
                        new uint[] { Data.Trade.TradePartner.ID },
                        Config.ChatPrefixString + "Sorry, I'm not buying " + obj.Name);

                    SendCancelOffer();

                    return;
                }

                // process stackable offered item
                if (obj.IsStackable)
                {
                    // get the ones we already have
                    ObjectBaseList <InventoryObject> inventoryObjects =
                        Data.InventoryObjects.GetItemsByName(entry.Name, false);

                    int toBuy;

                    // have none yet? accept up to amount
                    if (inventoryObjects.Count == 0)
                    {
                        toBuy = (int)entry.Amount;
                    }

                    // stackable
                    else if (inventoryObjects[0].IsStackable)
                    {
                        toBuy = (int)entry.Amount - (int)inventoryObjects[0].Count;
                    }

                    // non stackable
                    else
                    {
                        toBuy = (int)entry.Amount - (int)inventoryObjects.Count;
                    }

                    if (toBuy <= 0)
                    {
                        // tell customer
                        SendSayGroupMessage(
                            new uint[] { Data.Trade.TradePartner.ID },
                            Config.ChatPrefixString + "Sorry, I'm not buying " + entry.Name);

                        SendCancelOffer();

                        return;
                    }
                    else if (obj.Count > toBuy)
                    {
                        // tell customer
                        SendSayGroupMessage(
                            new uint[] { Data.Trade.TradePartner.ID },
                            Config.ChatPrefixString + "Sorry, I'm only buying " + toBuy + " " + entry.Name);

                        SendCancelOffer();

                        return;
                    }

                    // add to sum
                    offersum += obj.Count * entry.UnitPrice;
                }

                // process nonstackable offered item
                else
                {
                    // in this iteration we just count them up

                    uint count;
                    if (dict.TryGetValue(obj.Name, out count))
                    {
                        dict[obj.Name] = dict[obj.Name] + 1;
                    }
                    else
                    {
                        dict.Add(obj.Name, 1);
                    }
                }
            }

            // process nonstackable offered items now
            foreach (KeyValuePair <string, uint> keyvalue in dict)
            {
                ShopItem entry = Config.BuyListGetItemByName(keyvalue.Key);

                if (entry != null)
                {
                    // get the ones we already have
                    ObjectBaseList <InventoryObject> inventoryObjects =
                        Data.InventoryObjects.GetItemsByName(entry.Name, false);

                    int toBuy;

                    // have none yet? accept up to amount
                    if (inventoryObjects.Count == 0)
                    {
                        toBuy = (int)entry.Amount;
                    }

                    // non stackable
                    else
                    {
                        toBuy = (int)entry.Amount - (int)inventoryObjects.Count;
                    }

                    if (toBuy <= 0)
                    {
                        // tell customer
                        SendSayGroupMessage(
                            new uint[] { Data.Trade.TradePartner.ID },
                            Config.ChatPrefixString + "Sorry, I'm not buying " + entry.Name);

                        SendCancelOffer();

                        return;
                    }
                    else if (keyvalue.Value > toBuy)
                    {
                        // tell customer
                        SendSayGroupMessage(
                            new uint[] { Data.Trade.TradePartner.ID },
                            Config.ChatPrefixString + "Sorry, I'm only buying " + toBuy + " " + entry.Name);

                        SendCancelOffer();

                        return;
                    }

                    // add to sum
                    offersum += keyvalue.Value * entry.UnitPrice;
                }
            }

            // get our shillings from inventory
            InventoryObject shillings = Data.InventoryObjects.GetItemByName(NAME_SHILLING, false);

            // do we have enough money?
            bool haveMoney = (shillings != null && shillings.Count >= offersum);

            // offer shillings
            if (offersum > 0 && haveMoney)
            {
                SendReqCounterOffer(new ObjectID[] { new ObjectID(shillings.ID, offersum) });
            }

            // offer nothing
            else if (offersum == 0)
            {
                SendReqCounterOffer(new ObjectID[0]);
            }

            // cancel trade
            else
            {
                // tell customer
                SendSayGroupMessage(
                    new uint[] { Data.Trade.TradePartner.ID },
                    Config.ChatPrefixString + TELL_NOMONEY);

                SendCancelOffer();

                // log warning
                Log("WARN", "Not enough shillings to perform trade with " + Data.Trade.TradePartner.Name);
            }
        }