public void SendID(int id, string name) { NameAndID nameid = new NameAndID(id, name); 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, nameid); 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.PlayerID); 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(); } }
public static SmartPropertyDefinition Parse(string definition, string groupID, int extraArgumentsAfterID = 0) { int idx = -1, count = 0, prevIdx = 0; definition = definition.Trim(); List <string> allArgs = new List <string>(); for (; count < (extraArgumentsAfterID + 1); count++, prevIdx = idx) { idx = definition.IndexOf('|', prevIdx); if (idx == -1) { break; } allArgs.Add(definition.Substring(prevIdx, idx - prevIdx)); idx++; } if (allArgs.Count < (extraArgumentsAfterID + 1) || idx == -1) { throw new Exception("Insufficient initial arguments in smart property definition"); } bool?defaultOn = null; if (allArgs[0].StartsWith("-")) { defaultOn = false; } else if (allArgs[0].StartsWith("+")) { defaultOn = true; } NameAndID name = new NameAndID(allArgs[0].TrimStart('-', '+')); string idWithoutPrefix, idWithPrefix; if (string.IsNullOrEmpty(groupID)) { idWithoutPrefix = idWithPrefix = "com.sysprogs.bspoptions." + name.ID; } else { idWithoutPrefix = name.ID; idWithPrefix = groupID + idWithoutPrefix; } string[] values = definition.Substring(idx).Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); List <Item> items = new List <Item>(); int defaultIndex = 0; foreach (var rawVal in values) { string val = rawVal.Trim(); string regex, itemName; idx = val.IndexOf("=>"); if (idx == -1) { regex = val; itemName = "1"; } else { regex = val.Substring(0, idx); itemName = val.Substring(idx + 2); if (itemName.StartsWith("+")) { defaultIndex = items.Count; } } items.Add(new Item(regex, new NameAndID(itemName.TrimStart('+')))); } return(new SmartPropertyDefinition(name.Name, idWithoutPrefix, idWithPrefix, allArgs.Skip(1).ToArray(), defaultOn, items, defaultIndex)); }
public Item(string key, NameAndID value) { Key = key; Value = value; }
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 }