/// <summary> /// Serves as confirmation for accepting and cancelling trades sending out duplicate /// notices to each party when an acceptance or cancelation notice is received from /// one of the trade partners /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void OnTradeMessage(object sender, TradeMessageEventArgs e) { MsgTrade tradeMsg = e.TradeMsg; switch (tradeMsg.Type) { case MsgTrade.TradeMsgType.Accept: //assign an ID //tradeMsg.Trade.TradeID = _gameData.NextTradeID; //add to list //this._tradeList.Add(tradeMsg.Trade); //send confirmation //this._playerIDArray[tradeMsg.Trade.OfferingPartyID].SendTradeMsg(tradeMsg); //this._playerIDArray[tradeMsg.Trade.AskedPartyID].SendTradeMsg(tradeMsg); //break; case MsgTrade.TradeMsgType.Cancel: { //int removeID = tradeMsg.Trade.TradeID; //this info will now be kept on //find trade //and transfered with the trade /*foreach(object trade in this._tradeList) * { * Trade t = (Trade)trade; * //Remove trade from trade list * if(t.TradeID == removeID) * _tradeList.Remove(trade); * }*/ //Notify each trade partner of the cancellation this._playerIDArray[tradeMsg.Trade.OfferingPartyID].SendTradeMsg(tradeMsg); this._playerIDArray[tradeMsg.Trade.AskedPartyID].SendTradeMsg(tradeMsg); break; } case MsgTrade.TradeMsgType.Offer: case MsgTrade.TradeMsgType.Reject: case MsgTrade.TradeMsgType.Busy: case MsgTrade.TradeMsgType.Message: { //forward tradeMsg to target player this._playerIDArray[tradeMsg.Trade.AskedPartyID].SendTradeMsg(tradeMsg); break; } } }
private void ProcessMessage(byte [] data) { //Deserialize message IFormatter fmt = new BinaryFormatter(); MemoryStream memHolder = new MemoryStream(data, 0, data.Length); memHolder.Position = 0; switch (_msgType) { case MsgType.Ping: { Console.WriteLine("Pong"); break; } case MsgType.Text: { MsgText msg = (MsgText)fmt.Deserialize(memHolder); //if this is the first message assign it to client name if (_firstTime) { _userName = msg.Text; _firstTime = false; _connected = true; if (eConnected != null) { EventArgs e = new EventArgs(); eConnected(this, e); } } else if (eMessageReceived != null && _connected) { //Else raise the MessageReceived Event //and pass the message along MessageEventArgs e = new MessageEventArgs(msg); eMessageReceived(this, e); } break; } case MsgType.Orders: { // // TODO: make sure it isn't possible to get more // than one set of orders in the list for a // single player // //accept fleet data from player and add to //arraylist of fleetdata if (_fleet != null && _orders.Contains(_fleet)) { Console.WriteLine("Old fleet orders removed for player " + this._clientID); _orders.Remove(_fleet); } Console.WriteLine("Attempting to Deserialize Orders from player"); this._fleet = (Fleet)fmt.Deserialize(memHolder); ClientHost._orders.Add(_fleet); Console.WriteLine("Fleet added to server orders"); this._ready = true; if (eReady != null) { EventArgs e = new EventArgs(); eReady(this, e); } break; } case MsgType.Cancel: { ClientHost._orders.Remove(this._fleet); Console.WriteLine("Fleet orders removed for player " + this._clientID); this._ready = false; break; } case MsgType.PlayerIDRequest: { NameAndID nameAndID = (NameAndID)fmt.Deserialize(memHolder); int id = nameAndID.ID; string password = nameAndID.Password; if (eIDRequest != null) { Console.WriteLine(_userName + " requests player ID(event fired)"); IDRequestEventArgs e = new IDRequestEventArgs(id, password); eIDRequest(this, e); } break; } case MsgType.SystemName: { MsgSystemName sysName = (MsgSystemName)fmt.Deserialize(memHolder); if (this.eRenameSystem != null) { SystemNameEventArgs mea = new SystemNameEventArgs(sysName); this.eRenameSystem(this, mea); } break; } case MsgType.Trade: { MsgTrade tradeMsg = (MsgTrade)fmt.Deserialize(memHolder); if (this.eTradeMessage != null) { TradeMessageEventArgs ea = new TradeMessageEventArgs(tradeMsg); this.eTradeMessage(this, ea); } break; } } memHolder.Close(); //Determine message type //Carry out message instructions }