Exemplo n.º 1
0
 public void SendSystemName(MsgSystemName sysName)
 {
     lock (_clientSocket.GetStream())
     {
         //Get stream
         NetworkStream str    = _clientSocket.GetStream();
         IFormatter    fmt    = new BinaryFormatter();
         MemoryStream  memStr = new MemoryStream();
         //Serialize object to the memorystream for sizing
         fmt.Serialize(memStr, sysName);
         byte[] data = memStr.GetBuffer();
         //get header info in bytes
         int    memSize = (int)memStr.Length;
         byte[] size    = BitConverter.GetBytes(memSize);
         byte[] type    = BitConverter.GetBytes((int)MsgType.SystemName);
         byte[] header  = new Byte[8];
         size.CopyTo(header, 0);
         type.CopyTo(header, 4);
         //send header
         str.Write(header, 0, 8);
         //send data
         str.Write(data, 0, memSize);
         str.Flush();
         memStr.Close();
     }
 }
Exemplo n.º 2
0
 public SystemNameEventArgs(MsgSystemName sysName)
 {
     _sysName = sysName;
 }
Exemplo n.º 3
0
        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
        }