private void ProcessStatic(BroadcastMode broadcast, ReliabilityMode reliability, NetMessage msg) { byte rpc; if (!msg.ReadByte(out rpc)) { return; } CallRpc(rpc, msg); if (broadcast == BroadcastMode.All || broadcast == BroadcastMode.Others) { var nmsg = _server.GetMessage(msg.LengthBytes); nmsg.Write(msg.Data, 0, msg.LengthBytes); NetMessage.RecycleMessage(msg); if (broadcast == BroadcastMode.All) { SendToAll(nmsg, reliability); } else { SendMessageToOthers(nmsg, reliability); } } }
private void ProcessStatic(BroadcastMode broadcast, ReliabilityMode reliability, NetMessage msg) { var info = new NetMessageInfo(broadcast, this) { Reliability = reliability }; //route back to room... try { Room.CallRpc(msg, info); } catch (Exception e) { info.ContinueForwarding = false; Debug.LogException(e); } //todo: filter if rpc mode is all/others/owner, and then send to appropriate people. if (info.ContinueForwarding) { if (info.Mode == BroadcastMode.Others) { Room.SendExcept(msg, info.Sender, info.Reliability); } else if (info.Mode == BroadcastMode.All) { Room.SendToPlayers(msg, info.Reliability); } } }
private void RestorePlayerPrefs() { if (PlayerPrefs.HasKey("Type")) { bt_Type = (BeaconType)PlayerPrefs.GetInt("Type"); } if (PlayerPrefs.HasKey("Region")) { s_Region = PlayerPrefs.GetString("Region"); } if (PlayerPrefs.HasKey("UUID")) { s_UUID = PlayerPrefs.GetString("UUID"); } if (PlayerPrefs.HasKey("Major")) { s_Major = PlayerPrefs.GetString("Major"); } if (PlayerPrefs.HasKey("Minor")) { s_Minor = PlayerPrefs.GetString("Minor"); } if (PlayerPrefs.HasKey("BroadcastMode")) { bm_Mode = (BroadcastMode)PlayerPrefs.GetInt("BroadcastMode"); } else { bm_Mode = BroadcastMode.unknown; } }
partial void ImplSendMessage(NetMessage msg, ReliabilityMode reliable, BroadcastMode broadcast) { var lmsg = Manager.Room.PlayerServer.CreateMessage(msg.Data.Length); msg.Clone(lmsg); NetMessage.RecycleMessage(msg); int seq; var method = reliable.PlayerDelivery(out seq); switch (broadcast) { case BroadcastMode.All: if (_observersAndOwner.Count > 0) { Manager.Room.PlayerServer.SendMessage(lmsg, _observersAndOwner, method, seq); } break; case BroadcastMode.Others: if (_observers.Count > 0) { Manager.Room.PlayerServer.SendMessage(lmsg, _observers, method, seq); } break; case BroadcastMode.Owner: Manager.Room.PlayerServer.SendMessage(lmsg, Owner.Connection, method, seq); break; default: throw new NotImplementedException(); } }
/// <summary> /// Send message. Filtering is already done for invalid broadcast+owner combinations (others+server, owner+server) /// </summary> /// <param name="msg"></param> /// <param name="reliable"></param> /// <param name="broadcast"></param> void ImplSendMessage(NetMessage msg, ReliabilityMode reliable, BroadcastMode broadcast) { switch (broadcast) { case BroadcastMode.All: if (ObserversAndOwner.Count > 0) { Manager.Room.SendToConnections(ObserversAndOwner, msg, reliable); } break; case BroadcastMode.Others: if (Observers.Count > 0) { Manager.Room.SendToConnections(Observers, msg, reliable); } break; case BroadcastMode.Owner: Manager.Room.SendToPlayer(Owner, msg, reliable); break; default: throw new NotImplementedException(); break; } }
public static void ReadHeader(byte value, out ReliabilityMode rel, out BroadcastMode broad, out MsgType msg, out SubMsgType sub) { rel = (ReliabilityMode)(value & ReliabilityMask); broad = (BroadcastMode)(value & BroadcastMask); msg = (MsgType)(value & MsgTypeMask); sub = (SubMsgType)(value & SubTypeMask); }
NetMessage StartMessage(byte rpcId, ReliabilityMode mode, int size, BroadcastMode broad = BroadcastMode.Server) { var msg = _room.ServerGetMessage(size + 2); msg.Write(RpcUtils.GetHeader(mode, broad, MsgType.Static)); msg.Write(rpcId); return(msg); }
internal static NetMessage GetMessage(int size, ReliabilityMode rel, BroadcastMode broad, MsgType mType, SubMsgType sub = SubMsgType.Out) { var msg = GetMessage(size + 1); msg.Write(RpcUtils.GetHeader(rel, broad, mType, sub)); return(msg); }
private void setBeaconPropertiesAtStart() { //RestorePlayerPrefs(); if (bm_Mode == BroadcastMode.unknown) // first start { bm_Mode = BroadcastMode.receive; bt_Type = BeaconType.iBeacon; if (iBeaconServer.region.regionName != "") { Debug.Log("check iBeaconServer-inspector"); s_Region = iBeaconServer.region.regionName; bt_Type = iBeaconServer.region.beacon.type; if (bt_Type == BeaconType.EddystoneURL) { s_UUID = iBeaconServer.region.beacon.UUID; } else if (bt_Type == BeaconType.EddystoneUID) { s_UUID = iBeaconServer.region.beacon.UUID; s_Major = iBeaconServer.region.beacon.instance; } else if (bt_Type == BeaconType.iBeacon) { s_UUID = iBeaconServer.region.beacon.UUID; s_Major = iBeaconServer.region.beacon.major.ToString(); s_Minor = iBeaconServer.region.beacon.minor.ToString(); } } else if (iBeaconReceiver.regions.Length != 0) { Debug.Log("check iBeaconReceiver-inspector"); s_Region = iBeaconReceiver.regions[0].regionName; bt_Type = iBeaconReceiver.regions[0].beacon.type; if (bt_Type == BeaconType.EddystoneURL) { s_UUID = iBeaconReceiver.regions[0].beacon.UUID; } else if (bt_Type == BeaconType.EddystoneUID) { s_UUID = iBeaconReceiver.regions[0].beacon.UUID; s_Major = iBeaconReceiver.regions[0].beacon.instance; } else if (bt_Type == BeaconType.iBeacon) { s_UUID = iBeaconReceiver.regions[0].beacon.UUID; s_Major = iBeaconReceiver.regions[0].beacon.major.ToString(); s_Minor = iBeaconReceiver.regions[0].beacon.minor.ToString(); } } } InputDropdown.value = (int)bt_Type; bs_State = BroadcastState.inactive; SetBeaconProperties(); SetBroadcastMode(); SetBroadcastState(); Debug.Log("Beacon properties and modes restored"); }
// BroadcastMode public void btn_switch() { //Debug.Log("Button Switch pressed"); //Ku this //if (bm_Mode == BroadcastMode.receive) // bm_Mode = BroadcastMode.send; //else bm_Mode = BroadcastMode.receive; SetBroadcastMode(); //SavePlayerPrefs(); }
public static byte GetHeader(ReliabilityMode rel, BroadcastMode broad, MsgType msg, SubMsgType sub = SubMsgType.Out) { //OR can be used because the values should not encroach in the other bit areas. byte ret = (byte)rel; ret |= (byte)broad; ret |= (byte)msg; ret |= (byte)sub; return(ret); //todo: which is more efficient? //return (byte)((byte)rel | (byte)broad | (byte)msg | (byte)sub); }
// BroadcastMode public void btn_switch() { //Debug.Log("Button Switch pressed"); if (bm_Mode == BroadcastMode.receive) { bm_Mode = BroadcastMode.send; } else { bm_Mode = BroadcastMode.receive; } SetBroadcastMode(); SavePlayerPrefs(); }
private void ProcessInternal(BroadcastMode broadcast, ReliabilityMode reliability, NetMessage msg) { var rpc = msg.ReadByte(); switch (rpc) { case RandPRpcs.Instantiate: Room.NetworkManager.FinishedInstantiate(this, msg); break; case RandPRpcs.SceneObjectRpc: Room.SceneViewManager.CallRpc(msg, new NetMessageInfo(broadcast, this)); break; } }
private void ProcessStatic(BroadcastMode broadcast, ReliabilityMode reliability, NetMessage msg) { try { if (!msg.ReadByte(out var rpc)) { return; } CallRpc(rpc, msg); } catch (Exception e) { Debug.LogException(e); } }
private void setBeaconPropertiesAtStart() { RestorePlayerPrefs(); //載入前次紀錄 //---------------------------------------------------------------------------------------------------- s_Region = ck_Region; //讀入設定的區域名 ck_UUID = ck_UUID.ToLower(); s_UUID = ck_UUID; //讀入設定的UUID bm_Mode = BroadcastMode.receive; //廣播模式設定為接收 bt_Type = BeaconType.Any; //Beacon模式設定為所有類型 bs_State = BroadcastState.inactive; //將廣播狀態設為未啟動 //---------------------------------------------------------------------------------------------------- // 若iBeaconServer或Receiver有設定,就優先讀取(目前未使用) /*if (bm_Mode == BroadcastMode.unknown) { // first start * bm_Mode = BroadcastMode.receive; * bt_Type = BeaconType.iBeacon; * if (iBeaconServer.region.regionName != "") { * Debug.Log("check iBeaconServer-inspector"); * s_Region = iBeaconServer.region.regionName; * bt_Type = iBeaconServer.region.beacon.type; * if (bt_Type == BeaconType.EddystoneURL) { * s_UUID = iBeaconServer.region.beacon.UUID; * } else if (bt_Type == BeaconType.EddystoneUID) { * s_UUID = iBeaconServer.region.beacon.UUID; * s_Major = iBeaconServer.region.beacon.instance; * } else if (bt_Type == BeaconType.iBeacon) { * s_UUID = iBeaconServer.region.beacon.UUID; * s_Major = iBeaconServer.region.beacon.major.ToString(); * s_Minor = iBeaconServer.region.beacon.minor.ToString(); * } * } else if (iBeaconReceiver.regions.Length != 0) { * Debug.Log("check iBeaconReceiver-inspector"); * s_Region = iBeaconReceiver.regions[0].regionName; * bt_Type = iBeaconReceiver.regions[0].beacon.type; * if (bt_Type == BeaconType.EddystoneURL) { * s_UUID = iBeaconReceiver.regions[0].beacon.UUID; * } else if (bt_Type == BeaconType.EddystoneUID) { * s_UUID = iBeaconReceiver.regions[0].beacon.UUID; * s_Major = iBeaconReceiver.regions[0].beacon.instance; * } else if (bt_Type == BeaconType.iBeacon) { * s_UUID = iBeaconReceiver.regions[0].beacon.UUID; * s_Major = iBeaconReceiver.regions[0].beacon.major.ToString(); * s_Minor = iBeaconReceiver.regions[0].beacon.minor.ToString(); * } * } * } * bs_State = BroadcastState.inactive;*/ }
public void Broadcast(string message, BroadcastMode mode) { var msg = Encrypt.EncryptString(message, LicenseKey); var peers_Unreachable = new List <string>(); foreach (var peer in this.peers) { try { using (var cf = new ChannelFactory <IHexChainService> (new WebHttpBinding(), peer)) { cf.Endpoint.Behaviors.Add(new WebHttpBehavior()); IHexChainService channel = cf.CreateChannel(); switch (mode) { case BroadcastMode.Send: channel.Send(msg); break; case BroadcastMode.SendValidBlock: channel.SendValidBlock(msg); break; case BroadcastMode.Discovery: var id = channel.Discover(msg); Console.WriteLine("Found : {0} at {1}", id, peer); break; } } } catch (Exception ex) { // Console.WriteLine(ex.Message); if (mode == BroadcastMode.Discovery) { peers_Unreachable.Add(peer); } Console.WriteLine("Not Reachable : {0}", peer); } } foreach (var peer in peers_Unreachable) { this.peers.Remove(peer); } }
private void ProcessInternal(BroadcastMode broadcast, ReliabilityMode reliability, NetMessage msg) { try { var id = msg.ReadByte(); switch (id) { case RandPRpcs.FinishedRoomSwitch: ClientFinishedRoomSwitch(); break; } } catch (Exception e) { Debug.LogException(e); } }
internal NetMessageInfo(BroadcastMode mode, Player sender) { Mode = mode; Sender = sender; ContinueForwarding = true; }
/// <summary> /// Send message. Filtering is already done for invalid broadcast+owner combinations (others+server, owner+server) /// </summary> /// <param name="msg"></param> /// <param name="reliable"></param> /// <param name="broadcast"></param> partial void ImplSendMessage(NetMessage msg, ReliabilityMode reliable, BroadcastMode broadcast);
private void ProcessInternal(BroadcastMode broadcast, ReliabilityMode reliability, NetMessage msg) { byte rpc; if (!msg.ReadByte(out rpc)) { Debug.LogError("Malformed internal rpc"); return; } try { ushort pid; Player player; switch (rpc) { case DandRRpcs.RoomSwitch: pid = msg.ReadUInt16(); var room = msg.ReadString(); player = _server.GetPlayer(pid); if (player != null) { player.ChangeRoom(room); } else { Debug.LogError("Attempted to switch a null player"); } break; case DandRRpcs.SyncNetUser: pid = msg.ReadUInt16(); player = _server.GetPlayer(pid); if (player != null && player.NetUserData != null) { player.NetUserData.OnDeserialize(msg); player.OnNetUserDataChanged(); } break; case DandRRpcs.PlayerConnected: pid = msg.ReadUInt16(); player = _server.GetPlayer(pid); if (player != null) { player.FinishedRoomSwitch(); } break; case DandRRpcs.DisconnectMessage: string reason; if (!msg.ReadString(out reason)) { reason = "Shutting down"; } Debug.Log($"Room disconnecting: {reason}"); Running = false; break; } } catch (Exception e) { Debug.LogException(e); } }
internal RoomMessageInfo(BroadcastMode mode) { Mode = mode; }
public static RpcMode RpcMode(ReliabilityMode reliable, BroadcastMode broadcast) { //this is necessary because csharp refuses to give back the correct enum value. return((RpcMode)((byte)reliable | (byte)broadcast)); }
public void Digl_SetSwitch(BroadcastMode m) { bm_Mode = m; }
private void StartStates() { s_Region = ck_Region; //讀入設定的區域名 ck_UUID = ck_UUID.ToLower(); s_UUID = ck_UUID; //讀入設定的UUID bm_Mode = BroadcastMode.receive; //廣播模式設定為接收 bt_Type = BeaconType.Any; //Beacon模式設定為任意模式 bs_State = BroadcastState.inactive; //將廣播狀態設為未啟動 ck_Minor1 = 1001; ck_Minor2 = 1002; ck_Minor3 = 1003; ck_Minor4 = 1004; /*ck_Minor1 = 22720; * ck_Minor2 = 31168; * ck_Minor3 = 64703; * ck_Minor4 = 59583;*/ myStr1 = -65; myStr2 = -62; myStr3 = -57; myStr4 = -59; envfac = 2.0; sheight = 2.0; lheight = 0.5; pos12 = 4.4; pos23 = 9.6; tps = 1.1f; /*if(_B1minor.text != "") * ck_Minor1 = Convert.ToInt32(_B1minor.text); * if(_B2minor.text != "") * ck_Minor2 = Convert.ToInt32(_B2minor.text); * if(_B3minor.text != "") * ck_Minor3 = Convert.ToInt32(_B3minor.text); * if(_B4minor.text != "") * ck_Minor4 = Convert.ToInt32(_B4minor.text); * if(_IFB1str.text != "") * myStr1 = Convert.ToInt32(_IFB1str.text); * if(_IFB2str.text != "") * myStr2 = Convert.ToInt32(_IFB2str.text); * if(_IFB3str.text != "") * myStr3 = Convert.ToInt32(_IFB3str.text); * if(_IFB4str.text != "") * myStr4 = Convert.ToInt32(_IFB4str.text); * if(_IFEV.text != "") * envfac = Convert.ToDouble(_IFEV.text); * if(_IFHT.text != "") * sheight = Convert.ToDouble(_IFHT.text); * if(_POS12.text != "") * pos12 = Convert.ToDouble(_POS12.text); * else * pos12 = 0.0; * if(_POS23.text != "") * pos23 = Convert.ToDouble(_POS23.text); * else * pos23 = 0.0;*/ /*if(_POS34.text != "") * pos34 = Convert.ToDouble(_POS34.text); * else * pos34 = 0.0; * if(_POS14.text != "") * pos14 = Convert.ToDouble(_POS14.text); * else * pos14 = 0.0;*/ //四顆版面積 //HF_area = pos12 * pos23; }
internal PlayerMessageInfo(BroadcastMode mode) { Mode = mode; }