public override void TakeActionAffter(bool state) { MessageStructure ms = new MessageStructure(); //ms.WriteByte(_message); ms.PushIntoStack(float.Parse(_x)); ms.PushIntoStack(float.Parse(_y)); ms.PushIntoStack(float.Parse(_z)); ms.PushIntoStack(float.Parse(_qx)); ms.PushIntoStack(float.Parse(_qy)); ms.PushIntoStack(float.Parse(_qz)); ms.PushIntoStack(float.Parse(_sx)); ms.PushIntoStack(float.Parse(_sy)); ms.PushIntoStack(float.Parse(_sz)); ms.PushIntoStack(DateTime.Now); ms.WriteBuffer(new MessageHead(2007)); byte[] buffer = ms.PopBuffer(); var list = GameSession.GetOnlineAll(10 * 1000); list.ForEach(r => { if (r.SessionId != Current.SessionId) { r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => { Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); }); } }); //Current.SendAsync(buffer,0,buffer.Length); base.TakeActionAffter(state); }
public override void TakeActionAffter(bool state) { var list = GameSession.GetOnlineAll(10 * 1000); //byte[] data = Encoding.UTF8.GetBytes(_message); MessageStructure ms = new MessageStructure(); //ms.WriteByte(_message); ms.PushIntoStack(_message); ms.WriteBuffer(new MessageHead(2006)); byte[] buffer = ms.PopBuffer(); list.ForEach(r => { if (r.SessionId != Current.SessionId) { r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => { Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); }); } }); base.TakeActionAffter(state); }
private static byte[] DoSerialize(params BaseEntity[] entityList) { var rootWriter = new MessageStructure(); rootWriter.PushIntoStack(entityList.Length); object fieldValue = null; foreach (var entity in entityList) { var schema = entity.GetSchema(); if (schema == null) { continue; } var recordWriter = new MessageStructure(); recordWriter.PushIntoStack(schema.EntityName); //write columns var columns = schema.GetColumns(); foreach (var column in columns) { fieldValue = entity.GetPropertyValue(column.Name); if (EntitySchemaSet.IsSupportType(column.ColumnType)) { recordWriter.PushIntoStack(column.ColumnType, fieldValue); } else if (column.HasChild) { PushChildStack(recordWriter, column, fieldValue); } } rootWriter.PushIntoStack(recordWriter); } var head = new MessageHead(SyncActionId); rootWriter.WriteBuffer(head); return(rootWriter.PopBuffer()); }
/// <summary> /// /// </summary> /// <param name="response"></param> /// <param name="actionGetter"></param> /// <param name="errorCode"></param> /// <param name="errorInfo"></param> public virtual void ResponseError(BaseGameResponse response, ActionGetter actionGetter, int errorCode, string errorInfo) { string st = actionGetter.GetSt(); ProtocolVersion prtcl = actionGetter.GetPtcl(); MessageHead head = new MessageHead(actionGetter.GetMsgId(), actionGetter.GetActionId(), st, errorCode, errorInfo); MessageStructure sb = new MessageStructure(); if (prtcl >= ProtocolVersion.ExtendHead) { sb.PushIntoStack(0); //不输出扩展头属性 } sb.WriteBuffer(head); response.BinaryWrite(sb.PopBuffer()); }
public override void TakeActionAffter(bool state) { //ms.WriteByte(_message); var cUser = (GameUser)Current.User; MessageStructure ms = new MessageStructure(); //ms.PushIntoStack(); ms.PushIntoStack(true); ms.WriteBuffer(new MessageHead(2010)); byte[] buffer = ms.PopBuffer(); //Current.SendAsync(buffer, 0, buffer.Length); var rUser = GameSession.GetOnlineAll(10 * 1000).FirstOrDefault(r => r.UserId == cUser.RivalId); //list.ForEach(r => //{ // if (r.SessionId != Current.SessionId) // r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => // { // Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); // }); //}); if (rUser != null) { rUser.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => { Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); }); } if (cUser != null) { cUser.ModifyLocked(() => { cUser.RoomId = string.Empty; cUser.Searching = false; cUser.RivalId = -1; }); } base.TakeActionAffter(state); }
protected override void OnDisconnected(GameSession session) { Console.WriteLine("客户端UserId:[{0}]已与服务器断开", session.UserId); var cUser = (GameUser)session.User; if (cUser != null) { MessageStructure ms = new MessageStructure(); //ms.PushIntoStack(); ms.PushIntoStack(true); ms.WriteBuffer(new MessageHead(2010)); byte[] buffer = ms.PopBuffer(); //Current.SendAsync(buffer, 0, buffer.Length); Console.WriteLine("客户端RivalId:[{0}]将会收到离开消息", cUser.RivalId); var rUser = GameSession.GetOnlineAll(10 * 1000).Find(r => r.UserId == cUser.RivalId); if (rUser != null) { rUser.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => { Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); }); } else { Console.WriteLine("客户端RivalUser为空"); } } else { Console.WriteLine("客户端GameUser为空"); } base.OnDisconnected(session); }
private static void PushChildStack(MessageStructure parent, SchemaColumn parentColumn, object value) { if (parentColumn.IsDictionary) { var column = parentColumn.Children[1]; dynamic dict = value; dynamic keys = dict.Keys; int count = dict.Count; parent.PushIntoStack(count); foreach (var key in keys) { object item = dict[key]; var itemWriter = new MessageStructure(); itemWriter.PushIntoStack(key); if (EntitySchemaSet.IsSupportType(column.ColumnType)) { itemWriter.PushIntoStack(column.ColumnType, item); } else if (column.HasChild) { PushChildStack(itemWriter, column, item); } parent.PushIntoStack(itemWriter); } } else if (parentColumn.IsList) { var column = parentColumn.Children[0]; dynamic list = value; int count = list.Count; parent.PushIntoStack(count); foreach (var item in list) { var itemWriter = new MessageStructure(); if (EntitySchemaSet.IsSupportType(column.ColumnType)) { itemWriter.PushIntoStack(column.ColumnType, item); } else if (column.HasChild) { PushChildStack(itemWriter, column, item); } parent.PushIntoStack(itemWriter); } } else { //child entity object parent.PushIntoStack(1); var typeAccessor = ObjectAccessor.Create(value, true); var itemWriter = new MessageStructure(); foreach (var column in parentColumn.Children) { try { var fieldValue = typeAccessor[column.Name]; if (EntitySchemaSet.IsSupportType(column.ColumnType)) { itemWriter.PushIntoStack(column.ColumnType, fieldValue); } else if (column.HasChild) { PushChildStack(itemWriter, column, fieldValue); } } catch { } } parent.PushIntoStack(itemWriter); } }
public override void TakeActionAffter(bool state) { GameSession gameSession = null; GameSession.GetOnlineAll(10 * 1000).ForEach(r => { var user = (GameUser)r.User; if (r.UserId != Current.UserId && user.Searching) { gameSession = r; return; } }); if (gameSession != null) { MessageStructure ms = new MessageStructure(); //ms.PushIntoStack(); ms.PushIntoStack(true); ms.WriteBuffer(new MessageHead(2009)); byte[] buffer = ms.PopBuffer(); Current.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => { Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); }); gameSession.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => { Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); }); var cUser = (GameUser)Current.User; var vUser = (GameUser)gameSession.User; cUser.ModifyLocked(() => { cUser.Searching = false; cUser.RivalId = vUser.UserId; }); vUser.ModifyLocked(() => { vUser.Searching = false; vUser.RivalId = cUser.UserId; }); } //ms.WriteByte(_message); //var cache = new PersonalCacheStruct<GameUser>(); //var persons= cache.FindGlobal(r=>r.Searching==true);//.Where(r => r.Searching == true); //bool start = false; //if (persons.Count()>1) //{ // start = true; //} //MessageStructure ms = new MessageStructure(); ////ms.PushIntoStack(); //ms.PushIntoStack(start); //ms.WriteBuffer(new MessageHead(2009)); //byte[] buffer = ms.PopBuffer(); ////Current.SendAsync(buffer, 0, buffer.Length); //var list = GameSession.GetOnlineAll(10 * 1000); //if (start) //{ // list.ForEach(r => // { // //if (r.SessionId != Current.SessionId) // r.SendAsync(OpCode.Text, buffer, 0, buffer.Length, asyncResult => // { // Console.WriteLine("The results of data send:{0}", asyncResult.Result == ResultCode.Success ? "ok" : "fail"); // }); // }); // foreach (var p in persons) // { // p.ModifyLocked(() => // { // //_user.RoomId = Guid.NewGuid().ToString(); // _user.Searching = false; // }); // } //} base.TakeActionAffter(state); }