public IEnumerator SendOnly() { var f = false; var c = Utils.NewClient("ct6"); c.Connect().OnSuccess(_ => { return(c.CreateRoom()); }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => { Task.Run(async() => { var count = 6; while (count > 0 && !f) { var options = new SendEventOptions { ReceiverGroup = ReceiverGroup.Others }; await c.SendEvent(5, null, options); Thread.Sleep(5000); } }); Task.Delay(30000).OnSuccess(async __ => { Debug.Log("delay 30s done"); await c.Close(); f = true; }); }, TaskScheduler.FromCurrentSynchronizationContext()); while (!f) { yield return(null); } }
/// <summary> /// 发送自定义事件 /// </summary> /// <param name="eventId">事件 Id</param> /// <param name="eventData">事件参数</param> /// <param name="options">事件选项</param> public Task SendEvent(byte eventId, PlayObject eventData = null, SendEventOptions options = null) { if (Room == null) { throw new Exception("You are not in room yet."); } return(Room.SendEvent(eventId, eventData, options)); }
/// <summary> /// 发送自定义事件 /// </summary> /// <param name="eventId">事件 Id</param> /// <param name="eventData">事件参数</param> /// <param name="options">事件选项</param> /// <returns></returns> public Task SendEvent(byte eventId, PlayObject eventData, SendEventOptions options) { if (state != State.Game) { throw new PlayException(PlayExceptionCode.StateError, $"Error state: {state}"); } var opts = options; if (opts == null) { opts = new SendEventOptions { ReceiverGroup = ReceiverGroup.All }; } return(gameConn.SendEvent(eventId, eventData, opts)); }
public Task SendEvent(byte eventId, Dictionary <string, object> eventData = null, SendEventOptions options = null) { if (state != PlayState.GAME) { throw new PlayException(PlayExceptionCode.StateError, string.Format("You cannot call SendEvent() on {0} state", state.ToString())); } var opts = options; if (opts == null) { opts = new SendEventOptions { ReceiverGroup = ReceiverGroup.All }; } gameConn.SendEvent(eventId, eventData, opts).OnSuccess(_ => { }); return(Task.FromResult(true)); }
internal Task SendEvent(byte eventId, PlayObject eventData, SendEventOptions options) { var direct = new DirectCommand { EventId = eventId }; if (eventData != null) { direct.Msg = ByteString.CopyFrom(CodecUtils.SerializePlayObject(eventData)); } direct.ReceiverGroup = (int)options.ReceiverGroup; if (options.TargetActorIds != null) { direct.ToActorIds.AddRange(options.TargetActorIds); } _ = Send(CommandType.Direct, OpType.None, new Body { Direct = direct }); return(Task.FromResult(true)); }
public IEnumerator CustomEventWithTargetIds() { var f = false; var roomName = "ce1_r"; var c0 = Utils.NewClient("ce1_0"); var c1 = Utils.NewClient("ce1_1"); c0.Connect().OnSuccess(_ => { return(c0.CreateRoom(roomName)); }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => { c0.OnCustomEvent += (eventId, eventData, senderId) => { Assert.AreEqual(eventId, 2); Assert.AreEqual(eventData["name"], "aaa"); Assert.AreEqual(eventData["count"], 100); f = true; }; return(c1.Connect()); }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => { return(c1.JoinRoom(roomName)); }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => { var eventData = new PlayObject { { "name", "aaa" }, { "count", 100 }, }; var options = new SendEventOptions { TargetActorIds = new List <int> { 1, 2 } }; return(c1.SendEvent(2, eventData, options)); }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => { Debug.Log("send event done"); }, TaskScheduler.FromCurrentSynchronizationContext()); while (!f) { yield return(null); } _ = c0.Close(); _ = c1.Close(); }
internal async Task SendEvent(byte eventId, Dictionary <string, object> eventData, SendEventOptions options) { var msg = Message.NewRequest("direct", null); msg["eventId"] = eventId; msg["msg"] = eventData; msg["receiverGroup"] = (int)options.ReceiverGroup; if (options.TargetActorIds != null) { msg["toActorIds"] = options.TargetActorIds.Cast <object>().ToList(); } await Send(msg); }